diff planemo/lib/python3.7/site-packages/galaxy/util/submodules.py @ 1:56ad4e20f292 draft

"planemo upload commit 6eee67778febed82ddd413c3ca40b3183a3898f1"
author guerler
date Fri, 31 Jul 2020 00:32:28 -0400
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/planemo/lib/python3.7/site-packages/galaxy/util/submodules.py	Fri Jul 31 00:32:28 2020 -0400
@@ -0,0 +1,54 @@
+from __future__ import absolute_import
+
+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