Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 3a62d14

Browse files
Issue #19703: Update pydoc to use the new importer APIs.
1 parent 3192eac commit 3a62d14

3 files changed

Lines changed: 17 additions & 4 deletions

File tree

Lib/pydoc.py

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -246,8 +246,12 @@ def synopsis(filename, cache={}):
246246
else:
247247
# Must be a binary module, which has to be imported.
248248
loader = loader_cls('__temp__', filename)
249+
# XXX We probably don't need to pass in the loader here.
250+
spec = importlib.util.spec_from_file_location('__temp__', filename,
251+
loader=loader)
252+
_spec = importlib._bootstrap._SpecMethods(spec)
249253
try:
250-
module = loader.load_module('__temp__')
254+
module = _spec.load()
251255
except:
252256
return None
253257
del sys.modules['__temp__']
@@ -277,8 +281,11 @@ def importfile(path):
277281
loader = importlib._bootstrap.SourcelessFileLoader(name, path)
278282
else:
279283
loader = importlib._bootstrap.SourceFileLoader(name, path)
284+
# XXX We probably don't need to pass in the loader here.
285+
spec = importlib.util.spec_from_file_location(name, path, loader=loader)
286+
_spec = importlib._bootstrap._SpecMethods(spec)
280287
try:
281-
return loader.load_module(name)
288+
return _spec.load()
282289
except:
283290
raise ErrorDuringImport(path, sys.exc_info())
284291

@@ -2008,10 +2015,11 @@ def run(self, callback, key=None, completer=None, onerror=None):
20082015
callback(None, modname, '')
20092016
else:
20102017
try:
2011-
loader = importer.find_module(modname)
2018+
spec = pkgutil._get_spec(importer, modname)
20122019
except SyntaxError:
20132020
# raised by tests for bad coding cookies or BOM
20142021
continue
2022+
loader = spec.loader
20152023
if hasattr(loader, 'get_source'):
20162024
try:
20172025
source = loader.get_source(modname)
@@ -2025,8 +2033,9 @@ def run(self, callback, key=None, completer=None, onerror=None):
20252033
else:
20262034
path = None
20272035
else:
2036+
_spec = importlib._bootstrap._SpecMethods(spec)
20282037
try:
2029-
module = loader.load_module(modname)
2038+
module = _spec.load()
20302039
except ImportError:
20312040
if onerror:
20322041
onerror(modname)

Lib/test/test_pydoc.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -649,8 +649,10 @@ def test_modules_search_builtin(self):
649649
def test_importfile(self):
650650
loaded_pydoc = pydoc.importfile(pydoc.__file__)
651651

652+
self.assertIsNot(loaded_pydoc, pydoc)
652653
self.assertEqual(loaded_pydoc.__name__, 'pydoc')
653654
self.assertEqual(loaded_pydoc.__file__, pydoc.__file__)
655+
self.assertEqual(loaded_pydoc.__spec__, pydoc.__spec__)
654656

655657

656658
class TestDescriptions(unittest.TestCase):

Misc/NEWS

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -287,6 +287,8 @@ Library
287287

288288
- Issue #19708: Update pkgutil to use the new importer APIs.
289289

290+
- Issue #19703: Update pydoc to use the new importer APIs.
291+
290292
- Issue #19851: Fixed a regression in reloading sub-modules.
291293

292294
- ssl.create_default_context() sets OP_NO_COMPRESSION to prevent CRIME.

0 commit comments

Comments
 (0)