MCPcopy Index your code
hub / github.com/python/cpython / ModuleScanner

Class ModuleScanner

Lib/pydoc.py:2210–2269  ·  view source on GitHub ↗

An interruptible scanner that searches module synopses.

Source from the content-addressed store, hash-verified

2208help = Helper()
2209
2210class ModuleScanner:
2211 """An interruptible scanner that searches module synopses."""
2212
2213 def run(self, callback, key=None, completer=None, onerror=None):
2214 if key: key = key.lower()
2215 self.quit = False
2216 seen = {}
2217
2218 for modname in sys.builtin_module_names:
2219 if modname != '__main__':
2220 seen[modname] = 1
2221 if key is None:
2222 callback(None, modname, '')
2223 else:
2224 name = __import__(modname).__doc__ or ''
2225 desc = name.split('\n')[0]
2226 name = modname + ' - ' + desc
2227 if name.lower().find(key) >= 0:
2228 callback(None, modname, desc)
2229
2230 for importer, modname, ispkg in pkgutil.walk_packages(onerror=onerror):
2231 if self.quit:
2232 break
2233
2234 if key is None:
2235 callback(None, modname, '')
2236 else:
2237 try:
2238 spec = importer.find_spec(modname)
2239 except SyntaxError:
2240 # raised by tests for bad coding cookies or BOM
2241 continue
2242 loader = spec.loader
2243 if hasattr(loader, 'get_source'):
2244 try:
2245 source = loader.get_source(modname)
2246 except Exception:
2247 if onerror:
2248 onerror(modname)
2249 continue
2250 desc = source_synopsis(io.StringIO(source)) or ''
2251 if hasattr(loader, 'get_filename'):
2252 path = loader.get_filename(modname)
2253 else:
2254 path = None
2255 else:
2256 try:
2257 module = importlib._bootstrap._load(spec)
2258 except ImportError:
2259 if onerror:
2260 onerror(modname)
2261 continue
2262 desc = module.__doc__.splitlines()[0] if module.__doc__ else ''
2263 path = getattr(module,'__file__',None)
2264 name = modname + ' - ' + desc
2265 if name.lower().find(key) >= 0:
2266 callback(path, modname, desc)
2267

Callers 3

listmodulesMethod · 0.85
aproposFunction · 0.85
html_searchFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…