diff --git a/src/dependency_injector/providers.pxd b/src/dependency_injector/providers.pxd index 58a01177..beb35718 100644 --- a/src/dependency_injector/providers.pxd +++ b/src/dependency_injector/providers.pxd @@ -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 diff --git a/src/dependency_injector/providers.pyx b/src/dependency_injector/providers.pyx index b773cce0..ac1a4804 100644 --- a/src/dependency_injector/providers.pyx +++ b/src/dependency_injector/providers.pyx @@ -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.