take shutdown to Resource

This commit is contained in:
elina-israyelyan 2025-11-02 02:12:15 +04:00
parent 44a6a68647
commit 36586a4e57
2 changed files with 10 additions and 45 deletions

View File

@ -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

View File

@ -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.