mirror of
https://github.com/ets-labs/python-dependency-injector.git
synced 2025-11-24 11:55:47 +03:00
take shutdown to Resource
This commit is contained in:
parent
44a6a68647
commit
36586a4e57
|
|
@ -244,8 +244,6 @@ cdef class ContextLocalResource(Resource):
|
|||
cdef object _initialized_context_var
|
||||
cdef object _shutdowner_context_var
|
||||
|
||||
cpdef object _provide(self, tuple args, dict kwargs)
|
||||
|
||||
|
||||
cdef class Container(Provider):
|
||||
cdef object _container_cls
|
||||
|
|
|
|||
|
|
@ -3801,24 +3801,27 @@ cdef class Resource(Provider):
|
|||
|
||||
def shutdown(self):
|
||||
"""Shutdown resource."""
|
||||
if not self._initialized:
|
||||
if not self._initialized :
|
||||
self._reset_all_contex_vars()
|
||||
if self._async_mode == ASYNC_MODE_ENABLED:
|
||||
return NULL_AWAITABLE
|
||||
return
|
||||
|
||||
if self._shutdowner:
|
||||
future = self._shutdowner(None, None, None)
|
||||
|
||||
if __is_future_or_coroutine(future):
|
||||
return ensure_future(self._shutdown_async(future))
|
||||
|
||||
self._resource = None
|
||||
self._initialized = False
|
||||
self._shutdowner = None
|
||||
self._reset_all_contex_vars()
|
||||
return ensure_future(future)
|
||||
|
||||
self._reset_all_contex_vars()
|
||||
if self._async_mode == ASYNC_MODE_ENABLED:
|
||||
return NULL_AWAITABLE
|
||||
|
||||
def _reset_all_contex_vars(self):
|
||||
self._initialized = False
|
||||
self._resource = None
|
||||
self._shutdowner = None
|
||||
|
||||
@property
|
||||
def related(self):
|
||||
"""Return related providers generator."""
|
||||
|
|
@ -3827,14 +3830,6 @@ cdef class Resource(Provider):
|
|||
yield from filter(is_provider, self.kwargs.values())
|
||||
yield from super().related
|
||||
|
||||
async def _shutdown_async(self, future) -> None:
|
||||
try:
|
||||
await future
|
||||
finally:
|
||||
self._resource = None
|
||||
self._initialized = False
|
||||
self._shutdowner = None
|
||||
|
||||
async def _handle_async_cm(self, obj) -> None:
|
||||
try:
|
||||
resource = await obj.__aenter__()
|
||||
|
|
@ -3858,7 +3853,6 @@ cdef class Resource(Provider):
|
|||
|
||||
return resource, shutdowner
|
||||
|
||||
|
||||
cpdef object _provide(self, tuple args, dict kwargs):
|
||||
if self._initialized:
|
||||
return self._resource
|
||||
|
|
@ -3911,8 +3905,6 @@ cdef class Resource(Provider):
|
|||
|
||||
|
||||
cdef class ContextLocalResource(Resource):
|
||||
_none = object()
|
||||
|
||||
def __init__(self, provides=None, *args, **kwargs):
|
||||
self._initialized_context_var = ContextVar("_initialized_context_var", default=False)
|
||||
self._resource_context_var = ContextVar("_resource_context_var", default=None)
|
||||
|
|
@ -3950,31 +3942,6 @@ cdef class ContextLocalResource(Resource):
|
|||
self._shutdowner_context_var.set(value)
|
||||
|
||||
|
||||
def shutdown(self):
|
||||
"""Shutdown resource."""
|
||||
if not self._initialized :
|
||||
self._reset_all_contex_vars()
|
||||
if self._async_mode == ASYNC_MODE_ENABLED:
|
||||
return NULL_AWAITABLE
|
||||
return
|
||||
|
||||
if self._shutdowner != None:
|
||||
future = self._shutdowner(None, None, None)
|
||||
if __is_future_or_coroutine(future):
|
||||
self._reset_all_contex_vars()
|
||||
return ensure_future(future)
|
||||
|
||||
|
||||
self._reset_all_contex_vars()
|
||||
if self._async_mode == ASYNC_MODE_ENABLED:
|
||||
return NULL_AWAITABLE
|
||||
|
||||
def _reset_all_contex_vars(self):
|
||||
self._initialized=False
|
||||
self._resource = None
|
||||
self._shutdowner = None
|
||||
|
||||
|
||||
cdef class Container(Provider):
|
||||
"""Container provider provides an instance of declarative container.
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user