11from typing import Any , Callable , Dict , Optional , Tuple , Type
2+ from typing_extensions import assert_type
23
34from dependency_injector import providers
45
@@ -17,103 +18,136 @@ def create(cls) -> Animal:
1718
1819# Test 1: to check the return type (class)
1920provider1 = providers .Factory (Cat )
20- animal1 : Animal = provider1 (1 , 2 , 3 , b = "1" , c = 2 , e = 0.0 )
21+ animal1 = provider1 (1 , 2 , 3 , b = "1" , c = 2 , e = 0.0 )
22+ assert_type (animal1 , Cat )
2123
2224# Test 2: to check the return type (class factory method)
2325provider2 = providers .Factory (Cat .create )
24- animal2 : Animal = provider2 ()
26+ animal2 = provider2 ()
27+ assert_type (animal2 , Animal )
2528
2629# Test 3: to check the .override() method
2730provider3 = providers .Factory (Animal )
2831with provider3 .override (providers .Factory (Cat )):
29- provider3 ()
32+ animal3 = provider3 ()
33+ assert_type (animal3 , Animal )
3034
3135# Test 4: to check the .args, .kwargs, .attributes attributes
3236provider4 = providers .Factory (Animal )
33- args4 : Tuple [Any ] = provider4 .args
34- kwargs4 : Dict [str , Any ] = provider4 .kwargs
35- attributes4 : Dict [str , Any ] = provider4 .attributes
37+ args4 = provider4 .args
38+ kwargs4 = provider4 .kwargs
39+ attributes4 = provider4 .attributes
40+ assert_type (args4 , Tuple [Any ])
41+ assert_type (kwargs4 , Dict [str , Any ])
42+ assert_type (attributes4 , Dict [str , Any ])
3643
3744# Test 5: to check the provided instance interface
3845provider5 = providers .Factory (Animal )
39- provided5 : Animal = provider5 .provided ()
40- attr_getter5 : providers .AttributeGetter = provider5 .provided .attr
41- item_getter5 : providers .ItemGetter = provider5 .provided ["item" ]
42- method_caller5 : providers .MethodCaller = provider5 .provided .method .call (123 , arg = 324 )
46+ provided5 = provider5 .provided
47+ provided_val5 = provided5 ()
48+ attr_getter5 = provider5 .provided .attr
49+ item_getter5 = provider5 .provided ["item" ]
50+ method_caller5 = provider5 .provided .method .call (123 , arg = 324 )
51+ assert_type (provided5 , providers .ProvidedInstance )
52+ assert_type (provided_val5 , Any )
53+ assert_type (attr_getter5 , providers .AttributeGetter )
54+ assert_type (item_getter5 , providers .ItemGetter )
55+ assert_type (method_caller5 , providers .MethodCaller )
4356
4457# Test 6: to check the DelegatedFactory
4558provider6 = providers .DelegatedFactory (Cat )
46- animal6 : Animal = provider6 (1 , 2 , 3 , b = "1" , c = 2 , e = 0.0 )
59+ animal6 = provider6 (1 , 2 , 3 , b = "1" , c = 2 , e = 0.0 )
60+ assert_type (animal6 , Cat )
4761
4862# Test 7: to check the AbstractFactory
4963provider7 = providers .AbstractFactory (Animal )
5064provider7 .override (providers .Factory (Cat ))
51- animal7 : Animal = provider7 (1 , 2 , 3 , b = "1" , c = 2 , e = 0.0 )
65+ animal7 = provider7 (1 , 2 , 3 , b = "1" , c = 2 , e = 0.0 )
66+ assert_type (animal7 , Animal )
5267
5368# Test 8: to check the FactoryDelegate __init__
5469provider8 = providers .FactoryDelegate (providers .Factory (object ))
5570
5671# Test 9: to check FactoryAggregate provider
57- provider9 : providers . FactoryAggregate [ str ] = providers .FactoryAggregate (
72+ provider9 = providers .FactoryAggregate (
5873 a = providers .Factory (str , "str1" ),
5974 b = providers .Factory (str , "str2" ),
6075)
61- factory_a_9 : providers .Factory [str ] = provider9 .a
62- factory_b_9 : providers .Factory [str ] = provider9 .b
63- val9 : str = provider9 ("a" )
64-
65- provider9_set_non_string_keys : providers .FactoryAggregate [str ] = (
66- providers .FactoryAggregate ()
76+ factory_a_9 = provider9 .a
77+ factory_b_9 = provider9 .b
78+ val9 = provider9 ("a" )
79+ assert_type (provider9 , providers .FactoryAggregate [str ])
80+ assert_type (factory_a_9 , providers .Factory [str ])
81+ assert_type (factory_b_9 , providers .Factory [str ])
82+ assert_type (val9 , str )
83+
84+ provider9_set_non_string_keys = (
85+ providers .FactoryAggregate [str ]()
6786)
6887provider9_set_non_string_keys .set_factories ({Cat : providers .Factory (str , "str" )})
69- factory_set_non_string_9 : providers . Factory [ str ] = (
88+ factory_set_non_string_9 = (
7089 provider9_set_non_string_keys .factories [Cat ]
7190)
91+ assert_type (provider9_set_non_string_keys , providers .FactoryAggregate [str ])
92+ assert_type (factory_set_non_string_9 , providers .Factory [str ])
7293
73- provider9_new_non_string_keys : providers . FactoryAggregate [ str ] = (
94+ provider9_new_non_string_keys = (
7495 providers .FactoryAggregate (
7596 {Cat : providers .Factory (str , "str" )},
7697 )
7798)
78- factory_new_non_string_9 : providers . Factory [ str ] = (
99+ factory_new_non_string_9 = (
79100 provider9_new_non_string_keys .factories [Cat ]
80101)
102+ assert_type (provider9_new_non_string_keys , providers .FactoryAggregate [str ])
103+ assert_type (factory_new_non_string_9 , providers .Factory [str ])
81104
82105provider9_no_explicit_typing = providers .FactoryAggregate (
83106 a = providers .Factory (str , "str" )
84107)
85- provider9_no_explicit_typing_factory : providers . Factory [ str ] = (
108+ provider9_no_explicit_typing_factory = (
86109 provider9_no_explicit_typing .factories ["a" ]
87110)
88- provider9_no_explicit_typing_object : str = provider9_no_explicit_typing ("a" )
111+ provider9_no_explicit_typing_object = provider9_no_explicit_typing ("a" )
112+ assert_type (provider9_no_explicit_typing , providers .FactoryAggregate [str ])
113+ assert_type (provider9_no_explicit_typing_factory , providers .Factory [str ])
114+ assert_type (provider9_no_explicit_typing_object , str )
89115
90116# Test 10: to check the explicit typing
91- factory10 : providers .Provider [Animal ] = providers .Factory (Cat )
92- animal10 : Animal = factory10 ()
117+ factory10 = providers .Factory [Animal ](Cat )
118+ animal10 = factory10 ()
119+ assert_type (factory10 , providers .Factory [Animal ])
120+ assert_type (animal10 , Animal )
93121
94122# Test 11: to check the return type with await
95123provider11 = providers .Factory (Cat )
96124
97125
98126async def _async11 () -> None :
99- animal1 : Animal = await provider11 (1 , 2 , 3 , b = "1" , c = 2 , e = 0.0 ) # type: ignore
100- animal2 : Animal = await provider11 .async_ (1 , 2 , 3 , b = "1" , c = 2 , e = 0.0 )
127+ animal1 = await provider11 (1 , 2 , 3 , b = "1" , c = 2 , e = 0.0 ) # type: ignore
128+ animal2 = await provider11 .async_ (1 , 2 , 3 , b = "1" , c = 2 , e = 0.0 )
129+ assert_type (animal2 , Cat )
101130
102131
103132# Test 12: to check class type from .provides
104133provider12 = providers .Factory (Cat )
105- provided_cls12 : Type [ Animal ] = provider12 .cls
134+ provided_cls12 = provider12 .cls
106135assert issubclass (provided_cls12 , Animal )
107- provided_provides12 : Optional [ Callable [..., Animal ]] = provider12 .provides
136+ provided_provides12 = provider12 .provides
108137assert provided_provides12 is not None and provided_provides12 () == Cat ()
138+ assert_type (provided_cls12 , Type [Cat ])
139+ assert_type (provided_provides12 , Callable [..., Cat ])
140+
109141
110142# Test 13: to check class from .provides with explicit typevar
111143provider13 = providers .Factory [Animal ](Cat )
112- provided_cls13 : Type [ Animal ] = provider13 .cls
144+ provided_cls13 = provider13 .cls
113145assert issubclass (provided_cls13 , Animal )
114- provided_provides13 : Optional [ Callable [..., Animal ]] = provider13 .provides
146+ provided_provides13 = provider13 .provides
115147assert provided_provides13 is not None and provided_provides13 () == Cat ()
148+ assert_type (provided_cls13 , Type [Animal ])
149+ assert_type (provided_provides13 , Callable [..., Animal ])
116150
117151# Test 14: to check string imports
118- provider14 : providers .Factory [Dict [ Any , Any ]] = providers . Factory ("builtins.dict" )
152+ provider14 = providers .Factory [Any ] ("builtins.dict" )
119153provider14 .set_provides ("builtins.dict" )
0 commit comments