Drop support for Python 3.6
[mudpy.git] / mudpy / __init__.py
index 2f1bed5..216d03d 100644 (file)
@@ -1,33 +1,42 @@
 """Core modules package for the mudpy engine."""
 
-# Copyright (c) 2004-2015 Jeremy Stanley <fungi@yuggoth.org>. Permission
-# to use, copy, modify, and distribute this software is granted under
-# terms provided in the LICENSE file distributed with this software.
+# Copyright (c) 2004-2022 mudpy authors. Permission to use, copy,
+# modify, and distribute this software is granted under terms
+# provided in the LICENSE file distributed with this software.
 
-import imp  # noqa (referenced via exec of string literal below)
+import importlib
 
-import mudpy  # noqa (referenced via exec of string literal below)
+import mudpy
 
 
 def load():
     """Import/reload some modules (be careful, as this can result in loops)."""
 
-    # pick up the modules list from this package
-    global modules
+    # dynamically build module list from package contents
+    modules = []
+    for module in mudpy.__spec__.loader.get_resource_reader().contents():
 
-    # iterate over the list of modules provided
+        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])
+
+    # iterate over the list of module files included in the package
     for module in modules:
 
         # attempt to reload the module, assuming it was probably imported
         # earlier
         try:
-            exec("imp.reload(%s)" % module)
+            importlib.reload(getattr(mudpy, module))
 
         # must not have been, so import it now
-        except NameError:
-            exec("import mudpy.%s" % module)
+        except AttributeError:
+            importlib.import_module("mudpy.%s" % module)
 
 
-# load the modules contained in this package
-modules = ["data", "misc", "password", "telnet"]
 load()