diff --git a/src/dependency_injector/providers.pyi b/src/dependency_injector/providers.pyi index 57afabc3..19699536 100644 --- a/src/dependency_injector/providers.pyi +++ b/src/dependency_injector/providers.pyi @@ -7,6 +7,7 @@ from typing import ( Callable as _Callable, Any, Tuple, + List as _List, Optional, Dict, Union, @@ -199,6 +200,7 @@ class FactoryAggregate(Provider): class BaseSingleton(Provider, Generic[T]): provided_type = Optional[Type] def __init__(self, provides: _Callable[..., T], *args: Injection, **kwargs: Injection) -> None: ... + def __call__(self, *args: Injection, **kwargs: Injection) -> T: ... @property def cls(self) -> T: ... @property @@ -247,6 +249,18 @@ class SingletonDelegate(Delegate): def __init__(self, factory: BaseSingleton): ... +class List(Provider): + def __init__(self, *args: Injection): ... + def __call__(self, *args: Injection, **kwargs: Injection) -> _List[Any]: ... + @property + def provided(self) -> ProvidedInstance: ... + @property + def args(self) -> Tuple[Injection]: ... + def add_args(self, *args: Injection) -> List: ... + def set_args(self, *args: Injection) -> List: ... + def clear_args(self) -> List: ... + + class ProvidedInstanceFluentInterface: def __getattr__(self, item: str) -> AttributeGetter: ... def __getitem__(self, item: str) -> ItemGetter: ... diff --git a/tests/typing/list.py b/tests/typing/list.py new file mode 100644 index 00000000..57dd4d44 --- /dev/null +++ b/tests/typing/list.py @@ -0,0 +1,29 @@ +from typing import Tuple, Any, List + +from dependency_injector import providers + + +# Test 1: to check the return type (class) +provider1 = providers.List( + providers.Factory(object), + providers.Factory(object), +) +var1: List[Any] = provider1() + + +# Test 2: to check the .args attributes +provider2 = providers.List( + providers.Factory(object), + providers.Factory(object), +) +args2: Tuple[Any] = provider2.args + +# Test 5: to check the provided instance interface +provider3 = providers.List( + providers.Factory(object), + providers.Factory(object), +) +provided3: providers.ProvidedInstance = provider3.provided +attr_getter3: providers.AttributeGetter = provider3.provided.attr +item_getter3: providers.ItemGetter = provider3.provided['item'] +method_caller3: providers.MethodCaller = provider3.provided.method.call(123, arg=324)