Source code for bytemaker.typing_redirect

"""
typing_redirect.py

This module allows for Python version-agnostic typing and collections.abc imports.
    It uses Python standard library batteries where possible.
    For older versions, this module will export from typing_extensions.
"""
import sys
from importlib.util import find_spec
from typing import Any

if sys.version_info < (3, 9):
    from typing import (
        Callable,
        Iterable,
        Mapping,
        MutableMapping,
        MutableSequence,
        Sequence,
    )
else:
    from collections.abc import (
        Callable,
        Iterable,
        Mapping,
        MutableMapping,
        MutableSequence,
        Sequence,
    )

if sys.version_info < (3, 10):
    UnionType = Any
    if find_spec("typing_extensions"):
        from typing_extensions import Concatenate, ParamSpec
    else:
        ParamSpec = Any
        Concatenate = Any
else:
    from types import UnionType
    from typing import ParamSpec
    from typing import Concatenate

from collections.abc import Hashable
from typing import (
    ClassVar,
    Dict,
    Final,
    ForwardRef,
    Generic,
    ItemsView,
    Iterator,
    List,
    Literal,
    Optional,
    Protocol,
    Set,
    Tuple,
    Type,
    TypeVar,
    Union,
    get_args,
    get_origin,
    get_type_hints,
    overload,
    runtime_checkable,
)

if sys.version_info < (3, 12):
    if find_spec("typing_extensions"):
        from typing_extensions import Buffer
    else:
        Buffer = TypeVar("Buffer")  # Fall back to TypeVar
else:
    from collections.abc import Buffer

if sys.version_info < (3, 13):
    if find_spec("typing_extensions"):
        from typing_extensions import TypeIs  # type: ignore[reportAssignmentType]
    else:
        T = TypeVar("T")

[docs] class TypeIs(Generic[T]): def __class_getitem__(cls, item): return cls
else: from typing import TypeIs __all__ = [ "Any", "Buffer", "Callable", "ClassVar", "Concatenate", "Dict", "Final", "ForwardRef", "Hashable", "ItemsView", "Iterable", "Iterator", "List", "Literal", "Mapping", "MutableMapping", "MutableSequence", "Optional", "ParamSpec", "Protocol", "Set", "Sequence", "Tuple", "Type", "TypeIs", "TypeVar", "Union", "UnionType", "get_args", "get_origin", "get_type_hints", "overload", "runtime_checkable", ] if sys.version_info >= (3, 11): from typing import Self # noqa: F401 __all__.append("Self")