diff options
Diffstat (limited to 'lib/sqlalchemy/util')
-rw-r--r-- | lib/sqlalchemy/util/compat.py | 1 | ||||
-rw-r--r-- | lib/sqlalchemy/util/typing.py | 43 |
2 files changed, 44 insertions, 0 deletions
diff --git a/lib/sqlalchemy/util/compat.py b/lib/sqlalchemy/util/compat.py index e1291de36..dfa5fa825 100644 --- a/lib/sqlalchemy/util/compat.py +++ b/lib/sqlalchemy/util/compat.py @@ -14,6 +14,7 @@ import operator import platform import sys +py311 = sys.version_info >= (3, 11) py39 = sys.version_info >= (3, 9) py38 = sys.version_info >= (3, 8) pypy = platform.python_implementation() == "PyPy" diff --git a/lib/sqlalchemy/util/typing.py b/lib/sqlalchemy/util/typing.py new file mode 100644 index 000000000..801c4a110 --- /dev/null +++ b/lib/sqlalchemy/util/typing.py @@ -0,0 +1,43 @@ +from typing import Any +from typing import Generic +from typing import overload +from typing import Type +from typing import TypeVar + +from . import compat + +if compat.py38: + from typing import Literal + from typing import Protocol + from typing import TypedDict +else: + from typing_extensions import Literal # noqa + from typing_extensions import Protocol # noqa + from typing_extensions import TypedDict # noqa + + +if compat.py311: + from typing import NotRequired # noqa +else: + from typing_extensions import NotRequired # noqa + + +_T = TypeVar("_T") + + +class _TypeToInstance(Generic[_T]): + @overload + def __get__(self, instance: None, owner: Any) -> Type[_T]: + ... + + @overload + def __get__(self, instance: object, owner: Any) -> _T: + ... + + @overload + def __set__(self, instance: None, value: Type[_T]) -> None: + ... + + @overload + def __set__(self, instance: object, value: _T) -> None: + ... |