Source code for crash.infra

# -*- coding: utf-8 -*-
# vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79:

from typing import Callable, Any, List

import sys
import glob
import os.path
import importlib

[docs]def autoload_submodules(caller: str, callback: Callable[[Any], None] = None) -> List[str]: mods = [] try: mod = sys.modules[caller] except KeyError: mod = importlib.import_module(caller) mods.append(caller) path = os.path.dirname(mod.__file__) modules = glob.glob("{}/[A-Za-z0-9_]*.py".format(path)) for modname in modules: modname = os.path.basename(modname)[:-3] if modname == '__init__': continue modname = "{}.{}".format(caller, modname) x = importlib.import_module(modname) if callback: callback(x) mods.append(modname) packages = glob.glob("{}/[A-Za-z0-9_]*/__init__.py".format(path)) for pkg in packages: modname = "{}.{}".format(caller, os.path.basename(os.path.dirname(pkg))) x = importlib.import_module(modname) if callback: callback(x) mods += autoload_submodules(modname, callback) return mods