diff env/lib/python3.9/site-packages/galaxy/util/submodules.py @ 0:4f3585e2f14b draft default tip

"planemo upload commit 60cee0fc7c0cda8592644e1aad72851dec82c959"
author shellac
date Mon, 22 Mar 2021 18:12:50 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/env/lib/python3.9/site-packages/galaxy/util/submodules.py	Mon Mar 22 18:12:50 2021 +0000
@@ -0,0 +1,52 @@
+import importlib
+import logging
+import pkgutil
+
+log = logging.getLogger(__name__)
+
+
+def import_submodules(module, ordered=True, recursive=False):
+    """ Import all submodules of a module
+
+    :param module: module (package name or actual module)
+    :type module: str | module
+
+    :param ordered: Whether to order the returned modules. The default is True, and
+           modules are returned in reverse order to allow hierarchical overrides
+           i.e. 000_galaxy_rules.py, 100_site_rules.py, 200_instance_rules.py
+    :type ordered: bool
+
+    :param recursive: Recursively returns all subpackages
+    :type recursive: bool
+
+    :rtype: [module]
+    """
+    sub_modules = __import_submodules_impl(module, recursive)
+    if ordered:
+        return sorted(sub_modules, reverse=True, key=lambda m: m.__name__)
+    else:
+        return sub_modules
+
+
+def __import_submodules_impl(module, recursive=False):
+    """ Implementation of import only, without sorting.
+
+    :param module: module (package name or actual module)
+    :type module: str | module
+    :rtype: [module]
+    """
+    if isinstance(module, str):
+        module = importlib.import_module(module)
+    submodules = []
+    for _, name, is_pkg in pkgutil.walk_packages(module.__path__):
+        full_name = module.__name__ + '.' + name
+        try:
+            submodule = importlib.import_module(full_name)
+            submodules.append(submodule)
+            if recursive and is_pkg:
+                submodules.update(__import_submodules_impl(submodule, recursive=True))
+        except BaseException:
+            message = "%s dynamic module could not be loaded (traceback follows):" % (full_name)
+            log.exception(message)
+            continue
+    return submodules