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