bpo-42740: Support PEP 604, 612 for typing.py get_args and get_origin (GH-23942)

This commit is contained in:
Ken Jin 2020-12-29 10:26:19 +08:00 committed by GitHub
parent a6d63a20df
commit efb1f0918f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 15 additions and 1 deletions

View file

@ -1668,6 +1668,8 @@ def get_origin(tp):
return tp.__origin__
if tp is Generic:
return Generic
if isinstance(tp, types.Union):
return types.Union
return None
@ -1686,9 +1688,13 @@ def get_args(tp):
return (tp.__origin__,) + tp.__metadata__
if isinstance(tp, (_GenericAlias, GenericAlias)):
res = tp.__args__
if tp.__origin__ is collections.abc.Callable and res[0] is not Ellipsis:
if (tp.__origin__ is collections.abc.Callable
and not (res[0] is Ellipsis
or isinstance(res[0], (ParamSpec, _ConcatenateGenericAlias)))):
res = (list(res[:-1]), res[-1])
return res
if isinstance(tp, types.Union):
return tp.__args__
return ()