Commit 3a62d14b authored by Eric Snow's avatar Eric Snow

Issue #19703: Update pydoc to use the new importer APIs.

parent 3192eac6
...@@ -246,8 +246,12 @@ def synopsis(filename, cache={}): ...@@ -246,8 +246,12 @@ def synopsis(filename, cache={}):
else: else:
# Must be a binary module, which has to be imported. # Must be a binary module, which has to be imported.
loader = loader_cls('__temp__', filename) 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: try:
module = loader.load_module('__temp__') module = _spec.load()
except: except:
return None return None
del sys.modules['__temp__'] del sys.modules['__temp__']
...@@ -277,8 +281,11 @@ def importfile(path): ...@@ -277,8 +281,11 @@ def importfile(path):
loader = importlib._bootstrap.SourcelessFileLoader(name, path) loader = importlib._bootstrap.SourcelessFileLoader(name, path)
else: else:
loader = importlib._bootstrap.SourceFileLoader(name, path) 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: try:
return loader.load_module(name) return _spec.load()
except: except:
raise ErrorDuringImport(path, sys.exc_info()) raise ErrorDuringImport(path, sys.exc_info())
...@@ -2008,10 +2015,11 @@ class ModuleScanner: ...@@ -2008,10 +2015,11 @@ class ModuleScanner:
callback(None, modname, '') callback(None, modname, '')
else: else:
try: try:
loader = importer.find_module(modname) spec = pkgutil._get_spec(importer, modname)
except SyntaxError: except SyntaxError:
# raised by tests for bad coding cookies or BOM # raised by tests for bad coding cookies or BOM
continue continue
loader = spec.loader
if hasattr(loader, 'get_source'): if hasattr(loader, 'get_source'):
try: try:
source = loader.get_source(modname) source = loader.get_source(modname)
...@@ -2025,8 +2033,9 @@ class ModuleScanner: ...@@ -2025,8 +2033,9 @@ class ModuleScanner:
else: else:
path = None path = None
else: else:
_spec = importlib._bootstrap._SpecMethods(spec)
try: try:
module = loader.load_module(modname) module = _spec.load()
except ImportError: except ImportError:
if onerror: if onerror:
onerror(modname) onerror(modname)
......
...@@ -649,8 +649,10 @@ class PydocImportTest(PydocBaseTest): ...@@ -649,8 +649,10 @@ class PydocImportTest(PydocBaseTest):
def test_importfile(self): def test_importfile(self):
loaded_pydoc = pydoc.importfile(pydoc.__file__) loaded_pydoc = pydoc.importfile(pydoc.__file__)
self.assertIsNot(loaded_pydoc, pydoc)
self.assertEqual(loaded_pydoc.__name__, 'pydoc') self.assertEqual(loaded_pydoc.__name__, 'pydoc')
self.assertEqual(loaded_pydoc.__file__, pydoc.__file__) self.assertEqual(loaded_pydoc.__file__, pydoc.__file__)
self.assertEqual(loaded_pydoc.__spec__, pydoc.__spec__)
class TestDescriptions(unittest.TestCase): class TestDescriptions(unittest.TestCase):
......
...@@ -287,6 +287,8 @@ Library ...@@ -287,6 +287,8 @@ Library
- Issue #19708: Update pkgutil to use the new importer APIs. - 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. - Issue #19851: Fixed a regression in reloading sub-modules.
- ssl.create_default_context() sets OP_NO_COMPRESSION to prevent CRIME. - ssl.create_default_context() sets OP_NO_COMPRESSION to prevent CRIME.
......
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