Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.11/site-packages/pathspec/_typing.py: 85%

Shortcuts on this page

r m x   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

34 statements  

1""" 

2This module provides stubs for type hints not supported by all relevant Python 

3versions. 

4 

5NOTICE: This project should have zero required dependencies, which means it 

6cannot simply require :module:`typing_extensions`, and I do not want to maintain 

7a vendored copy of :module:`typing_extensions`. 

8""" 

9 

10import functools 

11import sys 

12import warnings 

13from typing import ( 

14 Any, 

15 Callable, # Replaced by `collections.abc.Callable` in 3.9.2. 

16 Optional, # Replaced by `X | None` in 3.10. 

17 TypeVar) 

18 

19F = TypeVar('F', bound=Callable[..., Any]) 

20 

21# AnyStr is deprecated since 3.13, and will be removed in 3.18. 

22if sys.version_info >= (3, 18): 

23 AnyStr = TypeVar('AnyStr', str, bytes) 

24else: 

25 from typing import AnyStr 

26 

27# Never was added in 3.11. 

28if sys.version_info >= (3, 11): 

29 from typing import Never 

30else: 

31 from typing import NoReturn as Never 

32 

33# deprecated was added in 3.13. 

34if sys.version_info >= (3, 13): 

35 from warnings import deprecated 

36else: 

37 try: 

38 from typing_extensions import deprecated 

39 except ImportError: 

40 def deprecated( 

41 message: str, 

42 /, *, 

43 category: Optional[type[Warning]] = DeprecationWarning, 

44 stacklevel: int = 1, 

45 ) -> Callable[[F], F]: 

46 def decorator(f: F) -> F: 

47 @functools.wraps(f) 

48 def wrapper(*a, **k): 

49 warnings.warn(message, category=category, stacklevel=stacklevel+1) 

50 return f(*a, **k) 

51 return wrapper 

52 return decorator 

53 

54# override was added in 3.12. 

55if sys.version_info >= (3, 12): 

56 from typing import override 

57else: 

58 try: 

59 from typing_extensions import override 

60 except ImportError: 

61 def override(f: F, /) -> F: 

62 return f 

63 

64 

65def assert_unreachable(message: str) -> Never: 

66 """ 

67 The code path is unreachable. Raises an :class:`AssertionError`. 

68 

69 *message* (:class:`str`) is the error message. 

70 """ 

71 raise AssertionError(message)