From ce5d975126fbb5f9b0c872cc1ffd2090d45b2e41 Mon Sep 17 00:00:00 2001 From: Roman Mogylatov Date: Wed, 26 Aug 2020 20:59:55 -0400 Subject: [PATCH] Add stub for the declarative container --- src/dependency_injector/containers.pyi | 20 ++++++++++++++++++-- tests/typing/declarative_container.py | 12 ++++++++++++ 2 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 tests/typing/declarative_container.py diff --git a/src/dependency_injector/containers.pyi b/src/dependency_injector/containers.pyi index ce99aa4f..9c2798fb 100644 --- a/src/dependency_injector/containers.pyi +++ b/src/dependency_injector/containers.pyi @@ -1,9 +1,9 @@ -from typing import Type, Dict, Tuple, Optional, Any, Union +from typing import Type, Dict, Tuple, Optional, Any, Union, ClassVar, Callable as _Callable from .providers import Provider -class DynamicContainer: +class Container: provider_type: Type[Provider] = Provider providers: Dict[str, Provider] overridden: Tuple[Provider] @@ -16,3 +16,19 @@ class DynamicContainer: def override_providers(self, **overriding_providers: Provider) -> None: ... def reset_last_overriding(self) -> None: ... def reset_override(self) -> None: ... + + +class DynamicContainer(Container): ... + + +class DeclarativeContainer(Container): + cls_providers: ClassVar[Dict[str, Provider]] + inherited_providers: ClassVar[Dict[str, Provider]] + + +def override(container: Container) -> _Callable[[Container], Container]: ... + + +def copy(container: Container) -> _Callable[[Container], Container]: ... + +def is_container(instance: Any) -> bool: ... diff --git a/tests/typing/declarative_container.py b/tests/typing/declarative_container.py new file mode 100644 index 00000000..46db4080 --- /dev/null +++ b/tests/typing/declarative_container.py @@ -0,0 +1,12 @@ +from dependency_injector import containers, providers + + +# Test 1: to check declarative container subclass +class Container1(containers.DeclarativeContainer): + provider = providers.Factory(int) + + +container1 = Container1() +container1_type: containers.Container = Container1() +provider1: providers.Provider = container1.provider +val1: int = container1.provider(3)