From: Ken Jin <28750310+Fidget-Spinner@users.noreply.github.com> Date: Mon, 28 Dec 2020 20:06:19 +0000 (+0800) Subject: bpo-42740: Fix get_args for PEP 585 collections.abc.Callable (GH-23963) X-Git-Tag: v3.10.0a4~57 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=4140f10a16f06c32fd49f9e21fb2a53abe7357f0;p=thirdparty%2FPython%2Fcpython.git bpo-42740: Fix get_args for PEP 585 collections.abc.Callable (GH-23963) PR 1/2. Needs backport to 3.9. --- diff --git a/Lib/test/test_typing.py b/Lib/test/test_typing.py index c340c8a89828..3dcc31fe5be5 100644 --- a/Lib/test/test_typing.py +++ b/Lib/test/test_typing.py @@ -3048,6 +3048,11 @@ class GetUtilitiesTestCase(TestCase): self.assertEqual(get_args(Callable), ()) self.assertEqual(get_args(list[int]), (int,)) self.assertEqual(get_args(list), ()) + self.assertEqual(get_args(collections.abc.Callable[[int], str]), ([int], str)) + self.assertEqual(get_args(collections.abc.Callable[..., str]), (..., str)) + self.assertEqual(get_args(collections.abc.Callable[[], str]), ([], str)) + self.assertEqual(get_args(collections.abc.Callable[[int], str]), + get_args(Callable[[int], str])) class CollectionsAbcTests(BaseTestCase): diff --git a/Lib/typing.py b/Lib/typing.py index 7b79876d4ebc..67e95dd78f34 100644 --- a/Lib/typing.py +++ b/Lib/typing.py @@ -1684,13 +1684,11 @@ def get_args(tp): """ if isinstance(tp, _AnnotatedAlias): return (tp.__origin__,) + tp.__metadata__ - if isinstance(tp, _GenericAlias): + if isinstance(tp, (_GenericAlias, GenericAlias)): res = tp.__args__ if tp.__origin__ is collections.abc.Callable and res[0] is not Ellipsis: res = (list(res[:-1]), res[-1]) return res - if isinstance(tp, GenericAlias): - return tp.__args__ return ()