+ # hard-coded fallback list of modules expected in this package
+ # TODO(fungi) remove this once Python 3.6 is no longer supported
+ fallback_modules = [
+ "command",
+ "daemon",
+ "data",
+ "menu",
+ "misc",
+ "password",
+ "telnet",
+ "version",
+ ]
+ try:
+ # dynamically build module list from package contents (this only works
+ # in Python 3.7 and later, hence the try/except)
+ modules = []
+ for module in mudpy.__loader__.contents():
+
+ if (
+ # make sure it's a module file, not a directory
+ module.endswith('.py')
+
+ # don't include this file, we're inside it
+ and module != '__init__.py'):
+
+ # trim off the .py file extension
+ modules.append(module[:-3])
+
+ # make sure the fallback list is kept up to date with package contents
+ if fallback_modules != sorted(modules):
+ raise Exception("Fallback module list is incomplete")
+
+ except AttributeError:
+ modules = fallback_modules
+
+ # iterate over the list of module files included in the package