]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-29576: add explicit deprecation for importlib.abc.find_loader() and find_module...
authorMatthias Bussonnier <bussonniermatthias@gmail.com>
Thu, 16 Feb 2017 02:00:32 +0000 (18:00 -0800)
committerBrett Cannon <brettcannon@users.noreply.github.com>
Thu, 16 Feb 2017 02:00:32 +0000 (18:00 -0800)
Doc/whatsnew/3.7.rst
Lib/importlib/__init__.py
Lib/importlib/abc.py
Lib/test/test_importlib/test_abc.py
Misc/NEWS

index 81ad4f924551c5b14e9b1fbb422d2aea7a5e8e18..21621c5ee4eac9de20db20499affe3345f6a2c72 100644 (file)
@@ -140,6 +140,17 @@ Deprecated
   ``0x03050400`` and ``0x03060000`` (not including) or ``0x03060100`` or
   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
 =======
index b6a9f82e05f268153b50b54a45bf091c4e6afc8b..f87e20e4045dc30ecd02ec51b880cdf2acacc122 100644 (file)
@@ -79,7 +79,8 @@ def find_loader(name, path=None):
     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)
     try:
         loader = sys.modules[name].__loader__
index daff681e69689f4884bb2f9d95a94777d80d309e..661bd76e077f7446f732909cfe16384a1a163d84 100644 (file)
@@ -13,6 +13,7 @@ try:
 except ImportError as exc:
     _frozen_importlib_external = _bootstrap_external
 import abc
+import warnings
 
 
 def _register(abstract_cls, *classes):
@@ -34,6 +35,8 @@ class Finder(metaclass=abc.ABCMeta):
     reimplementations of the import system.  Otherwise, finder
     implementations should derive from the more specific MetaPathFinder
     or PathEntryFinder ABCs.
+
+    Deprecated since Python 3.3
     """
 
     @abc.abstractmethod
@@ -57,11 +60,16 @@ class MetaPathFinder(Finder):
         If no module is found, return None.  The fullname is a str and
         the path is a list of strings or None.
 
-        This method is deprecated in favor of finder.find_spec(). If find_spec()
-        exists then backwards-compatible functionality is provided for this
-        method.
+        This method is deprecated since Python 3.4 in favor of
+        finder.find_spec(). If find_spec() exists then backwards-compatible
+        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'):
             return None
         found = self.find_spec(fullname, path)
@@ -94,10 +102,15 @@ class PathEntryFinder(Finder):
         The portion will be discarded if another path entry finder
         locates the module as a normal module or package.
 
-        This method is deprecated in favor of finder.find_spec(). If find_spec()
-        is provided than backwards-compatible functionality is provided.
-
+        This method is deprecated since Python 3.4 in favor of
+        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'):
             return None, []
         found = self.find_spec(fullname)
index 4c090f32de3011bab652b9c42fca1e6ffe0a1ccd..db36204e3b4e79ad346ee45ef18237fb16521238 100644 (file)
@@ -163,6 +163,9 @@ class MetaPathFinderDefaultsTests(ABCTestHarness):
         # Calling the method is a no-op.
         self.ins.invalidate_caches()
 
+    def test_find_module_warns(self):
+        with self.assertWarns(DeprecationWarning):
+            self.ins.find_module('something', None)
 
 (Frozen_MPFDefaultTests,
  Source_MPFDefaultTests
@@ -189,6 +192,9 @@ class PathEntryFinderDefaultsTests(ABCTestHarness):
         # Should be a no-op.
         self.ins.invalidate_caches()
 
+    def test_find_loader_warns(self):
+        with self.assertWarns(DeprecationWarning):
+            self.ins.find_loader('something')
 
 (Frozen_PEFDefaultTests,
  Source_PEFDefaultTests
index 51055ef6f6f5bab59b0bf1b1fe8094dc9e2b4967..1422627b9052a23850da728af24b812ef9036913 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -229,6 +229,9 @@ Extension Modules
 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()
   for _decimal and _pydecimal. Thanks Andrew Nester.