mirror of https://github.com/python/cpython
51 lines
1.6 KiB
Python
51 lines
1.6 KiB
Python
"""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
|
|
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
|