From a2fb095e6909504a38077db26156319611106c93 Mon Sep 17 00:00:00 2001 From: Roman Mogylatov Date: Wed, 26 Aug 2020 21:18:03 -0400 Subject: [PATCH] Add types module for explicit provider typing --- src/dependency_injector/providers.pyi | 5 ++++- src/dependency_injector/types.py | 9 +++++++++ tests/typing/factory.py | 6 +++++- 3 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 src/dependency_injector/types.py diff --git a/src/dependency_injector/providers.pyi b/src/dependency_injector/providers.pyi index 2eff0333..0617e8f2 100644 --- a/src/dependency_injector/providers.pyi +++ b/src/dependency_injector/providers.pyi @@ -14,6 +14,9 @@ from typing import ( Coroutine as _Coroutine, ) +from .types import Provider as _Provider + + Injection = Any T = TypeVar('T') @@ -24,7 +27,7 @@ class OverridingContext: def __exit__(self, *_: Any) -> None: ... -class Provider: +class Provider(_Provider): def __init__(self) -> None: ... def __call__(self, *args: Injection, **kwargs: Injection) -> Any: ... def __deepcopy__(self, memo: Optional[Dict[str, Any]]) -> Provider: ... diff --git a/src/dependency_injector/types.py b/src/dependency_injector/types.py new file mode 100644 index 00000000..f60c4b03 --- /dev/null +++ b/src/dependency_injector/types.py @@ -0,0 +1,9 @@ +from typing import TypeVar, Generic, Any + + +Injection = Any +T = TypeVar('T') + + +class Provider(Generic[T]): + def __call__(self, *args: Injection, **kwargs: Injection) -> T: ... diff --git a/tests/typing/factory.py b/tests/typing/factory.py index 86876bef..026e113a 100644 --- a/tests/typing/factory.py +++ b/tests/typing/factory.py @@ -1,6 +1,6 @@ from typing import Tuple, Any, Dict -from dependency_injector import providers +from dependency_injector import providers, types class Animal: @@ -62,3 +62,7 @@ provider9 = providers.FactoryAggregate( factory_a_9: providers.Factory = provider9.a factory_b_9: providers.Factory = provider9.b val9: Any = provider9('a') + +# Test 10: to check the explicit typing +factory10: types.Provider[Animal] = providers.Factory(Cat) +animal10: Animal = factory10()