]> granicus.if.org Git - python/commitdiff
Issue #19703: Update pydoc to use the new importer APIs.
authorEric Snow <ericsnowcurrently@gmail.com>
Tue, 7 Jan 2014 03:42:59 +0000 (20:42 -0700)
committerEric Snow <ericsnowcurrently@gmail.com>
Tue, 7 Jan 2014 03:42:59 +0000 (20:42 -0700)
Lib/pydoc.py
Lib/test/test_pydoc.py
Misc/NEWS

index 1369e8a5f85c9934dd5bed99d117a073ea7f70f6..9f626929e226e3161ff70f4da24791104047c89a 100755 (executable)
@@ -246,8 +246,12 @@ def synopsis(filename, cache={}):
         else:
             # Must be a binary module, which has to be imported.
             loader = loader_cls('__temp__', filename)
+            # XXX We probably don't need to pass in the loader here.
+            spec = importlib.util.spec_from_file_location('__temp__', filename,
+                                                          loader=loader)
+            _spec = importlib._bootstrap._SpecMethods(spec)
             try:
-                module = loader.load_module('__temp__')
+                module = _spec.load()
             except:
                 return None
             del sys.modules['__temp__']
@@ -277,8 +281,11 @@ def importfile(path):
         loader = importlib._bootstrap.SourcelessFileLoader(name, path)
     else:
         loader = importlib._bootstrap.SourceFileLoader(name, path)
+    # XXX We probably don't need to pass in the loader here.
+    spec = importlib.util.spec_from_file_location(name, path, loader=loader)
+    _spec = importlib._bootstrap._SpecMethods(spec)
     try:
-        return loader.load_module(name)
+        return _spec.load()
     except:
         raise ErrorDuringImport(path, sys.exc_info())
 
@@ -2008,10 +2015,11 @@ class ModuleScanner:
                 callback(None, modname, '')
             else:
                 try:
-                    loader = importer.find_module(modname)
+                    spec = pkgutil._get_spec(importer, modname)
                 except SyntaxError:
                     # raised by tests for bad coding cookies or BOM
                     continue
+                loader = spec.loader
                 if hasattr(loader, 'get_source'):
                     try:
                         source = loader.get_source(modname)
@@ -2025,8 +2033,9 @@ class ModuleScanner:
                     else:
                         path = None
                 else:
+                    _spec = importlib._bootstrap._SpecMethods(spec)
                     try:
-                        module = loader.load_module(modname)
+                        module = _spec.load()
                     except ImportError:
                         if onerror:
                             onerror(modname)
index 250fb04dcdc83a60992c1d1fdef24f3eb36e204d..1025f5a280f607057fee12c4b3ee70f59508ed89 100644 (file)
@@ -649,8 +649,10 @@ class PydocImportTest(PydocBaseTest):
     def test_importfile(self):
         loaded_pydoc = pydoc.importfile(pydoc.__file__)
 
+        self.assertIsNot(loaded_pydoc, pydoc)
         self.assertEqual(loaded_pydoc.__name__, 'pydoc')
         self.assertEqual(loaded_pydoc.__file__, pydoc.__file__)
+        self.assertEqual(loaded_pydoc.__spec__, pydoc.__spec__)
 
 
 class TestDescriptions(unittest.TestCase):
index 189e30ba745f938c64e722645919826a1c46de54..01969eeab5d261279cd5307014dd6b061e63cb82 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -287,6 +287,8 @@ Library
 
 - Issue #19708: Update pkgutil to use the new importer APIs.
 
+- Issue #19703: Update pydoc to use the new importer APIs.
+
 - Issue #19851: Fixed a regression in reloading sub-modules.
 
 - ssl.create_default_context() sets OP_NO_COMPRESSION to prevent CRIME.