BUG: crash: collections.abc.Callable does not allow tuple in Python 3.10#454
Merged
kernc merged 3 commits intopdoc3:masterfrom Dec 29, 2024
StefanRickli:fix_callable_annotation_crash
Merged
BUG: crash: collections.abc.Callable does not allow tuple in Python 3.10#454kernc merged 3 commits intopdoc3:masterfrom StefanRickli:fix_callable_annotation_crash
kernc merged 3 commits intopdoc3:masterfrom
StefanRickli:fix_callable_annotation_crash
Conversation
kernc
requested changes
Dec 24, 2024
Member
There was a problem hiding this comment.
Contributor
Author
Yes, unittests on Python3.10, no modifications. Seems like all the holes in the Swiss cheese are aligning in this case. What makes it even more crazy is that Python3.10 currently is the only supported Python version that has the narrower type check, and the looser |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR is about the following line:
pdoc/pdoc/__init__.py
Line 1358 in 65342ae
In Python 3.10,
_CallableGenericAlias.__new__does an explicit check forlistand not(tuple | list), so the current code crashes in the except clause when the args tuple is sliced into a new tuple.Here's the type check in Python 3.10:
https://github.com/python/cpython/blob/8773554b717cfb08b4bd11a927813f4ed74762c7/Lib/_collections_abc.py#L433
The same line in Python 3.11:
https://github.com/python/cpython/blob/f0895aa9c1d40d0add673cc51bd143556e22100a/Lib/_collections_abc.py#L433
I suggest we explicitly convert the first argument to
__origin__to a list for backwards compatibility. Unittests failed before, now they pass.