88"""
99
1010import functools
11+ import sys
1112import warnings
1213from typing import (
1314 Any ,
1415 Callable , # Replaced by `collections.abc.Callable` in 3.9.2.
1516 Optional , # Replaced by `X | None` in 3.10.
1617 TypeVar )
17- try :
18- from typing import AnyStr # Removed in 3.18.
19- except ImportError :
20- AnyStr = TypeVar ('AnyStr' , str , bytes ) # type: ignore[misc]
21- try :
22- from typing import Never # Added in 3.11.
23- except ImportError :
24- from typing import NoReturn as Never
2518
2619F = TypeVar ('F' , bound = Callable [..., Any ])
2720
28- try :
29- from warnings import deprecated # Added in 3.13. # type: ignore
30- except ImportError :
21+ # AnyStr is deprecated since 3.13, and will be removed in 3.18.
22+ if sys .version_info >= (3 , 18 ):
23+ AnyStr = TypeVar ('AnyStr' , str , bytes )
24+ else :
25+ from typing import AnyStr
26+
27+ # Never was added in 3.11.
28+ if sys .version_info >= (3 , 11 ):
29+ from typing import Never
30+ else :
31+ from typing import NoReturn as Never
32+
33+ # deprecated was added in 3.13.
34+ if sys .version_info >= (3 , 13 ):
35+ from warnings import deprecated
36+ else :
3137 try :
32- from typing_extensions import deprecated # type: ignore
38+ from typing_extensions import deprecated
3339 except ImportError :
34- def deprecated ( # type: ignore[no-redef]
40+ def deprecated (
3541 message : str ,
3642 / , * ,
3743 category : Optional [type [Warning ]] = DeprecationWarning ,
@@ -42,12 +48,13 @@ def decorator(f: F) -> F:
4248 def wrapper (* a , ** k ):
4349 warnings .warn (message , category = category , stacklevel = stacklevel + 1 )
4450 return f (* a , ** k )
45- return wrapper # type: ignore[return-value]
51+ return wrapper
4652 return decorator
4753
48- try :
49- from typing import override # Added in 3.12.
50- except ImportError :
54+ # override was added in 3.12.
55+ if sys .version_info >= (3 , 12 ):
56+ from typing import override
57+ else :
5158 try :
5259 from typing_extensions import override
5360 except ImportError :
0 commit comments