comparison 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
comparison
equal deleted inserted replaced
-1:000000000000 0:4f3585e2f14b
1 import importlib
2 import logging
3 import pkgutil
4
5 log = logging.getLogger(__name__)
6
7
8 def import_submodules(module, ordered=True, recursive=False):
9 """ Import all submodules of a module
10
11 :param module: module (package name or actual module)
12 :type module: str | module
13
14 :param ordered: Whether to order the returned modules. The default is True, and
15 modules are returned in reverse order to allow hierarchical overrides
16 i.e. 000_galaxy_rules.py, 100_site_rules.py, 200_instance_rules.py
17 :type ordered: bool
18
19 :param recursive: Recursively returns all subpackages
20 :type recursive: bool
21
22 :rtype: [module]
23 """
24 sub_modules = __import_submodules_impl(module, recursive)
25 if ordered:
26 return sorted(sub_modules, reverse=True, key=lambda m: m.__name__)
27 else:
28 return sub_modules
29
30
31 def __import_submodules_impl(module, recursive=False):
32 """ Implementation of import only, without sorting.
33
34 :param module: module (package name or actual module)
35 :type module: str | module
36 :rtype: [module]
37 """
38 if isinstance(module, str):
39 module = importlib.import_module(module)
40 submodules = []
41 for _, name, is_pkg in pkgutil.walk_packages(module.__path__):
42 full_name = module.__name__ + '.' + name
43 try:
44 submodule = importlib.import_module(full_name)
45 submodules.append(submodule)
46 if recursive and is_pkg:
47 submodules.update(__import_submodules_impl(submodule, recursive=True))
48 except BaseException:
49 message = "%s dynamic module could not be loaded (traceback follows):" % (full_name)
50 log.exception(message)
51 continue
52 return submodules