| 87 | self._original = list(original_meta_path) |
| 88 | |
| 89 | def find_spec(self, fullname: str, path=None, target=None): |
| 90 | if self._tracer.is_seen(fullname): |
| 91 | return None |
| 92 | |
| 93 | for finder in self._original: |
| 94 | try: |
| 95 | spec = finder.find_spec(fullname, path, target) if hasattr(finder, "find_spec") else None |
| 96 | except Exception: |
| 97 | continue |
| 98 | |
| 99 | if spec is None: |
| 100 | continue |
| 101 | |
| 102 | self._tracer.record(fullname) |
| 103 | |
| 104 | if spec.loader is not None: |
| 105 | spec.loader = LoaderProxy(spec.loader, self._tracer, fullname) |
| 106 | |
| 107 | return spec |
| 108 | |
| 109 | return None |
| 110 | |
| 111 | |
| 112 | class ImportTreeTracer: |