mirror of
				https://github.com/ets-labs/python-dependency-injector.git
				synced 2025-10-31 07:57:43 +03:00 
			
		
		
		
	Minor improvements for _cwiring.DependencyResolver code generation
* Remove KWPair * Avoid type checks around _is_injectable
This commit is contained in:
		
							parent
							
								
									be7d25518d
								
							
						
					
					
						commit
						eb74b1e9d0
					
				|  | @ -5,24 +5,11 @@ from collections.abc import Awaitable | ||||||
| from inspect import CO_ITERABLE_COROUTINE | from inspect import CO_ITERABLE_COROUTINE | ||||||
| from types import CoroutineType, GeneratorType | from types import CoroutineType, GeneratorType | ||||||
| 
 | 
 | ||||||
| from .providers cimport Provider, Resource, NULL_AWAITABLE | from .providers cimport Provider, Resource | ||||||
| from .wiring import _Marker | from .wiring import _Marker | ||||||
| 
 | 
 | ||||||
| cimport cython |  | ||||||
| 
 | 
 | ||||||
| 
 | cdef inline bint _is_injectable(dict kwargs, object name): | ||||||
| @cython.internal |  | ||||||
| @cython.no_gc |  | ||||||
| cdef class KWPair: |  | ||||||
|     cdef str name |  | ||||||
|     cdef object value |  | ||||||
| 
 |  | ||||||
|     def __cinit__(self, str name, object value, /): |  | ||||||
|         self.name = name |  | ||||||
|         self.value = value |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| cdef inline bint _is_injectable(dict kwargs, str name): |  | ||||||
|     return name not in kwargs or isinstance(kwargs[name], _Marker) |     return name not in kwargs or isinstance(kwargs[name], _Marker) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @ -38,11 +25,8 @@ cdef class DependencyResolver: | ||||||
|         self.injections = injections |         self.injections = injections | ||||||
|         self.closings = closings |         self.closings = closings | ||||||
| 
 | 
 | ||||||
|     async def _await_injection(self, kw_pair: KWPair, /) -> None: |     async def _await_injection(self, name: str, value: object, /) -> None: | ||||||
|         self.to_inject[kw_pair.name] = await kw_pair.value |         self.to_inject[name] = await value | ||||||
| 
 |  | ||||||
|     cdef object _await_injections(self, to_await: list): |  | ||||||
|         return gather(*map(self._await_injection, to_await)) |  | ||||||
| 
 | 
 | ||||||
|     cdef void _handle_injections_sync(self): |     cdef void _handle_injections_sync(self): | ||||||
|         cdef Provider provider |         cdef Provider provider | ||||||
|  | @ -60,7 +44,7 @@ cdef class DependencyResolver: | ||||||
|                 provide = provider() |                 provide = provider() | ||||||
| 
 | 
 | ||||||
|                 if provider.is_async_mode_enabled() or _isawaitable(provide): |                 if provider.is_async_mode_enabled() or _isawaitable(provide): | ||||||
|                     to_await.append(KWPair(name, provide)) |                     to_await.append(self._await_injection(name, provide)) | ||||||
|                 else: |                 else: | ||||||
|                     self.to_inject[name] = provide |                     self.to_inject[name] = provide | ||||||
| 
 | 
 | ||||||
|  | @ -93,13 +77,12 @@ cdef class DependencyResolver: | ||||||
| 
 | 
 | ||||||
|     async def __aenter__(self): |     async def __aenter__(self): | ||||||
|         if to_await := self._handle_injections_async(): |         if to_await := self._handle_injections_async(): | ||||||
|             await self._await_injections(to_await) |             await gather(*to_await) | ||||||
|         return self.to_inject |         return self.to_inject | ||||||
| 
 | 
 | ||||||
|     def __aexit__(self, *_): |     async def __aexit__(self, *_): | ||||||
|         if to_await := self._handle_closings_async(): |         if to_await := self._handle_closings_async(): | ||||||
|             return gather(*to_await) |             await gather(*to_await) | ||||||
|         return NULL_AWAITABLE |  | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| cdef bint _isawaitable(object instance): | cdef bint _isawaitable(object instance): | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user