diff --git a/ddtrace/internal/module.py b/ddtrace/internal/module.py index e5d8e66e023..d510e6ec931 100644 --- a/ddtrace/internal/module.py +++ b/ddtrace/internal/module.py @@ -1,7 +1,6 @@ import abc from collections import defaultdict from importlib._bootstrap import _init_module_attrs -from importlib.abc import Loader from importlib.machinery import ModuleSpec from importlib.util import find_spec from pathlib import Path @@ -17,6 +16,10 @@ from ddtrace.internal.wrapping.context import WrappingContext +if t.TYPE_CHECKING: + from importlib.abc import Loader + + ModuleHookType = t.Callable[[ModuleType], None] TransformerType = t.Callable[[CodeType, ModuleType], CodeType] PreExecHookType = t.Callable[[t.Any, ModuleType], None] @@ -139,7 +142,7 @@ def _resolve(path: Path) -> t.Optional[Path]: # https://github.com/GrahamDumpleton/wrapt/blob/df0e62c2740143cceb6cafea4c306dae1c559ef8/src/wrapt/importer.py -def find_loader(fullname: str) -> t.Optional[Loader]: +def find_loader(fullname: str) -> t.Optional["Loader"]: return getattr(find_spec(fullname), "loader", None) @@ -152,7 +155,7 @@ def is_namespace_spec(spec: ModuleSpec) -> bool: class _ImportHookChainedLoader: - def __init__(self, loader: t.Optional[Loader], spec: t.Optional[ModuleSpec] = None) -> None: + def __init__(self, loader: t.Optional["Loader"], spec: t.Optional[ModuleSpec] = None) -> None: self.loader = loader self.spec = spec @@ -356,7 +359,7 @@ def after_import(self, module: ModuleType) -> None: def transform(self, code: CodeType, _module: ModuleType) -> CodeType: return code - def find_module(self, fullname: str, path: t.Optional[str] = None) -> t.Optional[Loader]: + def find_module(self, fullname: str, path: t.Optional[str] = None) -> t.Optional["Loader"]: if fullname in self._finding: return None @@ -374,7 +377,7 @@ def find_module(self, fullname: str, path: t.Optional[str] = None) -> t.Optional loader.add_callback(type(self), self.after_import) loader.add_transformer(type(self), self.transform) - return t.cast(Loader, loader) + return t.cast("Loader", loader) finally: self._finding.remove(fullname) @@ -402,7 +405,7 @@ def find_spec( loader = getattr(spec, "loader", None) if not isinstance(loader, _ImportHookChainedLoader): - spec.loader = t.cast(Loader, _ImportHookChainedLoader(loader, spec)) + spec.loader = t.cast("Loader", _ImportHookChainedLoader(loader, spec)) t.cast(_ImportHookChainedLoader, spec.loader).add_callback(type(self), self.after_import) t.cast(_ImportHookChainedLoader, spec.loader).add_transformer(type(self), self.transform)