@@ -5,24 +5,11 @@ from collections.abc import Awaitable
5
5
from inspect import CO_ITERABLE_COROUTINE
6
6
from types import CoroutineType, GeneratorType
7
7
8
- from .providers cimport Provider, Resource, NULL_AWAITABLE
8
+ from .providers cimport Provider, Resource
9
9
from .wiring import _Marker
10
10
11
- cimport cython
12
11
13
-
14
- @cython.internal
15
- @cython.no_gc
16
- cdef class KWPair:
17
- cdef str name
18
- cdef object value
19
-
20
- def __cinit__ (self , str name , object value , /):
21
- self .name = name
22
- self .value = value
23
-
24
-
25
- cdef inline bint _is_injectable(dict kwargs, str name):
12
+ cdef inline bint _is_injectable(dict kwargs, object name):
26
13
return name not in kwargs or isinstance (kwargs[name], _Marker)
27
14
28
15
@@ -38,11 +25,8 @@ cdef class DependencyResolver:
38
25
self .injections = injections
39
26
self .closings = closings
40
27
41
- async def _await_injection(self , kw_pair: KWPair, / ) - > None :
42
- self .to_inject[kw_pair.name] = await kw_pair.value
43
-
44
- cdef object _await_injections(self , to_await: list ):
45
- return gather(* map (self ._await_injection, to_await))
28
+ async def _await_injection(self , name: str , value: object , / ) - > None :
29
+ self .to_inject[name] = await value
46
30
47
31
cdef void _handle_injections_sync(self ):
48
32
cdef Provider provider
@@ -60,7 +44,7 @@ cdef class DependencyResolver:
60
44
provide = provider()
61
45
62
46
if provider.is_async_mode_enabled() or _isawaitable(provide):
63
- to_await.append(KWPair (name, provide))
47
+ to_await.append(self ._await_injection (name, provide))
64
48
else :
65
49
self .to_inject[name] = provide
66
50
@@ -93,13 +77,12 @@ cdef class DependencyResolver:
93
77
94
78
async def __aenter__(self ):
95
79
if to_await := self ._handle_injections_async():
96
- await self ._await_injections( to_await)
80
+ await gather( * to_await)
97
81
return self .to_inject
98
82
99
- def __aexit__ (self , *_ ):
83
+ async def __aexit__(self , * _):
100
84
if to_await := self ._handle_closings_async():
101
- return gather(* to_await)
102
- return NULL_AWAITABLE
85
+ await gather(* to_await)
103
86
104
87
105
88
cdef bint _isawaitable(object instance):
0 commit comments