summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKen Jin <28750310+Fidget-Spinner@users.noreply.github.com>2020-12-28 20:06:19 (GMT)
committerGitHub <noreply@github.com>2020-12-28 20:06:19 (GMT)
commit4140f10a16f06c32fd49f9e21fb2a53abe7357f0 (patch)
treeec6e4a38d4d03b786196e86592b663a78b774493
parenta9621bb301dba44494e81edc00e3a3b62c96af26 (diff)
downloadcpython-4140f10a16f06c32fd49f9e21fb2a53abe7357f0.zip
cpython-4140f10a16f06c32fd49f9e21fb2a53abe7357f0.tar.gz
cpython-4140f10a16f06c32fd49f9e21fb2a53abe7357f0.tar.bz2
bpo-42740: Fix get_args for PEP 585 collections.abc.Callable (GH-23963)
PR 1/2. Needs backport to 3.9.
-rw-r--r--Lib/test/test_typing.py5
-rw-r--r--Lib/typing.py4
2 files changed, 6 insertions, 3 deletions
diff --git a/Lib/test/test_typing.py b/Lib/test/test_typing.py
index c340c8a..3dcc31f 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 7b79876..67e95dd 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 ()