Source code for warg.packages.namespaces
import importlib
import logging
import pkgutil
from types import ModuleType
from typing import Any, Dict
_logger = logging.getLogger(__name__)
__all__ = ["import_submodules", "import_submodule_alls"]
[docs]
def import_submodules(package: Any, recursive: bool = True) -> Dict[str, ModuleType]:
"""Import all submodules of a module, recursively, including subpackages
:param package: package (name or actual module)
:param recursive:
"""
if isinstance(package, str):
if package == "__main__":
assert NotImplementedError
else:
package = importlib.import_module(package)
results = {}
for loader, name, is_pkg in pkgutil.walk_packages(package.__path__):
full_name = f"{str(package.__name__)}.{str(name)}"
results[full_name] = importlib.import_module(full_name)
if recursive and is_pkg:
results.update(import_submodules(full_name))
return results
[docs]
def import_submodule_alls(package: Any) -> Dict[str, ModuleType]:
"""Import all submodules of a module, recursively, including subpackages
:param package: package (name or actual module)
:param recursive:
"""
if isinstance(package, str):
if package == "__main__":
assert NotImplementedError
else:
package = importlib.import_module(package)
results = {}
for loader, name, is_pkg in pkgutil.walk_packages(package.__path__):
full_name = f"{str(package.__name__)}.{str(name)}"
sub_module = importlib.import_module(full_name)
if hasattr(sub_module, "__all__"):
alls = sub_module.__all__
else:
alls = dir(sub_module)
for a in alls:
results[a] = getattr(sub_module, a)
return results