Skip to content

Commit fdcccbc

Browse files
authored
refactoring: ♻️ Many things
1 parent 1d09894 commit fdcccbc

File tree

5 files changed

+44
-24
lines changed

5 files changed

+44
-24
lines changed

injection/_core/descriptors.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,7 @@ def __init__(
1717
default: T = NotImplemented,
1818
module: Module | None = None,
1919
) -> None:
20-
module = module or mod()
21-
self.__value = module.get_lazy_instance(cls, default)
20+
self.__value = (module or mod()).get_lazy_instance(cls, default)
2221

2322
def __get__(
2423
self,

injection/_core/injectables.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ def get_instance(self) -> T:
4848

4949

5050
@dataclass(repr=False, eq=False, frozen=True, slots=True)
51-
class SimpleInjectable[T](Injectable[T]):
51+
class TransientInjectable[T](Injectable[T]):
5252
factory: Caller[..., T]
5353

5454
async def aget_instance(self) -> T:

injection/_core/module.py

Lines changed: 33 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,9 @@
6666
ScopedInjectable,
6767
ScopedSlotInjectable,
6868
ShouldBeInjectable,
69-
SimpleInjectable,
7069
SimpleScopedInjectable,
7170
SingletonInjectable,
71+
TransientInjectable,
7272
)
7373
from injection._core.slots import SlotKey
7474
from injection.exceptions import (
@@ -430,7 +430,7 @@ def injectable[**P, T](
430430
wrapped: Recipe[P, T] | None = None,
431431
/,
432432
*,
433-
cls: InjectableFactory[T] = SimpleInjectable,
433+
cls: InjectableFactory[T] = TransientInjectable,
434434
ignore_type_hint: bool = False,
435435
inject: bool = True,
436436
on: TypeInfo[T] = (),
@@ -583,7 +583,12 @@ def make_injected_function[**P, T](
583583
threadsafe: bool = ...,
584584
) -> AsyncInjectedFunction[P, T]: ...
585585

586-
def make_injected_function(self, wrapped, /, threadsafe=False): # type: ignore[no-untyped-def]
586+
def make_injected_function[**P, T](
587+
self,
588+
wrapped: Callable[P, T],
589+
/,
590+
threadsafe: bool = False,
591+
) -> InjectedFunction[P, T]:
587592
metadata = InjectMetadata(wrapped, threadsafe)
588593

589594
@metadata.task
@@ -592,7 +597,7 @@ def listen() -> None:
592597
self.add_listener(metadata)
593598

594599
if iscoroutinefunction(wrapped):
595-
return AsyncInjectedFunction(metadata)
600+
return AsyncInjectedFunction(metadata) # type: ignore[arg-type, return-value]
596601

597602
return SyncInjectedFunction(metadata)
598603

@@ -630,7 +635,11 @@ async def aget_instance[T](
630635
default: None = ...,
631636
) -> T | None: ...
632637

633-
async def aget_instance(self, cls, default=None): # type: ignore[no-untyped-def]
638+
async def aget_instance[T, Default](
639+
self,
640+
cls: InputType[T],
641+
default: Default | None = None,
642+
) -> T | Default | None:
634643
try:
635644
return await self.afind_instance(cls)
636645
except (KeyError, SkipInjectable):
@@ -650,7 +659,11 @@ def get_instance[T](
650659
default: None = ...,
651660
) -> T | None: ...
652661

653-
def get_instance(self, cls, default=None): # type: ignore[no-untyped-def]
662+
def get_instance[T, Default](
663+
self,
664+
cls: InputType[T],
665+
default: Default | None = None,
666+
) -> T | Default | None:
654667
try:
655668
return self.find_instance(cls)
656669
except (KeyError, SkipInjectable):
@@ -674,7 +687,13 @@ def aget_lazy_instance[T](
674687
cache: bool = ...,
675688
) -> Awaitable[T | None]: ...
676689

677-
def aget_lazy_instance(self, cls, default=None, *, cache=False): # type: ignore[no-untyped-def]
690+
def aget_lazy_instance[T, Default](
691+
self,
692+
cls: InputType[T],
693+
default: Default | None = None,
694+
*,
695+
cache: bool = False,
696+
) -> Awaitable[T | Default | None]:
678697
if cache:
679698
return alazy(lambda: self.aget_instance(cls, default))
680699

@@ -700,7 +719,13 @@ def get_lazy_instance[T](
700719
cache: bool = ...,
701720
) -> Invertible[T | None]: ...
702721

703-
def get_lazy_instance(self, cls, default=None, *, cache=False): # type: ignore[no-untyped-def]
722+
def get_lazy_instance[T, Default](
723+
self,
724+
cls: InputType[T],
725+
default: Default | None = None,
726+
*,
727+
cache: bool = False,
728+
) -> Invertible[T | Default | None]:
704729
if cache:
705730
return lazy(lambda: self.get_instance(cls, default))
706731

@@ -790,8 +815,6 @@ def load_profile(self, *names: str) -> ContextManager[Self]:
790815

791816
self.unlock().init_modules(*modules)
792817

793-
del module, modules
794-
795818
@contextmanager
796819
def cleaner() -> Iterator[Self]:
797820
yield self

injection/_core/scope.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ def get_scope(name: str, default: EllipsisType = ...) -> Scope: ...
163163
def get_scope[T](name: str, default: T) -> Scope | T: ...
164164

165165

166-
def get_scope(name, default=...): # type: ignore[no-untyped-def]
166+
def get_scope[T](name: str, default: T | EllipsisType = ...) -> Scope | T:
167167
for states in (__CONTEXTUAL_SCOPES, __SHARED_SCOPES):
168168
state = states.get(name)
169169
if state and (scope := state.get_scope()):

injection/ext/fastapi.py

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,25 +18,23 @@ def __call__[T](
1818
default: T = NotImplemented,
1919
module: Module | None = None,
2020
) -> Any:
21-
module = module or mod()
22-
lazy_instance = module.aget_lazy_instance(cls, default)
21+
ainstance = (module or mod()).aget_lazy_instance(cls, default)
2322

24-
async def getter() -> T:
25-
return await lazy_instance
23+
async def dependency() -> T:
24+
return await ainstance
2625

27-
return Depends(getter, use_cache=False)
26+
class_name = getattr(cls, "__name__", str(cls))
27+
dependency.__name__ = f"inject({class_name})"
28+
return Depends(dependency, use_cache=False)
2829

2930
def __getitem__(self, params: Any, /) -> Any:
30-
if not isinstance(params, tuple):
31-
params = (params,)
32-
33-
iter_params = iter(params)
31+
iter_params = iter(params if isinstance(params, tuple) else (params,))
3432
cls = next(iter_params)
3533
return Annotated[cls, self(cls), *iter_params]
3634

3735

3836
if TYPE_CHECKING:
39-
type Inject[T, *Args] = Annotated[T, Depends(), *Args]
37+
type Inject[T, *Metadata] = Annotated[T, Depends(...), *Metadata]
4038

4139
else:
4240
Inject = FastAPIInject()

0 commit comments

Comments
 (0)