From 60e614ba31716bf1f08b20a0c2f9f2afd305f389 Mon Sep 17 00:00:00 2001 From: Roman Mogylatov Date: Wed, 26 Aug 2020 17:58:56 -0400 Subject: [PATCH] Add stub for the Selector provider --- src/dependency_injector/providers.pyi | 10 +++++++++ tests/typing/selector.py | 29 +++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 tests/typing/selector.py diff --git a/src/dependency_injector/providers.pyi b/src/dependency_injector/providers.pyi index 8a8ec9f5..2eff0333 100644 --- a/src/dependency_injector/providers.pyi +++ b/src/dependency_injector/providers.pyi @@ -268,6 +268,16 @@ class Container(Provider): def __getattr__(self, name: str) -> Provider: ... +class Selector(Provider): + def __init__(self, selector: _Callable[..., Any], **providers: Provider): ... + def __call__(self, *args: Injection, **kwargs: Injection) -> Any: ... + def __getattr__(self, name: str) -> Provider: ... + @property + def provided(self) -> ProvidedInstance: ... + @property + def providers(self) -> Dict[str, Provider]: ... + + class ProvidedInstanceFluentInterface: def __getattr__(self, item: str) -> AttributeGetter: ... def __getitem__(self, item: str) -> ItemGetter: ... diff --git a/tests/typing/selector.py b/tests/typing/selector.py new file mode 100644 index 00000000..e26a45e1 --- /dev/null +++ b/tests/typing/selector.py @@ -0,0 +1,29 @@ +from dependency_injector import providers + + +# Test 1: to check the return type +provider1 = providers.Selector( + lambda: 'a', + a=providers.Factory(object), + b=providers.Factory(object), +) +var1: int = provider1() + +# Test 2: to check the provided instance interface +provider2 = providers.Selector( + lambda: 'a', + a=providers.Factory(object), + b=providers.Factory(object), +) +provided2: providers.ProvidedInstance = provider2.provided +attr_getter2: providers.AttributeGetter = provider2.provided.attr +item_getter2: providers.ItemGetter = provider2.provided['item'] +method_caller2: providers.MethodCaller = provider2.provided.method.call(123, arg=324) + +# Test3 to check the getattr +provider3 = providers.Selector( + lambda: 'a', + a=providers.Factory(object), + b=providers.Factory(object), +) +attr3: providers.Provider = provider3.a