Skip to content

Commit 8d56141

Browse files
committed
Add implementation, typing stubs, and tests
1 parent 2127e3c commit 8d56141

File tree

8 files changed

+7408
-6715
lines changed

8 files changed

+7408
-6715
lines changed

src/dependency_injector/containers.c

Lines changed: 1729 additions & 1196 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/dependency_injector/containers.pyi

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ class Container:
4545
def shutdown_resources(self) -> Optional[Awaitable]: ...
4646
def apply_container_providers_overridings(self) -> None: ...
4747
def reset_singletons(self) -> None: ...
48+
def check_dependencies(self) -> None: ...
4849
@overload
4950
def resolve_provider_name(self, provider: Provider) -> str: ...
5051
@classmethod

src/dependency_injector/containers.pyx

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -305,6 +305,30 @@ class DynamicContainer(Container):
305305
for provider in self.traverse(types=[providers.BaseSingleton]):
306306
provider.reset()
307307

308+
def check_dependencies(self):
309+
"""Check if container dependencies are defined.
310+
311+
If any dependency is undefined, raises an error.
312+
"""
313+
undefined = [
314+
dependency
315+
for dependency in self.traverse(types=[providers.Dependency])
316+
if not dependency.is_defined
317+
]
318+
319+
if not undefined:
320+
return
321+
322+
container_name = self.parent_name if self.parent_name else self.__class__.__name__
323+
undefined_names = [
324+
f'"{dependency.parent_name if dependency.parent_name else dependency}"'
325+
for dependency in undefined
326+
]
327+
raise errors.Error(
328+
f'Container "{container_name}" has undefined dependencies: '
329+
f'{", ".join(undefined_names)}',
330+
)
331+
308332
def resolve_provider_name(self, provider):
309333
"""Try to resolve provider name."""
310334
for provider_name, container_provider in self.providers.items():

0 commit comments

Comments
 (0)