2020-06-17 18:15:59 -03:00
|
|
|
"""Subset of importlib.abc used to reduce importlib.util imports."""
|
|
|
|
from . import _bootstrap
|
|
|
|
import abc
|
|
|
|
|
|
|
|
|
|
|
|
class Loader(metaclass=abc.ABCMeta):
|
|
|
|
|
|
|
|
"""Abstract base class for import loaders."""
|
|
|
|
|
|
|
|
def create_module(self, spec):
|
|
|
|
"""Return a module to initialize and into which to load.
|
|
|
|
|
|
|
|
This method should raise ImportError if anything prevents it
|
|
|
|
from creating a new module. It may return None to indicate
|
|
|
|
that the spec should create the new module.
|
|
|
|
"""
|
|
|
|
# By default, defer to default semantics for the new module.
|
|
|
|
return None
|
|
|
|
|
|
|
|
# We don't define exec_module() here since that would break
|
|
|
|
# hasattr checks we do to support backward compatibility.
|
|
|
|
|
|
|
|
def load_module(self, fullname):
|
|
|
|
"""Return the loaded module.
|
|
|
|
|
|
|
|
The module must be added to sys.modules and have import-related
|
|
|
|
attributes set properly. The fullname is a str.
|
|
|
|
|
|
|
|
ImportError is raised on failure.
|
|
|
|
|
|
|
|
This method is deprecated in favor of loader.exec_module(). If
|
|
|
|
exec_module() exists then it is used to provide a backwards-compatible
|
|
|
|
functionality for this method.
|
|
|
|
|
|
|
|
"""
|
|
|
|
if not hasattr(self, 'exec_module'):
|
|
|
|
raise ImportError
|
2020-12-04 19:39:21 -04:00
|
|
|
# Warning implemented in _load_module_shim().
|
2020-06-17 18:15:59 -03:00
|
|
|
return _bootstrap._load_module_shim(self, fullname)
|
|
|
|
|
|
|
|
def module_repr(self, module):
|
|
|
|
"""Return a module's repr.
|
|
|
|
|
|
|
|
Used by the module type when the method does not raise
|
|
|
|
NotImplementedError.
|
|
|
|
|
|
|
|
This method is deprecated.
|
|
|
|
|
|
|
|
"""
|
|
|
|
# The exception will cause ModuleType.__repr__ to ignore this method.
|
|
|
|
raise NotImplementedError
|