Uh oh!
There was an error while loading. Please reload this page.
gh-108901: Add inspect.Signature.from_frame - #116537
Conversation
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
AlexWaygood
commented
Mar 10, 2024
I haven't really got the bandwidth to look at this right now, sorry :) |
vstinner
commented
Mar 10, 2024
Uh oh!
There was an error while loading. Please reload this page.
I agree, we should drop the defaults part. >>>importsys, inspect>>>deff(x=1):
... print(inspect.getargvalues(sys._getframe()))
...
>>>f()
ArgInfo(args=['x'], varargs=None, keywords=None, locals={'x': 1})Current API does not show defaults, only locals. But, locals are stored as Showing defaults is also not safe in this case by default, for example we can leak things like passwords or secret keys. |
vstinner
commented
Mar 10, 2024
I looked at tests where the frame is captured whereas frame locals are not modified, so "it just works" magically. But if I look at the test which modify a variable, I now understand how wrong it is. A frame local is not a function default parameter value: they are two different things. signature() is the signature, before the function is called. Frame locals is the "live state" of a frame, it's unrelated. Moreover, frame locals can contain sensitive information (like a password) which should not be exposed in a signature. |
sobolevn
commented
Mar 11, 2024
Updated, now defaults are not shown. Right now this is very close to >>>importsys, inspect>>>deff(x=1):
... print(inspect.getargvalues(sys._getframe()))
...
>>>f()
ArgInfo(args=['x'], varargs=None, keywords=None, locals={'x': 1})And we are trying to replace this old function, so I guess it is fine :) |
hugovk
commented
Oct 24, 2024
(This has a merge conflict) |
vstinner
commented
Oct 29, 2024
@sobolevn: Can you please try to fix the merge conflict? |
| in a function inside ``__defaults__``, ``__kwdefaults__``, | ||
| and ``__annotations__`` attributes. | ||
| .. versionadded:: 3.13 |
There was a problem hiding this comment.
| .. versionadded:: 3.13 | |
| .. versionadded:: next |
| inspect | ||
| ------- | ||
| * Add :meth:`inspect.Signature.from_frame` to get signatures from frame objects. |
There was a problem hiding this comment.
Don't we need the "Contributed by" part? (to have the issue number)
This PR is stale because it has been open for 30 days with no activity. |
I had to go with a bigger diff, but easier code and probably more optimal one.
The main reason was that creating
types.FunctionTypeis not trivial, for example, it required the correct amount of__closure__vars for a code object. So, let's not create it: it will reduce the amount of possible errors.First PR: #112639
inspectmodule, deprecate old incorrect APIs #108901📚 Documentation preview 📚: https://cpython-previews--116537.org.readthedocs.build/