diff --git a/typemap/type_eval/_eval_operators.py b/typemap/type_eval/_eval_operators.py index 8d09a02..9e650c1 100644 --- a/typemap/type_eval/_eval_operators.py +++ b/typemap/type_eval/_eval_operators.py @@ -7,7 +7,7 @@ import re import types import typing -from typing import _AnnotatedAlias as typing_AnnotatedAlias # type: ignore [attr-defined] # noqa: PLC2701 +from typing_extensions import _AnnotatedAlias as typing_AnnotatedAlias from typemap import type_eval from typemap.type_eval import _apply_generic, _typing_inspect @@ -15,13 +15,13 @@ from typemap.typing import ( Attrs, Capitalize, + DropAnnotations, FromUnion, GenericCallable, + GetAnnotations, GetArg, GetArgs, GetAttr, - GetAnnotations, - DropAnnotations, IsSubSimilar, IsSubtype, Iter, @@ -474,11 +474,8 @@ def _ann(x): return f -@type_eval.register_evaluator(Attrs) -@_lift_over_unions -def _eval_Attrs(tp, *, ctx): - hints = get_annotated_type_hints(tp, include_extras=True) - +def _hints_to_members(hints, ctx): + """Convert a hints dictionary to a tuple of Member types.""" return tuple[ *[ Member[ @@ -492,6 +489,13 @@ def _eval_Attrs(tp, *, ctx): ] +@type_eval.register_evaluator(Attrs) +@_lift_over_unions +def _eval_Attrs(tp, *, ctx): + hints = get_annotated_type_hints(tp, include_extras=True) + return _hints_to_members(hints, ctx) + + @type_eval.register_evaluator(Members) @_lift_over_unions def _eval_Members(tp, *, ctx): @@ -499,14 +503,7 @@ def _eval_Members(tp, *, ctx): **get_annotated_type_hints(tp, include_extras=True), **get_annotated_method_hints(tp), } - - attrs = [ - Member[ - typing.Literal[n], _eval_types(t, ctx), _mk_literal_union(*qs), d - ] - for n, (t, qs, d) in hints.items() - ] - return tuple[*attrs] + return _hints_to_members(hints, ctx) ################################################################## diff --git a/typemap/type_eval/_eval_typing.py b/typemap/type_eval/_eval_typing.py index b790dee..73b17f5 100644 --- a/typemap/type_eval/_eval_typing.py +++ b/typemap/type_eval/_eval_typing.py @@ -10,10 +10,12 @@ import types import typing -from typing import _GenericAlias as typing_GenericAlias # type: ignore [attr-defined] # noqa: PLC2701 -from typing import _CallableGenericAlias as typing_CallableGenericAlias # type: ignore [attr-defined] # noqa: PLC2701 -from typing import _LiteralGenericAlias as typing_LiteralGenericAlias # type: ignore [attr-defined] # noqa: PLC2701 -from typing import _AnnotatedAlias as typing_AnnotatedAlias # type: ignore [attr-defined] # noqa: PLC2701 +from typing import ( # type: ignore [attr-defined] # noqa: PLC2701 + _GenericAlias as typing_GenericAlias, + _CallableGenericAlias as typing_CallableGenericAlias, + _LiteralGenericAlias as typing_LiteralGenericAlias, + _AnnotatedAlias as typing_AnnotatedAlias, +) if typing.TYPE_CHECKING: