mirror of
https://github.com/ets-labs/python-dependency-injector.git
synced 2025-02-20 21:41:00 +03:00
Add resource base class for async resources
This commit is contained in:
parent
fc2633faa3
commit
d50fbbd83b
File diff suppressed because it is too large
Load Diff
|
@ -2735,6 +2735,19 @@ cdef class Resource(Provider):
|
|||
self.__kwargs_len,
|
||||
)
|
||||
self.__shutdowner = initializer.shutdown
|
||||
elif self._is_async_resource_subclass(self.__initializer):
|
||||
initializer = self.__initializer()
|
||||
async_init = __call(
|
||||
initializer.init,
|
||||
args,
|
||||
self.__args,
|
||||
self.__args_len,
|
||||
kwargs,
|
||||
self.__kwargs,
|
||||
self.__kwargs_len,
|
||||
)
|
||||
self.__initialized = True
|
||||
return __async_resource_init(self, async_init, initializer.shutdown)
|
||||
elif inspect.isgeneratorfunction(self.__initializer):
|
||||
initializer = __call(
|
||||
self.__initializer,
|
||||
|
@ -2796,6 +2809,15 @@ cdef class Resource(Provider):
|
|||
from . import resources
|
||||
return issubclass(instance, resources.Resource)
|
||||
|
||||
@staticmethod
|
||||
def _is_async_resource_subclass(instance):
|
||||
if sys.version_info < (3, 5):
|
||||
return False
|
||||
if not isinstance(instance, CLASS_TYPES):
|
||||
return
|
||||
from . import resources
|
||||
return issubclass(instance, resources.AsyncResource)
|
||||
|
||||
|
||||
cdef class Container(Provider):
|
||||
"""Container provider provides an instance of declarative container.
|
||||
|
|
|
@ -29,3 +29,14 @@ class Resource(Generic[T], metaclass=ResourceMeta):
|
|||
@abc.abstractmethod
|
||||
def shutdown(self, resource: T) -> None:
|
||||
...
|
||||
|
||||
|
||||
class AsyncResource(Generic[T], metaclass=ResourceMeta):
|
||||
|
||||
@abc.abstractmethod
|
||||
async def init(self, *args, **kwargs) -> T:
|
||||
...
|
||||
|
||||
@abc.abstractmethod
|
||||
async def shutdown(self, resource: T) -> None:
|
||||
...
|
||||
|
|
Loading…
Reference in New Issue
Block a user