cpython
cpython copied to clipboard
gh-85267: Improvements to inspect.signature __text_signature__ handling
This makes a couple related changes to inspect.signature's behaviour when parsing a signature from __text_signature__
.
First, inspect.signature
is documented as only raising ValueError or TypeError. However, in some cases, we could raise RuntimeError. This PR changes that, thereby fixing #83685.
(Note that the new ValueErrors in RewriteSymbolics are caught and then reraised with a message)
Second, inspect.signature
could randomly drop parameters that it didn't understand (corresponding to return None
in the p
function). This is the core issue in #85267. I think this is very surprising behaviour and it seems better to fail outright.
Third, adding this new failure broke a couple tests. To fix them (and to e.g. allow inspect.signature(select.epoll.register)
as in #85267), I add constant folding of a couple binary operations to RewriteSymbolics.
(There's some discussion of making signature expression evaluation arbitrary powerful in #68155. I think that's out of scope. The additional constant folding here is pretty straightforward, useful, and not much of a slippery slope)
Fourth, while #85267 is incorrect about the cause of the issue, it turns out if you had consecutive newlines in __text_signature__
, you'd get tokenize.TokenError
.
Finally, the if name is invalid:
code path was dead, since parse_name
never returned invalid
.
- Issue: gh-85267
The tokenize.TokenError
fix could be made its own PR, but the other changes are somewhat linked.
Thanks! Made the requested changes. I agree that this seems backport-able
Deploy Preview for python-cpython-preview canceled.
Name | Link |
---|---|
Latest commit | fef97874bc90541d0e0ea8a1ed807284bc895c58 |
Latest deploy log | https://app.netlify.com/sites/python-cpython-preview/deploys/6396ac051af5c300087493ef |
#21104 did a subset of what this PR is changing, fixed the merge conflict.
Thanks @hauntsaninja for the PR, and @JelleZijlstra for merging it 🌮🎉.. I'm working now to backport this PR to: 3.10, 3.11. 🐍🍒⛏🤖 I'm not a witch! I'm not a witch!
Sorry, @hauntsaninja and @JelleZijlstra, I could not cleanly backport this to 3.11
due to a conflict.
Please backport using cherry_picker on command line.
cherry_picker 79311cbfe718f17c89bab67d7f89da3931bfa2ac 3.11
Sorry @hauntsaninja and @JelleZijlstra, I had trouble checking out the 3.10
backport branch.
Please retry by removing and re-adding the "needs backport to 3.10" label.
Alternatively, you can backport using cherry_picker on the command line.
cherry_picker 79311cbfe718f17c89bab67d7f89da3931bfa2ac 3.10
@hauntsaninja do you want to do the manual backports?
GH-100392 is a backport of this pull request to the 3.11 branch.
GH-100393 is a backport of this pull request to the 3.10 branch.
Done! Conflicts were because of #21104
- https://github.com/python/cpython/pull/100392
- https://github.com/python/cpython/pull/100393
Thank you!