diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2022-04-07 12:37:23 -0400 |
---|---|---|
committer | mike bayer <mike_mp@zzzcomputing.com> | 2022-04-12 02:09:50 +0000 |
commit | aa9cd878e8249a4a758c7f968e929e92fede42a5 (patch) | |
tree | 1be1c9dc24dd247a150be55d65bfc56ebaf111bc /lib/sqlalchemy/util/typing.py | |
parent | 98eae4e181cb2d1bbc67ec834bfad29dcba7f461 (diff) | |
download | sqlalchemy-aa9cd878e8249a4a758c7f968e929e92fede42a5.tar.gz |
pep-484: session, instancestate, etc
Also adds some fixes to annotation-based mapping
that have come up, as well as starts to add more
pep-484 test cases
Change-Id: Ia722bbbc7967a11b23b66c8084eb61df9d233fee
Diffstat (limited to 'lib/sqlalchemy/util/typing.py')
-rw-r--r-- | lib/sqlalchemy/util/typing.py | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/lib/sqlalchemy/util/typing.py b/lib/sqlalchemy/util/typing.py index df54017da..dd574f3b0 100644 --- a/lib/sqlalchemy/util/typing.py +++ b/lib/sqlalchemy/util/typing.py @@ -3,10 +3,12 @@ from __future__ import annotations import sys import typing from typing import Any +from typing import Callable from typing import cast from typing import Dict from typing import ForwardRef from typing import Iterable +from typing import Optional from typing import Tuple from typing import Type from typing import TypeVar @@ -82,7 +84,9 @@ else: def de_stringify_annotation( - cls: Type[Any], annotation: Union[str, Type[Any]] + cls: Type[Any], + annotation: Union[str, Type[Any]], + str_cleanup_fn: Optional[Callable[[str], str]] = None, ) -> Union[str, Type[Any]]: """Resolve annotations that may be string based into real objects. @@ -105,9 +109,13 @@ def de_stringify_annotation( annotation = cast(ForwardRef, annotation).__forward_arg__ if isinstance(annotation, str): + if str_cleanup_fn: + annotation = str_cleanup_fn(annotation) + base_globals: "Dict[str, Any]" = getattr( sys.modules.get(cls.__module__, None), "__dict__", {} ) + try: annotation = eval(annotation, base_globals, None) except NameError: |