diff options
author | Victor Stinner <vstinner@python.org> | 2020-06-17 21:15:59 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-06-17 21:15:59 (GMT) |
commit | 9e09849d20987c131b28bcdd252e53440d4cd1b3 (patch) | |
tree | 92d787be6889fe22f233f40f40556f66e89bac1d /Lib/importlib | |
parent | 236a0f5cf022b59dbb6ea17a8e7a677c573d39b9 (diff) | |
download | cpython-9e09849d20987c131b28bcdd252e53440d4cd1b3.zip cpython-9e09849d20987c131b28bcdd252e53440d4cd1b3.tar.gz cpython-9e09849d20987c131b28bcdd252e53440d4cd1b3.tar.bz2 |
bpo-41006: importlib.util no longer imports typing (GH-20938)
Create importlib._abc submodule to avoid importing typing when
importlib.util is imported. Move Loader ABC into importlib._abc.
Diffstat (limited to 'Lib/importlib')
-rw-r--r-- | Lib/importlib/_abc.py | 50 | ||||
-rw-r--r-- | Lib/importlib/abc.py | 48 | ||||
-rw-r--r-- | Lib/importlib/util.py | 4 |
3 files changed, 53 insertions, 49 deletions
diff --git a/Lib/importlib/_abc.py b/Lib/importlib/_abc.py new file mode 100644 index 0000000..fb5ec72 --- /dev/null +++ b/Lib/importlib/_abc.py @@ -0,0 +1,50 @@ +"""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 diff --git a/Lib/importlib/abc.py b/Lib/importlib/abc.py index 0b20e7c..97d5afa 100644 --- a/Lib/importlib/abc.py +++ b/Lib/importlib/abc.py @@ -12,6 +12,7 @@ try: import _frozen_importlib_external except ImportError: _frozen_importlib_external = _bootstrap_external +from ._abc import Loader import abc import warnings from typing import Protocol, runtime_checkable @@ -134,53 +135,6 @@ class PathEntryFinder(Finder): _register(PathEntryFinder, machinery.FileFinder) -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 - - class ResourceLoader(Loader): """Abstract base class for loaders which can return data from their diff --git a/Lib/importlib/util.py b/Lib/importlib/util.py index 269a6fa..1e44843 100644 --- a/Lib/importlib/util.py +++ b/Lib/importlib/util.py @@ -1,5 +1,5 @@ """Utility code for constructing importers, etc.""" -from . import abc +from ._abc import Loader from ._bootstrap import module_from_spec from ._bootstrap import _resolve_name from ._bootstrap import spec_from_loader @@ -263,7 +263,7 @@ class _LazyModule(types.ModuleType): delattr(self, attr) -class LazyLoader(abc.Loader): +class LazyLoader(Loader): """A loader that creates a module which defers loading until attribute access.""" |