diff options
author | Federico Caselli <cfederico87@gmail.com> | 2022-11-27 18:11:34 +0100 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2022-11-29 17:49:27 -0500 |
commit | 9c9fd31bcea3beaed6d14fde639e65f6b43bea09 (patch) | |
tree | 2eef4b31c1f89f364c9bf15fdf153a4aad0f98c6 /lib/sqlalchemy/util/typing.py | |
parent | 78833af4e650d37e6257cfbb541e4db56e2a285f (diff) | |
download | sqlalchemy-9c9fd31bcea3beaed6d14fde639e65f6b43bea09.tar.gz |
Improve support for enum in mapped classes
Add a new system by which TypeEngine objects have some
say in how the declarative type registry interprets them.
The Enum datatype is the primary target for this but it is
hoped the system may be useful for other types as well.
Fixes: #8859
Change-Id: I15ac3daee770408b5795746f47c1bbd931b7d26d
Diffstat (limited to 'lib/sqlalchemy/util/typing.py')
-rw-r--r-- | lib/sqlalchemy/util/typing.py | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/lib/sqlalchemy/util/typing.py b/lib/sqlalchemy/util/typing.py index 0c8e5a633..b1ef87db1 100644 --- a/lib/sqlalchemy/util/typing.py +++ b/lib/sqlalchemy/util/typing.py @@ -74,7 +74,7 @@ typing_get_origin = get_origin # copied from TypeShed, required in order to implement # MutableMapping.update() -_AnnotationScanType = Union[Type[Any], str, ForwardRef] +_AnnotationScanType = Union[Type[Any], str, ForwardRef, "GenericProtocol[Any]"] class ArgsTypeProcotol(Protocol): @@ -236,6 +236,15 @@ def is_generic(type_: _AnnotationScanType) -> TypeGuard[GenericProtocol[Any]]: return hasattr(type_, "__args__") and hasattr(type_, "__origin__") +def flatten_generic( + type_: Union[GenericProtocol[Any], Type[Any]] +) -> Type[Any]: + if is_generic(type_): + return type_.__origin__ + else: + return cast("Type[Any]", type_) + + def is_fwd_ref( type_: _AnnotationScanType, check_generic: bool = False ) -> bool: |