Skip to content

Commit 36586a4

Browse files
take shutdown to Resource
1 parent 44a6a68 commit 36586a4

File tree

2 files changed

+10
-45
lines changed

2 files changed

+10
-45
lines changed

src/dependency_injector/providers.pxd

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -244,8 +244,6 @@ cdef class ContextLocalResource(Resource):
244244
cdef object _initialized_context_var
245245
cdef object _shutdowner_context_var
246246

247-
cpdef object _provide(self, tuple args, dict kwargs)
248-
249247

250248
cdef class Container(Provider):
251249
cdef object _container_cls

src/dependency_injector/providers.pyx

Lines changed: 10 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -3801,24 +3801,27 @@ cdef class Resource(Provider):
38013801

38023802
def shutdown(self):
38033803
"""Shutdown resource."""
3804-
if not self._initialized:
3804+
if not self._initialized :
3805+
self._reset_all_contex_vars()
38053806
if self._async_mode == ASYNC_MODE_ENABLED:
38063807
return NULL_AWAITABLE
38073808
return
38083809

38093810
if self._shutdowner:
38103811
future = self._shutdowner(None, None, None)
3811-
38123812
if __is_future_or_coroutine(future):
3813-
return ensure_future(self._shutdown_async(future))
3814-
3815-
self._resource = None
3816-
self._initialized = False
3817-
self._shutdowner = None
3813+
self._reset_all_contex_vars()
3814+
return ensure_future(future)
38183815

3816+
self._reset_all_contex_vars()
38193817
if self._async_mode == ASYNC_MODE_ENABLED:
38203818
return NULL_AWAITABLE
38213819

3820+
def _reset_all_contex_vars(self):
3821+
self._initialized = False
3822+
self._resource = None
3823+
self._shutdowner = None
3824+
38223825
@property
38233826
def related(self):
38243827
"""Return related providers generator."""
@@ -3827,14 +3830,6 @@ cdef class Resource(Provider):
38273830
yield from filter(is_provider, self.kwargs.values())
38283831
yield from super().related
38293832

3830-
async def _shutdown_async(self, future) -> None:
3831-
try:
3832-
await future
3833-
finally:
3834-
self._resource = None
3835-
self._initialized = False
3836-
self._shutdowner = None
3837-
38383833
async def _handle_async_cm(self, obj) -> None:
38393834
try:
38403835
resource = await obj.__aenter__()
@@ -3858,7 +3853,6 @@ cdef class Resource(Provider):
38583853

38593854
return resource, shutdowner
38603855

3861-
38623856
cpdef object _provide(self, tuple args, dict kwargs):
38633857
if self._initialized:
38643858
return self._resource
@@ -3911,8 +3905,6 @@ cdef class Resource(Provider):
39113905

39123906

39133907
cdef class ContextLocalResource(Resource):
3914-
_none = object()
3915-
39163908
def __init__(self, provides=None, *args, **kwargs):
39173909
self._initialized_context_var = ContextVar("_initialized_context_var", default=False)
39183910
self._resource_context_var = ContextVar("_resource_context_var", default=None)
@@ -3950,31 +3942,6 @@ cdef class ContextLocalResource(Resource):
39503942
self._shutdowner_context_var.set(value)
39513943

39523944

3953-
def shutdown(self):
3954-
"""Shutdown resource."""
3955-
if not self._initialized :
3956-
self._reset_all_contex_vars()
3957-
if self._async_mode == ASYNC_MODE_ENABLED:
3958-
return NULL_AWAITABLE
3959-
return
3960-
3961-
if self._shutdowner != None:
3962-
future = self._shutdowner(None, None, None)
3963-
if __is_future_or_coroutine(future):
3964-
self._reset_all_contex_vars()
3965-
return ensure_future(future)
3966-
3967-
3968-
self._reset_all_contex_vars()
3969-
if self._async_mode == ASYNC_MODE_ENABLED:
3970-
return NULL_AWAITABLE
3971-
3972-
def _reset_all_contex_vars(self):
3973-
self._initialized=False
3974-
self._resource = None
3975-
self._shutdowner = None
3976-
3977-
39783945
cdef class Container(Provider):
39793946
"""Container provider provides an instance of declarative container.
39803947

0 commit comments

Comments
 (0)