44 Any ,
55 Callable ,
66 Dict ,
7- List ,
87 Optional ,
9- Tuple ,
108 Type ,
119 TypeVar ,
1210 Union ,
1816
1917_T = TypeVar ('_T' )
2018
21- ContainerKey = Union [ str , Type [Any ], object ]
19+ ContainerKey = str | Type [Any ] | object
2220
2321
2422class Container (Dict [Any , Any ]):
2523 debug : bool = False
26- _parameter_resolvers : List [Callable [['Container' ], Any ]] = []
24+ _parameter_resolvers : list [Callable [['Container' ], Any ]] = []
2725
2826 def __init__ (
2927 self ,
3028 items : Optional [
3129 Union [
32- Dict [str , Any ], List [Union [ContainerKey , Tuple [ContainerKey , _T , Dict [str , Any ]]]] # hardcoded
30+ dict [str , Any ], list [Union [ContainerKey , tuple [ContainerKey , _T , dict [str , Any ]]]] # hardcoded
3331 ] # magic
3432 ] = None ,
3533 debug : bool = False ,
@@ -42,12 +40,12 @@ def __init__(
4240 super (Container , self ).__init__ ({})
4341 self .resolve (items )
4442
45- def resolve_parameter (self , fn : Callable [['Container' ], Any ]) -> Tuple [int , Callable [['Container' ], Any ]]:
43+ def resolve_parameter (self , fn : Callable [['Container' ], Any ]) -> tuple [int , Callable [['Container' ], Any ]]:
4644 self ._parameter_resolvers .append (fn )
4745 return len (self ._parameter_resolvers ) - 1 , fn
4846
49- def resolve (self , items : List [Union [ContainerKey , Tuple [ContainerKey , _T , Dict [str , Any ]]]]) -> None :
50- items_ : List [Any ] = list (map (self ._sanitize_item_before_resolve , items ))
47+ def resolve (self , items : list [Union [ContainerKey , tuple [ContainerKey , _T , dict [str , Any ]]]]) -> None :
48+ items_ : list [Any ] = list (map (self ._sanitize_item_before_resolve , items ))
5149 while items_ :
5250 for index , item in enumerate (items_ ):
5351 # Check if already exist
@@ -96,7 +94,7 @@ def set(self, key: ContainerKey, val: _T = ...) -> None: # type: ignore
9694 here = here .setdefault (key , {})
9795 here [keys [- 1 ]] = val
9896
99- def get (self , key : ContainerKey , typ : Optional [ Type [_T ]] = None , instance_of : bool = False ) -> _T : # type: ignore
97+ def get (self , key : ContainerKey , typ : Type [_T ] | None = None , instance_of : bool = False ) -> _T : # type: ignore
10098 """
10199 e.g. 1
102100 container = Container({'config': {'version': '0.1.0'}, 'app.libs.MyClass': '...'})
@@ -152,8 +150,8 @@ def __contains__(self, *o) -> bool: # type: ignore
152150
153151 @staticmethod
154152 def _sanitize_item_before_resolve (
155- item : Union [ContainerKey , Tuple [ContainerKey , _T , Dict [str , Any ]]]
156- ) -> Tuple [ContainerKey , _T , Dict [str , Any ]]:
153+ item : Union [ContainerKey , tuple [ContainerKey , _T , dict [str , Any ]]]
154+ ) -> tuple [ContainerKey , _T , dict [str , Any ]]:
157155 if not isinstance (item , tuple ):
158156 return item , item , {} # type: ignore
159157 length = len (item )
@@ -163,15 +161,15 @@ def _sanitize_item_before_resolve(
163161 return item [0 ], item [1 ], {}
164162 if length >= 3 :
165163 return item [:3 ]
166- raise ValueError ('Tuple must be at least of one item' )
164+ raise ValueError ('tuple must be at least of one item' )
167165
168166 def _resolve_or_postpone_item (
169167 self ,
170- item : Tuple [ContainerKey , _T , Dict [str , Any ]],
171- items : List [ Tuple [ContainerKey , _T , Dict [str , Any ]]],
172- ) -> Optional [ Dict [ str , Any ]] :
168+ item : tuple [ContainerKey , _T , dict [str , Any ]],
169+ items : list [ tuple [ContainerKey , _T , dict [str , Any ]]],
170+ ) -> dict [ str , Any ] | None :
173171 parameters = signature (item [1 ]).parameters .items () # type: ignore
174- kwargs : Dict [str , Any ] = {}
172+ kwargs : dict [str , Any ] = {}
175173 item [2 ].update (self ._sanitize_item_parameters_before_resolve_or_postpone (parameters , item [2 ]))
176174 for parameter in parameters :
177175 name : str = parameter [0 ]
@@ -208,7 +206,7 @@ def _resolve_or_postpone_item(
208206 return None
209207
210208 @classmethod
211- def _get_instance_of (cls , items : Dict [str , Any ], typ : Type [Any ]) -> List [Any ]:
209+ def _get_instance_of (cls , items : dict [str , Any ], typ : Type [Any ]) -> list [Any ]:
212210 instances = []
213211 for _ , val in items .items ():
214212 if isinstance (val , typ ):
@@ -224,7 +222,7 @@ def _resolve_or_postpone_item_parameter(
224222 self ,
225223 name : str ,
226224 typ : Type [Any ],
227- item : Tuple [ContainerKey , _T , Dict [str , Any ]],
225+ item : tuple [ContainerKey , _T , dict [str , Any ]],
228226 ) -> Any :
229227 if name not in item [2 ]:
230228 return None
@@ -245,8 +243,8 @@ def _resolve_or_postpone_item_parameter(
245243
246244 @staticmethod
247245 def _sanitize_item_parameters_before_resolve_or_postpone (
248- meta_params : AbstractSet [Any ], params : Dict [str , Any ]
249- ) -> Dict [str , Any ]:
246+ meta_params : AbstractSet [Any ], params : dict [str , Any ]
247+ ) -> dict [str , Any ]:
250248 for meta_param in meta_params :
251249 name : str = meta_param [0 ]
252250 typ : Type [Any ] = meta_param [1 ].annotation
0 commit comments