Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions Doc/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
1 change: 1 addition & 0 deletions Doc/about.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
50 changes: 0 additions & 50 deletions Lib/importlib/_abc.py

This file was deleted.

48 changes: 47 additions & 1 deletion Lib/importlib/abc.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions Lib/importlib/util.py
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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."""

Expand Down
4 changes: 2 additions & 2 deletions Lib/test/test_importlib/test_spec.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down