Skip to content

Commit 3cdba79

Browse files
authored
Merge pull request #1 from federinik/master
Allow Closing to detect dependent resources passed as kwargs too ets-labs#636
2 parents d00afd9 + 43a14df commit 3cdba79

File tree

3 files changed

+20
-2
lines changed

3 files changed

+20
-2
lines changed

Diff for: 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

Diff for: tests/unit/samples/wiringstringids/resourceclosing.py

+5
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ class Container(containers.DeclarativeContainer):
4141

4242
service = providers.Resource(init_service)
4343
factory_service = providers.Factory(FactoryService, service)
44+
factory_service_kwargs = providers.Factory(FactoryService, service=service)
4445
nested_service = providers.Factory(NestedService, factory_service)
4546

4647

@@ -55,6 +56,10 @@ def test_function_dependency(factory: FactoryService = Closing[Provide["factory_
5556

5657

5758
@inject
59+
def test_function_dependency_kwargs(factory: FactoryService = Closing[Provide["factory_service_kwargs"]]):
60+
return factory
61+
62+
5863
def test_function_nested_dependency(
5964
nested: NestedService = Closing[Provide["nested_service"]]
6065
):

Diff for: 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)