Skip to content

Commit 03e571f

Browse files
bpo-42740: Fix get_args for PEP 585 collections.abc.Callable (GH-23963)
PR 1/2. Needs backport to 3.9. (cherry picked from commit 4140f10) Co-authored-by: Ken Jin <[email protected]>
1 parent 9f6a37c commit 03e571f

File tree

2 files changed

+6
-3
lines changed

2 files changed

+6
-3
lines changed

Lib/test/test_typing.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3071,6 +3071,11 @@ class C(Generic[T]): pass
30713071
self.assertEqual(get_args(Callable), ())
30723072
self.assertEqual(get_args(list[int]), (int,))
30733073
self.assertEqual(get_args(list), ())
3074+
self.assertEqual(get_args(collections.abc.Callable[[int], str]), ([int], str))
3075+
self.assertEqual(get_args(collections.abc.Callable[..., str]), (..., str))
3076+
self.assertEqual(get_args(collections.abc.Callable[[], str]), ([], str))
3077+
self.assertEqual(get_args(collections.abc.Callable[[int], str]),
3078+
get_args(Callable[[int], str]))
30743079

30753080

30763081
class CollectionsAbcTests(BaseTestCase):

Lib/typing.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1507,13 +1507,11 @@ def get_args(tp):
15071507
"""
15081508
if isinstance(tp, _AnnotatedAlias):
15091509
return (tp.__origin__,) + tp.__metadata__
1510-
if isinstance(tp, _GenericAlias):
1510+
if isinstance(tp, (_GenericAlias, GenericAlias)):
15111511
res = tp.__args__
15121512
if tp.__origin__ is collections.abc.Callable and res[0] is not Ellipsis:
15131513
res = (list(res[:-1]), res[-1])
15141514
return res
1515-
if isinstance(tp, GenericAlias):
1516-
return tp.__args__
15171515
return ()
15181516

15191517

0 commit comments

Comments
 (0)