Kaydet (Commit) 1d4601c2 authored tarafından Matthias Bussonnier's avatar Matthias Bussonnier Kaydeden (comit) Brett Cannon

bpo-29576: add explicit deprecation for importlib.abc.find_loader() and find_module() (GH-32)

üst 72dccde8
...@@ -140,6 +140,17 @@ Deprecated ...@@ -140,6 +140,17 @@ Deprecated
``0x03050400`` and ``0x03060000`` (not including) or ``0x03060100`` or ``0x03050400`` and ``0x03060000`` (not including) or ``0x03060100`` or
higher. (Contributed by Serhiy Storchaka in :issue:`27867`.) higher. (Contributed by Serhiy Storchaka in :issue:`27867`.)
- Methods
:meth:`MetaPathFinder.find_module() <importlib.abc.MetaPathFinder.find_module>`
(replaced by
:meth:`MetaPathFinder.find_spec() <importlib.abc.MetaPathFinder.find_spec>`
) and
:meth:`PathEntryFinder.find_loader() <importlib.abc.PathEntryFinder.find_loader>`
(replaced by
:meth:`PathEntryFinder.find_spec() <importlib.abc.PathEntryFinder.find_spec>`)
both deprecated in Python 3.4 now emit :exc:`DeprecationWarning`. (Contributed
by Matthias Bussonnier in :issue:`29576`)
Removed Removed
======= =======
......
...@@ -79,7 +79,8 @@ def find_loader(name, path=None): ...@@ -79,7 +79,8 @@ def find_loader(name, path=None):
This function is deprecated in favor of importlib.util.find_spec(). This function is deprecated in favor of importlib.util.find_spec().
""" """
warnings.warn('Use importlib.util.find_spec() instead.', warnings.warn('Deprecated since Python 3.4. '
'Use importlib.util.find_spec() instead.',
DeprecationWarning, stacklevel=2) DeprecationWarning, stacklevel=2)
try: try:
loader = sys.modules[name].__loader__ loader = sys.modules[name].__loader__
......
...@@ -13,6 +13,7 @@ try: ...@@ -13,6 +13,7 @@ try:
except ImportError as exc: except ImportError as exc:
_frozen_importlib_external = _bootstrap_external _frozen_importlib_external = _bootstrap_external
import abc import abc
import warnings
def _register(abstract_cls, *classes): def _register(abstract_cls, *classes):
...@@ -34,6 +35,8 @@ class Finder(metaclass=abc.ABCMeta): ...@@ -34,6 +35,8 @@ class Finder(metaclass=abc.ABCMeta):
reimplementations of the import system. Otherwise, finder reimplementations of the import system. Otherwise, finder
implementations should derive from the more specific MetaPathFinder implementations should derive from the more specific MetaPathFinder
or PathEntryFinder ABCs. or PathEntryFinder ABCs.
Deprecated since Python 3.3
""" """
@abc.abstractmethod @abc.abstractmethod
...@@ -57,11 +60,16 @@ class MetaPathFinder(Finder): ...@@ -57,11 +60,16 @@ class MetaPathFinder(Finder):
If no module is found, return None. The fullname is a str and If no module is found, return None. The fullname is a str and
the path is a list of strings or None. the path is a list of strings or None.
This method is deprecated in favor of finder.find_spec(). If find_spec() This method is deprecated since Python 3.4 in favor of
exists then backwards-compatible functionality is provided for this finder.find_spec(). If find_spec() exists then backwards-compatible
method. functionality is provided for this method.
""" """
warnings.warn("MetaPathFinder.find_module() is deprecated since Python "
"3.4 in favor of MetaPathFinder.find_spec()"
"(available since 3.4)",
DeprecationWarning,
stacklevel=2)
if not hasattr(self, 'find_spec'): if not hasattr(self, 'find_spec'):
return None return None
found = self.find_spec(fullname, path) found = self.find_spec(fullname, path)
...@@ -94,10 +102,15 @@ class PathEntryFinder(Finder): ...@@ -94,10 +102,15 @@ class PathEntryFinder(Finder):
The portion will be discarded if another path entry finder The portion will be discarded if another path entry finder
locates the module as a normal module or package. locates the module as a normal module or package.
This method is deprecated in favor of finder.find_spec(). If find_spec() This method is deprecated since Python 3.4 in favor of
is provided than backwards-compatible functionality is provided. finder.find_spec(). If find_spec() is provided than backwards-compatible
functionality is provided.
""" """
warnings.warn("PathEntryFinder.find_loader() is deprecated since Python "
"3.4 in favor of PathEntryFinder.find_spec() "
"(available since 3.4)",
DeprecationWarning,
stacklevel=2)
if not hasattr(self, 'find_spec'): if not hasattr(self, 'find_spec'):
return None, [] return None, []
found = self.find_spec(fullname) found = self.find_spec(fullname)
......
...@@ -163,6 +163,9 @@ class MetaPathFinderDefaultsTests(ABCTestHarness): ...@@ -163,6 +163,9 @@ class MetaPathFinderDefaultsTests(ABCTestHarness):
# Calling the method is a no-op. # Calling the method is a no-op.
self.ins.invalidate_caches() self.ins.invalidate_caches()
def test_find_module_warns(self):
with self.assertWarns(DeprecationWarning):
self.ins.find_module('something', None)
(Frozen_MPFDefaultTests, (Frozen_MPFDefaultTests,
Source_MPFDefaultTests Source_MPFDefaultTests
...@@ -189,6 +192,9 @@ class PathEntryFinderDefaultsTests(ABCTestHarness): ...@@ -189,6 +192,9 @@ class PathEntryFinderDefaultsTests(ABCTestHarness):
# Should be a no-op. # Should be a no-op.
self.ins.invalidate_caches() self.ins.invalidate_caches()
def test_find_loader_warns(self):
with self.assertWarns(DeprecationWarning):
self.ins.find_loader('something')
(Frozen_PEFDefaultTests, (Frozen_PEFDefaultTests,
Source_PEFDefaultTests Source_PEFDefaultTests
......
...@@ -229,6 +229,9 @@ Extension Modules ...@@ -229,6 +229,9 @@ Extension Modules
Library Library
------- -------
- bpo-29576: Improve some deprecations in importlib. Some deprecated methods
now emit DeprecationWarnings and have better descriptive messages.
- bpo-29534: Fixed different behaviour of Decimal.from_float() - bpo-29534: Fixed different behaviour of Decimal.from_float()
for _decimal and _pydecimal. Thanks Andrew Nester. for _decimal and _pydecimal. Thanks Andrew Nester.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment