Source code for ebonite.utils.importing

import sys
from importlib import _bootstrap


"""
Copied from django.utils.module_loading
"""


[docs]def import_module(name, package=None): """Import a module. The 'package' argument is required when performing a relative import. It specifies the package to use as the anchor point from which to resolve the relative import to an absolute import. """ level = 0 if name.startswith('.'): if not package: msg = ("the 'package' argument is required to perform a relative " "import for {!r}") raise TypeError(msg.format(name)) for character in name: if character != '.': break level += 1 return _bootstrap._gcd_import(name[level:], package, level)
[docs]def import_string(dotted_path): """ Import a dotted module path and return the attribute/class designated by the last name in the path. Raise ImportError if the import failed. """ try: module_path, class_name = dotted_path.rsplit('.', 1) except ValueError as err: raise ImportError("%s doesn't look like a module path" % dotted_path) from err module = import_module(module_path) try: return getattr(module, class_name) except AttributeError as err: raise ImportError('Module "%s" does not define a "%s" attribute/class' % ( module_path, class_name)) from err
[docs]def module_importable(module_name): try: import_module(module_name) return True except ImportError: return False
[docs]def module_imported(module_name): """ Checks if module already imported :param module_name: module name to check :return: `True` or `False` """ return sys.modules.get(module_name) is not None