]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-42740: Fix get_args for PEP 585 collections.abc.Callable (GH-23963)
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Mon, 28 Dec 2020 20:26:39 +0000 (12:26 -0800)
committerGitHub <noreply@github.com>
Mon, 28 Dec 2020 20:26:39 +0000 (12:26 -0800)
PR 1/2. Needs backport to 3.9.
(cherry picked from commit 4140f10a16f06c32fd49f9e21fb2a53abe7357f0)

Co-authored-by: Ken Jin <28750310+Fidget-Spinner@users.noreply.github.com>
Lib/test/test_typing.py
Lib/typing.py

index 3b3aa29de7221de5202d2e391f624ab8b5e0ad2b..4bdb2a0fad6c762199f43b2434338c216cd1dece 100644 (file)
@@ -3071,6 +3071,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):
index 81e4a2fa403b9a1e980b5b1af2beddd7438590f8..3556b8adb8190566f4bdc4cc2b515ae753ebf76e 100644 (file)
@@ -1507,13 +1507,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 ()