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
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
1"""
2This module provides stubs for type hints not supported by all relevant Python
3versions.
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"""
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)
19F = TypeVar('F', bound=Callable[..., Any])
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
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
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
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
65def assert_unreachable(message: str) -> Never:
66 """
67 The code path is unreachable. Raises an :class:`AssertionError`.
69 *message* (:class:`str`) is the error message.
70 """
71 raise AssertionError(message)