Skip to content

Commit bf68f6b

Browse files
committed
Fix circular imports for wiring.intercept
Strangely, I can't seem to reproduce this error in the test suite.
1 parent e073b46 commit bf68f6b

File tree

5 files changed

+27
-6
lines changed

5 files changed

+27
-6
lines changed

pif/providers/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1+
# isort: skip_file
2+
from pif.providers.provider import Provider
13
from pif.providers.blank import Blank
24
from pif.providers.existing_singleton import ExistingSingleton
35
from pif.providers.factory import Factory
4-
from pif.providers.provider import Provider
56
from pif.providers.singleton import Singleton

pif/providers/factory.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
from typing import Callable
1313

1414
from pif.providers.provider import Provider
15-
from pif.wiring import intercept
15+
from pif.providers.util import intercept_args
1616

1717

1818
class Factory[T](Provider):
@@ -23,7 +23,7 @@ class Factory[T](Provider):
2323
__slots__ = ("_func", "_depends")
2424

2525
def __init__(self, func: Callable[[...], T], *args, **kwargs):
26-
self._func = functools.partial(intercept(func), *args, **kwargs)
26+
self._func = functools.partial(intercept_args(func), *args, **kwargs)
2727

2828
def _evaluate(self) -> T:
2929
return self._func()

pif/providers/provider.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ def override_existing[U](self, value: U) -> Override[Provider[T]]:
4747
"""
4848
Override the current provider with an existing singleton.
4949
"""
50-
from .existing_singleton import ExistingSingleton
50+
from pif.providers.existing_singleton import ExistingSingleton
5151

5252
return self.override(ExistingSingleton(value))
5353

pif/providers/singleton.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
from typing import Callable
1313

1414
from pif.providers.provider import Provider
15-
from pif.wiring import intercept
15+
from pif.providers.util import intercept_args
1616

1717
UNSET = object()
1818

@@ -27,7 +27,7 @@ class Singleton[T](Provider):
2727
__slots__ = ("_func", "_func", "_result", "_depends")
2828

2929
def __init__(self, func: Callable[[...], T], *args, **kwargs):
30-
self._func = functools.partial(intercept(func), *args, **kwargs)
30+
self._func = functools.partial(intercept_args(func), *args, **kwargs)
3131
self._result = UNSET
3232

3333
def _evaluate(self) -> T:

pif/providers/util.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import functools
2+
3+
from pif.providers.provider import Provider
4+
5+
6+
def intercept_args(func):
7+
"""
8+
Intercepts the args and kwargs at runtime evaluating any Provider values.
9+
10+
Kept separate to wiring.py to avoid circular imports.
11+
"""
12+
13+
@functools.wraps(func)
14+
def wrapper(*args, **kwargs):
15+
return func(
16+
*(a() if isinstance(a, Provider) else a for a in args),
17+
**{k: v() if isinstance(v, Provider) else v for k, v in kwargs.items()},
18+
)
19+
20+
return wrapper

0 commit comments

Comments
 (0)