Author kj
Recipients gvanrossum, kj, serhiy.storchaka, uriyyo
Date 2021-07-19.14:56:50
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1626706610.55.0.123439603671.issue44653@roundup.psfhosted.org>
In-reply-to
Content
@Serhiy, this doesn't just affect typing.Union, it seems that the rest of the typing types don't substitute:

>>> (int | T)[typing.List[str]]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: Each union arg must be a type, got typing.List[str]

We should probably loosen the check during the union_getitem substitution -- no need to raise the TypeError or check for is_union, just blindly replace the TypeVar. We already do this for types.GenericAlias:

>>> list[T][1]
list[1]

Or if you want to continue checking, maybe checking for PyCallable_Check(obj) in substitution is enough - typing internally accepts callable(o) too:

https://github.com/python/cpython/blob/3.10/Lib/typing.py#L146
History
Date User Action Args
2021-07-19 14:56:50kjsetrecipients: + kj, gvanrossum, serhiy.storchaka, uriyyo
2021-07-19 14:56:50kjsetmessageid: <1626706610.55.0.123439603671.issue44653@roundup.psfhosted.org>
2021-07-19 14:56:50kjlinkissue44653 messages
2021-07-19 14:56:50kjcreate