Skip to content

Commit 5118340

Browse files
committed
Allow Closing to detect dependent resources passed as kwargs too #636
1 parent cc2304e commit 5118340

File tree

3 files changed

+21
-2
lines changed

3 files changed

+21
-2
lines changed

src/dependency_injector/wiring.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -598,7 +598,7 @@ def _locate_dependent_closing_args(provider: providers.Provider) -> Dict[str, pr
598598
return {}
599599

600600
closing_deps = {}
601-
for arg in provider.args:
601+
for arg in [*provider.args, *provider.kwargs.values()]:
602602
if not isinstance(arg, providers.Provider) or not hasattr(arg, "args"):
603603
continue
604604

tests/unit/samples/wiringstringids/resourceclosing.py

+6
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ class Container(containers.DeclarativeContainer):
3636

3737
service = providers.Resource(init_service)
3838
factory_service = providers.Factory(FactoryService, service)
39+
factory_service_kwargs = providers.Factory(FactoryService, service=service)
3940

4041

4142
@inject
@@ -46,3 +47,8 @@ def test_function(service: Service = Closing[Provide["service"]]):
4647
@inject
4748
def test_function_dependency(factory: FactoryService = Closing[Provide["factory_service"]]):
4849
return factory
50+
51+
52+
@inject
53+
def test_function_dependency_kwargs(factory: FactoryService = Closing[Provide["factory_service_kwargs"]]):
54+
return factory

tests/unit/wiring/string_ids/test_main_py36.py

+14-1
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,20 @@ def test_closing_dependency_resource():
303303
assert result_2.service.init_counter == 2
304304
assert result_2.service.shutdown_counter == 2
305305

306-
assert result_1 is not result_2
306+
307+
@mark.usefixtures("resourceclosing_container")
308+
def test_closing_dependency_resource_kwargs():
309+
resourceclosing.Service.reset_counter()
310+
311+
result_1 = resourceclosing.test_function_dependency_kwargs()
312+
assert isinstance(result_1, resourceclosing.FactoryService)
313+
assert result_1.service.init_counter == 1
314+
assert result_1.service.shutdown_counter == 1
315+
316+
result_2 = resourceclosing.test_function_dependency_kwargs()
317+
assert isinstance(result_2, resourceclosing.FactoryService)
318+
assert result_2.service.init_counter == 2
319+
assert result_2.service.shutdown_counter == 2
307320

308321

309322
@mark.usefixtures("resourceclosing_container")

0 commit comments

Comments
 (0)