mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
gh-101015: Fix typing.get_type_hints
with unpacked *tuple
(PEP 646) (GH-101031)
(cherry picked from commit 807d6b576f
)
Co-authored-by: Nikita Sobolev <mail@sobolevn.me>
This commit is contained in:
parent
69d12d868e
commit
29ff9daf82
3 changed files with 36 additions and 1 deletions
|
@ -363,10 +363,13 @@ def _eval_type(t, globalns, localns, recursive_guard=frozenset()):
|
|||
ForwardRef(arg) if isinstance(arg, str) else arg
|
||||
for arg in t.__args__
|
||||
)
|
||||
is_unpacked = t.__unpacked__
|
||||
if _should_unflatten_callable_args(t, args):
|
||||
t = t.__origin__[(args[:-1], args[-1])]
|
||||
else:
|
||||
t = t.__origin__[args]
|
||||
if is_unpacked:
|
||||
t = Unpack[t]
|
||||
ev_args = tuple(_eval_type(a, globalns, localns, recursive_guard) for a in t.__args__)
|
||||
if ev_args == t.__args__:
|
||||
return t
|
||||
|
@ -820,7 +823,7 @@ class ForwardRef(_Final, _root=True):
|
|||
# Unfortunately, this isn't a valid expression on its own, so we
|
||||
# do the unpacking manually.
|
||||
if arg[0] == '*':
|
||||
arg_to_compile = f'({arg},)[0]' # E.g. (*Ts,)[0]
|
||||
arg_to_compile = f'({arg},)[0]' # E.g. (*Ts,)[0] or (*tuple[int, int],)[0]
|
||||
else:
|
||||
arg_to_compile = arg
|
||||
try:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue