mirror of
https://github.com/python/cpython.git
synced 2025-08-12 04:49:01 +00:00
Issue #19703: Update pydoc to use the new importer APIs.
This commit is contained in:
parent
3192eac6cf
commit
3a62d14b24
3 changed files with 17 additions and 4 deletions
17
Lib/pydoc.py
17
Lib/pydoc.py
|
@ -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):
|
||||||
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:
|
||||||
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:
|
||||||
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):
|
||||||
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
|
||||||
|
|
||||||
- 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.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue