mirror of https://github.com/python/cpython
Check in the patch proposed by Ben Hayden (benjhayden) for issue
#1550: help('modules') broken by several 3rd party libraries. Tested with Python build: trunk:54235:59936M -- the reported error occurs with Django installed (or with any __init__.py present on the path that raises an exception), and such errors indeed go away when this change is applied.
This commit is contained in:
parent
5f0b7ae481
commit
9e0f116fac
|
@ -1816,7 +1816,9 @@ Please wait a moment while I gather a list of all available modules...
|
||||||
modname = modname[:-9] + ' (package)'
|
modname = modname[:-9] + ' (package)'
|
||||||
if find(modname, '.') < 0:
|
if find(modname, '.') < 0:
|
||||||
modules[modname] = 1
|
modules[modname] = 1
|
||||||
ModuleScanner().run(callback)
|
def onerror(modname):
|
||||||
|
callback(None, modname, None)
|
||||||
|
ModuleScanner().run(callback, onerror=onerror)
|
||||||
self.list(modules.keys())
|
self.list(modules.keys())
|
||||||
self.output.write('''
|
self.output.write('''
|
||||||
Enter any module name to get more help. Or, type "modules spam" to search
|
Enter any module name to get more help. Or, type "modules spam" to search
|
||||||
|
@ -1852,7 +1854,7 @@ class Scanner:
|
||||||
class ModuleScanner:
|
class ModuleScanner:
|
||||||
"""An interruptible scanner that searches module synopses."""
|
"""An interruptible scanner that searches module synopses."""
|
||||||
|
|
||||||
def run(self, callback, key=None, completer=None):
|
def run(self, callback, key=None, completer=None, onerror=None):
|
||||||
if key: key = lower(key)
|
if key: key = lower(key)
|
||||||
self.quit = False
|
self.quit = False
|
||||||
seen = {}
|
seen = {}
|
||||||
|
@ -1867,7 +1869,7 @@ class ModuleScanner:
|
||||||
if find(lower(modname + ' - ' + desc), key) >= 0:
|
if find(lower(modname + ' - ' + desc), key) >= 0:
|
||||||
callback(None, modname, desc)
|
callback(None, modname, desc)
|
||||||
|
|
||||||
for importer, modname, ispkg in pkgutil.walk_packages():
|
for importer, modname, ispkg in pkgutil.walk_packages(onerror=onerror):
|
||||||
if self.quit:
|
if self.quit:
|
||||||
break
|
break
|
||||||
if key is None:
|
if key is None:
|
||||||
|
|
Loading…
Reference in New Issue