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:
Miss Islington (bot) 2023-01-23 00:20:15 -08:00 committed by GitHub
parent 69d12d868e
commit 29ff9daf82
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 36 additions and 1 deletions

View file

@ -1222,6 +1222,36 @@ class TypeVarTupleTests(BaseTestCase):
self.assertIs(D[T].__origin__, D)
self.assertIs(D[Unpack[Ts]].__origin__, D)
def test_get_type_hints_on_unpack_args(self):
Ts = TypeVarTuple('Ts')
def func1(*args: *Ts): pass
self.assertEqual(gth(func1), {'args': Unpack[Ts]})
def func2(*args: *tuple[int, str]): pass
self.assertEqual(gth(func2), {'args': Unpack[tuple[int, str]]})
class CustomVariadic(Generic[*Ts]): pass
def func3(*args: *CustomVariadic[int, str]): pass
self.assertEqual(gth(func3), {'args': Unpack[CustomVariadic[int, str]]})
def test_get_type_hints_on_unpack_args_string(self):
Ts = TypeVarTuple('Ts')
def func1(*args: '*Ts'): pass
self.assertEqual(gth(func1, localns={'Ts': Ts}),
{'args': Unpack[Ts]})
def func2(*args: '*tuple[int, str]'): pass
self.assertEqual(gth(func2), {'args': Unpack[tuple[int, str]]})
class CustomVariadic(Generic[*Ts]): pass
def func3(*args: '*CustomVariadic[int, str]'): pass
self.assertEqual(gth(func3, localns={'CustomVariadic': CustomVariadic}),
{'args': Unpack[CustomVariadic[int, str]]})
def test_tuple_args_are_correct(self):
Ts = TypeVarTuple('Ts')