@@ -37,7 +37,7 @@ class istr(str):
3737 """Case insensitive str."""
3838
3939 __is_istr__ = True
40- __istr_identity__ : Optional [ str ] = None
40+ __istr_identity__ : str | None = None
4141
4242
4343_V = TypeVar ("_V" )
@@ -109,9 +109,7 @@ def __repr__(self) -> str:
109109 body = ", " .join (lst )
110110 return f"<{ self .__class__ .__name__ } ({ body } )>"
111111
112- def _parse_item (
113- self , arg : Union [tuple [str , _V ], _T ]
114- ) -> Optional [tuple [int , str , str , _V ]]:
112+ def _parse_item (self , arg : tuple [str , _V ] | _T ) -> tuple [int , str , str , _V ] | None :
115113 if not isinstance (arg , tuple ):
116114 return None
117115 if len (arg ) != 2 :
@@ -167,14 +165,14 @@ def __rand__(self, other: Iterable[_T]) -> set[_T]:
167165 break
168166 return ret
169167
170- def __or__ (self , other : Iterable [_T ]) -> set [Union [ tuple [str , _V ], _T ] ]:
171- ret : set [Union [ tuple [str , _V ], _T ] ] = set (self )
168+ def __or__ (self , other : Iterable [_T ]) -> set [tuple [str , _V ] | _T ]:
169+ ret : set [tuple [str , _V ] | _T ] = set (self )
172170 try :
173171 it = iter (other )
174172 except TypeError :
175173 return NotImplemented
176174 for arg in it :
177- item : Optional [ tuple [int , str , str , _V ]] = self ._parse_item (arg )
175+ item : tuple [int , str , str , _V ] | None = self ._parse_item (arg )
178176 if item is None :
179177 ret .add (arg )
180178 continue
@@ -186,9 +184,9 @@ def __or__(self, other: Iterable[_T]) -> set[Union[tuple[str, _V], _T]]:
186184 ret .add (arg )
187185 return ret
188186
189- def __ror__ (self , other : Iterable [_T ]) -> set [Union [ tuple [str , _V ], _T ] ]:
187+ def __ror__ (self , other : Iterable [_T ]) -> set [tuple [str , _V ] | _T ]:
190188 try :
191- ret : set [Union [ tuple [str , _V ], _T ] ] = set (other )
189+ ret : set [tuple [str , _V ] | _T ] = set (other )
192190 except TypeError :
193191 return NotImplemented
194192 tmp = self ._tmp_set (ret )
@@ -198,8 +196,8 @@ def __ror__(self, other: Iterable[_T]) -> set[Union[tuple[str, _V], _T]]:
198196 ret .add ((e .key , e .value ))
199197 return ret
200198
201- def __sub__ (self , other : Iterable [_T ]) -> set [Union [ tuple [str , _V ], _T ] ]:
202- ret : set [Union [ tuple [str , _V ], _T ] ] = set ()
199+ def __sub__ (self , other : Iterable [_T ]) -> set [tuple [str , _V ] | _T ]:
200+ ret : set [tuple [str , _V ] | _T ] = set ()
203201 try :
204202 it = iter (other )
205203 except TypeError :
@@ -232,12 +230,12 @@ def __rsub__(self, other: Iterable[_T]) -> set[_T]:
232230 ret .add (arg )
233231 return ret
234232
235- def __xor__ (self , other : Iterable [_T ]) -> set [Union [ tuple [str , _V ], _T ] ]:
233+ def __xor__ (self , other : Iterable [_T ]) -> set [tuple [str , _V ] | _T ]:
236234 try :
237235 rgt = set (other )
238236 except TypeError :
239237 return NotImplemented
240- ret : set [Union [ tuple [str , _V ], _T ] ] = self - rgt
238+ ret : set [tuple [str , _V ] | _T ] = self - rgt
241239 ret |= rgt - self
242240 return ret
243241
@@ -338,8 +336,8 @@ def __rand__(self, other: Iterable[_T]) -> set[_T]:
338336 ret .add (key )
339337 return cast (set [_T ], ret )
340338
341- def __or__ (self , other : Iterable [_T ]) -> set [Union [ str , _T ] ]:
342- ret : set [Union [ str , _T ] ] = set (self )
339+ def __or__ (self , other : Iterable [_T ]) -> set [str | _T ]:
340+ ret : set [str | _T ] = set (self )
343341 try :
344342 it = iter (other )
345343 except TypeError :
@@ -352,9 +350,9 @@ def __or__(self, other: Iterable[_T]) -> set[Union[str, _T]]:
352350 ret .add (key )
353351 return ret
354352
355- def __ror__ (self , other : Iterable [_T ]) -> set [Union [ str , _T ] ]:
353+ def __ror__ (self , other : Iterable [_T ]) -> set [str | _T ]:
356354 try :
357- ret : set [Union [ str , _T ] ] = set (other )
355+ ret : set [str | _T ] = set (other )
358356 except TypeError :
359357 return NotImplemented
360358
@@ -399,12 +397,12 @@ def __rsub__(self, other: Iterable[_T]) -> set[_T]:
399397 ret .discard (key ) # type: ignore[arg-type]
400398 return ret
401399
402- def __xor__ (self , other : Iterable [_T ]) -> set [Union [ str , _T ] ]:
400+ def __xor__ (self , other : Iterable [_T ]) -> set [str | _T ]:
403401 try :
404402 rgt = set (other )
405403 except TypeError :
406404 return NotImplemented
407- ret : set [Union [ str , _T ] ] = self - rgt # type: ignore[assignment]
405+ ret : set [str | _T ] = self - rgt # type: ignore[assignment]
408406 ret |= rgt - self
409407 return ret
410408
@@ -482,7 +480,7 @@ class _HtKeys(Generic[_V]): # type: ignore[misc]
482480 usable : int
483481
484482 indices : array # type: ignore[type-arg] # TODO(PY312): array[int]
485- entries : list [Optional [ _Entry [_V ]] ]
483+ entries : list [_Entry [_V ] | None ]
486484
487485 @functools .cached_property
488486 def nslots (self ) -> int :
@@ -502,7 +500,7 @@ def __sizeof__(self) -> int:
502500 )
503501
504502 @classmethod
505- def new (cls , log2_size : int , entries : list [Optional [ _Entry [_V ]] ]) -> Self :
503+ def new (cls , log2_size : int , entries : list [_Entry [_V ] | None ]) -> Self :
506504 size = 1 << log2_size
507505 usable = (size << 1 ) // 3
508506 if log2_size < 10 :
@@ -649,10 +647,8 @@ def _from_md(self, md: "MultiDict[_V]") -> None:
649647 @overload
650648 def getall (self , key : str ) -> list [_V ]: ...
651649 @overload
652- def getall (self , key : str , default : _T ) -> Union [list [_V ], _T ]: ...
653- def getall (
654- self , key : str , default : Union [_T , _SENTINEL ] = sentinel
655- ) -> Union [list [_V ], _T ]:
650+ def getall (self , key : str , default : _T ) -> list [_V ] | _T : ...
651+ def getall (self , key : str , default : _T | _SENTINEL = sentinel ) -> list [_V ] | _T :
656652 """Return a list of all values matching the key."""
657653 identity = self ._identity (key )
658654 hash_ = hash (identity )
@@ -676,10 +672,8 @@ def getall(
676672 @overload
677673 def getone (self , key : str ) -> _V : ...
678674 @overload
679- def getone (self , key : str , default : _T ) -> Union [_V , _T ]: ...
680- def getone (
681- self , key : str , default : Union [_T , _SENTINEL ] = sentinel
682- ) -> Union [_V , _T ]:
675+ def getone (self , key : str , default : _T ) -> _V | _T : ...
676+ def getone (self , key : str , default : _T | _SENTINEL = sentinel ) -> _V | _T :
683677 """Get first value matching the key.
684678
685679 Raises KeyError if the key is not found and no default is provided.
@@ -699,10 +693,10 @@ def __getitem__(self, key: str) -> _V:
699693 return self .getone (key )
700694
701695 @overload
702- def get (self , key : str , / ) -> Union [ _V , None ] : ...
696+ def get (self , key : str , / ) -> _V | None : ...
703697 @overload
704- def get (self , key : str , / , default : _T ) -> Union [ _V , _T ] : ...
705- def get (self , key : str , default : Union [ _T , None ] = None ) -> Union [ _V , _T , None ] :
698+ def get (self , key : str , / , default : _T ) -> _V | _T : ...
699+ def get (self , key : str , default : _T | None = None ) -> _V | _T | None :
706700 """Get first value matching the key.
707701
708702 If the key is not found, returns the default (or None if no default is provided)
@@ -799,7 +793,7 @@ def _parse_args(
799793 self ,
800794 arg : MDArg [_V ],
801795 kwargs : Mapping [str , _V ],
802- ) -> Iterator [Union [ int , _Entry [_V ] ]]:
796+ ) -> Iterator [int | _Entry [_V ]]:
803797 identity_func = self ._identity
804798 if arg :
805799 if isinstance (arg , MultiDictProxy ):
@@ -905,11 +899,11 @@ def __delitem__(self, key: str) -> None:
905899
906900 @overload
907901 def setdefault (
908- self : "MultiDict[Union[_T, None] ]" , key : str , default : None = None
909- ) -> Union [ _T , None ] : ...
902+ self : "MultiDict[_T | None]" , key : str , default : None = None
903+ ) -> _T | None : ...
910904 @overload
911905 def setdefault (self , key : str , default : _V ) -> _V : ...
912- def setdefault (self , key : str , default : Union [ _V , None ] = None ) -> Union [ _V , None ] : # type: ignore[misc]
906+ def setdefault (self , key : str , default : _V | None = None ) -> _V | None : # type: ignore[misc]
913907 """Return value for key, set value to default if key is not present."""
914908 identity = self ._identity (key )
915909 hash_ = hash (identity )
@@ -922,10 +916,8 @@ def setdefault(self, key: str, default: Union[_V, None] = None) -> Union[_V, Non
922916 @overload
923917 def popone (self , key : str ) -> _V : ...
924918 @overload
925- def popone (self , key : str , default : _T ) -> Union [_V , _T ]: ...
926- def popone (
927- self , key : str , default : Union [_T , _SENTINEL ] = sentinel
928- ) -> Union [_V , _T ]:
919+ def popone (self , key : str , default : _T ) -> _V | _T : ...
920+ def popone (self , key : str , default : _T | _SENTINEL = sentinel ) -> _V | _T :
929921 """Remove specified key and return the corresponding value.
930922
931923 If key is not found, d is returned if given, otherwise
@@ -952,10 +944,8 @@ def popone(
952944 @overload
953945 def popall (self , key : str ) -> list [_V ]: ...
954946 @overload
955- def popall (self , key : str , default : _T ) -> Union [list [_V ], _T ]: ...
956- def popall (
957- self , key : str , default : Union [_T , _SENTINEL ] = sentinel
958- ) -> Union [list [_V ], _T ]:
947+ def popall (self , key : str , default : _T ) -> list [_V ] | _T : ...
948+ def popall (self , key : str , default : _T | _SENTINEL = sentinel ) -> list [_V ] | _T :
959949 """Remove all occurrences of key and return the list of corresponding
960950 values.
961951
@@ -1155,10 +1145,8 @@ def __reduce__(self) -> NoReturn:
11551145 @overload
11561146 def getall (self , key : str ) -> list [_V ]: ...
11571147 @overload
1158- def getall (self , key : str , default : _T ) -> Union [list [_V ], _T ]: ...
1159- def getall (
1160- self , key : str , default : Union [_T , _SENTINEL ] = sentinel
1161- ) -> Union [list [_V ], _T ]:
1148+ def getall (self , key : str , default : _T ) -> list [_V ] | _T : ...
1149+ def getall (self , key : str , default : _T | _SENTINEL = sentinel ) -> list [_V ] | _T :
11621150 """Return a list of all values matching the key."""
11631151 if default is not sentinel :
11641152 return self ._md .getall (key , default )
@@ -1168,10 +1156,8 @@ def getall(
11681156 @overload
11691157 def getone (self , key : str ) -> _V : ...
11701158 @overload
1171- def getone (self , key : str , default : _T ) -> Union [_V , _T ]: ...
1172- def getone (
1173- self , key : str , default : Union [_T , _SENTINEL ] = sentinel
1174- ) -> Union [_V , _T ]:
1159+ def getone (self , key : str , default : _T ) -> _V | _T : ...
1160+ def getone (self , key : str , default : _T | _SENTINEL = sentinel ) -> _V | _T :
11751161 """Get first value matching the key.
11761162
11771163 Raises KeyError if the key is not found and no default is provided.
@@ -1187,10 +1173,10 @@ def __getitem__(self, key: str) -> _V:
11871173 return self .getone (key )
11881174
11891175 @overload
1190- def get (self , key : str , / ) -> Union [ _V , None ] : ...
1176+ def get (self , key : str , / ) -> _V | None : ...
11911177 @overload
1192- def get (self , key : str , / , default : _T ) -> Union [ _V , _T ] : ...
1193- def get (self , key : str , default : Union [ _T , None ] = None ) -> Union [ _V , _T , None ] :
1178+ def get (self , key : str , / , default : _T ) -> _V | _T : ...
1179+ def get (self , key : str , default : _T | None = None ) -> _V | _T | None :
11941180 """Get first value matching the key.
11951181
11961182 If the key is not found, returns the default (or None if no default is provided)
@@ -1234,7 +1220,7 @@ def copy(self) -> MultiDict[_V]:
12341220class CIMultiDictProxy (_CIMixin , MultiDictProxy [_V ]):
12351221 """Read-only proxy for CIMultiDict instance."""
12361222
1237- def __init__ (self , arg : Union [ MultiDict [_V ], MultiDictProxy [_V ] ]):
1223+ def __init__ (self , arg : MultiDict [_V ] | MultiDictProxy [_V ]):
12381224 if not isinstance (arg , (CIMultiDict , CIMultiDictProxy )):
12391225 raise TypeError (
12401226 "ctor requires CIMultiDict or CIMultiDictProxy instance"
@@ -1248,7 +1234,7 @@ def copy(self) -> CIMultiDict[_V]:
12481234 return CIMultiDict (self ._md )
12491235
12501236
1251- def getversion (md : Union [ MultiDict [object ], MultiDictProxy [object ] ]) -> int :
1237+ def getversion (md : MultiDict [object ] | MultiDictProxy [object ]) -> int :
12521238 if isinstance (md , MultiDictProxy ):
12531239 md = md ._md
12541240 elif not isinstance (md , MultiDict ):
0 commit comments