diff --git a/Doc/Makefile b/Doc/Makefile index b8ca1edfbc60a5..262564c89ac9bc 100644 --- a/Doc/Makefile +++ b/Doc/Makefile @@ -47,6 +47,8 @@ help: build: -mkdir -p build + $(BLURB) help + $(SPHINXBUILD) --version # Look first for a Misc/NEWS file (building from a source release tarball # or old repo) and use that, otherwise look for a Misc/NEWS.d directory # (building from a newer repo) and use blurb to generate the NEWS file. diff --git a/Doc/about.rst b/Doc/about.rst index 3ea311fa629dd2..ace5ca27d28d42 100644 --- a/Doc/about.rst +++ b/Doc/about.rst @@ -2,6 +2,7 @@ About these documents ===================== +No-op! These documents are generated from `reStructuredText`_ sources by `Sphinx`_, a document processor specifically written for the Python documentation. diff --git a/Lib/importlib/_abc.py b/Lib/importlib/_abc.py deleted file mode 100644 index fb5ec727cea6e4..00000000000000 --- a/Lib/importlib/_abc.py +++ /dev/null @@ -1,50 +0,0 @@ -"""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 97d5afa3001930..0b20e7c13f2825 100644 --- a/Lib/importlib/abc.py +++ b/Lib/importlib/abc.py @@ -12,7 +12,6 @@ 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 @@ -135,6 +134,53 @@ def invalidate_caches(self): _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 1e44843a687f2b..269a6fa930aabd 100644 --- a/Lib/importlib/util.py +++ b/Lib/importlib/util.py @@ -1,5 +1,5 @@ """Utility code for constructing importers, etc.""" -from ._abc import Loader +from . import abc from ._bootstrap import module_from_spec from ._bootstrap import _resolve_name from ._bootstrap import spec_from_loader @@ -263,7 +263,7 @@ def __delattr__(self, attr): delattr(self, attr) -class LazyLoader(Loader): +class LazyLoader(abc.Loader): """A loader that creates a module which defers loading until attribute access.""" diff --git a/Lib/test/test_importlib/test_spec.py b/Lib/test/test_importlib/test_spec.py index eed90f29f9286c..da478e1bdaf0a5 100644 --- a/Lib/test/test_importlib/test_spec.py +++ b/Lib/test/test_importlib/test_spec.py @@ -650,8 +650,8 @@ def test_spec_from_file_location_default(self): # Need to use a circuitous route to get at importlib.machinery to make # sure the same class object is used in the isinstance() check as # would have been used to create the loader. - SourceFileLoader = self.util.spec_from_file_location.__globals__['SourceFileLoader'] - self.assertIsInstance(spec.loader, SourceFileLoader) + self.assertIsInstance(spec.loader, + self.util.abc.machinery.SourceFileLoader) self.assertEqual(spec.loader.name, self.name) self.assertEqual(spec.loader.path, self.path) self.assertEqual(spec.origin, self.path)