Wrapper for finders in sys.meta_path to wrap all loaders with ImportLoader.
| 276 | |
| 277 | |
| 278 | class ImportFinder: |
| 279 | """Wrapper for finders in sys.meta_path to wrap all loaders with ImportLoader.""" |
| 280 | |
| 281 | def __init__(self, watcher, finder): |
| 282 | self.watcher = watcher |
| 283 | self.finder = finder |
| 284 | |
| 285 | def __getattr__(self, name): |
| 286 | if name == "find_spec" and hasattr(self.finder, name): |
| 287 | return self._find_spec |
| 288 | return getattr(self.finder, name) |
| 289 | |
| 290 | def _find_spec(self, fullname, path, target=None): |
| 291 | # Attempt to find the spec |
| 292 | spec = self.finder.find_spec(fullname, path, target) |
| 293 | if spec is not None: |
| 294 | if getattr(spec, "loader", None) is not None: |
| 295 | # Patch the loader to enable reloading |
| 296 | spec.loader = ImportLoader(self.watcher, spec.loader) |
| 297 | return spec |
| 298 | |
| 299 | |
| 300 | def _process_ps(ps, default_ps: str): |