Skip to content

Commit cdf8391

Browse files
committed
use contextvars for circular import check
1 parent 890e78e commit cdf8391

File tree

1 file changed

+10
-5
lines changed

1 file changed

+10
-5
lines changed

aikido_zen/sinks/builtins_import.py

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,18 @@
1+
from aikido_zen.sinks import on_import, patch_function, after
2+
import contextvars
13
import importlib.metadata
24
from importlib.metadata import PackageNotFoundError
3-
45
from aikido_zen.background_process.packages import PackagesStore
5-
from aikido_zen.sinks import on_import, patch_function, after
6+
7+
running_import_scan = contextvars.ContextVar("running_import_scan", default=False)
68

79

810
@after
911
def _import(func, instance, args, kwargs, return_value):
12+
if running_import_scan.get():
13+
return
14+
running_import_scan.set(True)
15+
1016
if not hasattr(return_value, "__file__"):
1117
return # Would be built-in into the interpreter (system package)
1218

@@ -18,9 +24,6 @@ def _import(func, instance, args, kwargs, return_value):
1824
# Make sure the name exists
1925
return
2026
name = name.split(".")[0] # Remove submodules
21-
if name == "importlib" or name == "importlib_metadata":
22-
# Avoid circular dependencies
23-
return
2427

2528
if PackagesStore.get_package(name):
2629
return
@@ -33,6 +36,8 @@ def _import(func, instance, args, kwargs, return_value):
3336
if version:
3437
PackagesStore.add_package(name, version)
3538

39+
running_import_scan.set(False)
40+
3641

3742
@on_import("builtins")
3843
def patch(m):

0 commit comments

Comments
 (0)