(self, callback, key=None, completer=None, onerror=None)
| 2259 | """An interruptible scanner that searches module synopses.""" |
| 2260 | |
| 2261 | def run(self, callback, key=None, completer=None, onerror=None): |
| 2262 | if key: key = key.lower() |
| 2263 | self.quit = False |
| 2264 | seen = {} |
| 2265 | |
| 2266 | for modname in sys.builtin_module_names: |
| 2267 | if modname != '__main__': |
| 2268 | seen[modname] = 1 |
| 2269 | if key is None: |
| 2270 | callback(None, modname, '') |
| 2271 | else: |
| 2272 | name = __import__(modname).__doc__ or '' |
| 2273 | desc = name.split('\n')[0] |
| 2274 | name = modname + ' - ' + desc |
| 2275 | if name.lower().find(key) >= 0: |
| 2276 | callback(None, modname, desc) |
| 2277 | |
| 2278 | for importer, modname, ispkg in pkgutil.walk_packages(onerror=onerror): |
| 2279 | if self.quit: |
| 2280 | break |
| 2281 | |
| 2282 | if key is None: |
| 2283 | callback(None, modname, '') |
| 2284 | else: |
| 2285 | try: |
| 2286 | spec = importer.find_spec(modname) |
| 2287 | except SyntaxError: |
| 2288 | # raised by tests for bad coding cookies or BOM |
| 2289 | continue |
| 2290 | loader = spec.loader |
| 2291 | if hasattr(loader, 'get_source'): |
| 2292 | try: |
| 2293 | source = loader.get_source(modname) |
| 2294 | except Exception: |
| 2295 | if onerror: |
| 2296 | onerror(modname) |
| 2297 | continue |
| 2298 | desc = source_synopsis(io.StringIO(source)) or '' |
| 2299 | if hasattr(loader, 'get_filename'): |
| 2300 | path = loader.get_filename(modname) |
| 2301 | else: |
| 2302 | path = None |
| 2303 | else: |
| 2304 | try: |
| 2305 | module = importlib._bootstrap._load(spec) |
| 2306 | except ImportError: |
| 2307 | if onerror: |
| 2308 | onerror(modname) |
| 2309 | continue |
| 2310 | desc = module.__doc__.splitlines()[0] if module.__doc__ else '' |
| 2311 | path = getattr(module,'__file__',None) |
| 2312 | name = modname + ' - ' + desc |
| 2313 | if name.lower().find(key) >= 0: |
| 2314 | callback(path, modname, desc) |
| 2315 | |
| 2316 | if completer: |
| 2317 | completer() |
| 2318 |
nothing calls this directly
no test coverage detected