Skip to content

Add inspect.Signature.from_text(). #81678

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
ericsnowcurrently opened this issue Jul 4, 2019 · 6 comments
Open

Add inspect.Signature.from_text(). #81678

ericsnowcurrently opened this issue Jul 4, 2019 · 6 comments
Assignees
Labels
stdlib Python modules in the Lib dir type-feature A feature request or enhancement

Comments

@ericsnowcurrently
Copy link
Member

BPO 37497
Nosy @ericsnowcurrently, @1st1
PRs
  • gh-81678: Add inspect.Signature.from_text() #14579
  • Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.

    Show more details

    GitHub fields:

    assignee = 'https://github.com/ericsnowcurrently'
    closed_at = None
    created_at = <Date 2019-07-04.00:11:26.728>
    labels = ['type-feature', 'library', '3.9']
    title = 'Add inspect.Signature.from_text().'
    updated_at = <Date 2020-03-06.20:46:18.865>
    user = 'https://github.com/ericsnowcurrently'

    bugs.python.org fields:

    activity = <Date 2020-03-06.20:46:18.865>
    actor = 'yselivanov'
    assignee = 'eric.snow'
    closed = False
    closed_date = None
    closer = None
    components = ['Library (Lib)']
    creation = <Date 2019-07-04.00:11:26.728>
    creator = 'eric.snow'
    dependencies = []
    files = []
    hgrepos = []
    issue_num = 37497
    keywords = []
    message_count = 5.0
    messages = ['347250', '347251', '362765', '363535', '363551']
    nosy_count = 2.0
    nosy_names = ['eric.snow', 'yselivanov']
    pr_nums = ['14579']
    priority = 'normal'
    resolution = None
    stage = 'needs patch'
    status = 'open'
    superseder = None
    type = 'enhancement'
    url = 'https://bugs.python.org/issue37497'
    versions = ['Python 3.9']

    @ericsnowcurrently
    Copy link
    Member Author

    In early 2014 (3.3), when argument clinic was added, we added support for turning func.__text_signature__ into an inspect.Signature object. However, the functionality to convert a string into a Signature was never exposed publicly. Here's a patch to do so.

    Note that inspect.signature() will also support taking a string.

    @ericsnowcurrently ericsnowcurrently added the 3.9 only security fixes label Jul 4, 2019
    @ericsnowcurrently ericsnowcurrently self-assigned this Jul 4, 2019
    @ericsnowcurrently ericsnowcurrently added stdlib Python modules in the Lib dir type-feature A feature request or enhancement labels Jul 4, 2019
    @ericsnowcurrently
    Copy link
    Member Author

    Note that there has been a little discussion of this in the past, particularly around the time that argument clinic was introduced: https://bugs.python.org/issue23967#msg241140.

    @1st1
    Copy link
    Member

    1st1 commented Feb 27, 2020

    What's the actual use case for exposing this functionality?

    @ericsnowcurrently
    Copy link
    Member Author

    Honestly, I don't recall exactly the concrete use case for which I opened this. :) I *think* it was related to applying a more restrictive signature onto an existing function (e.g. with a decorator).

    @1st1
    Copy link
    Member

    1st1 commented Mar 6, 2020

    I'd be fine with Signature.from_text(), but not with Signature constructor / signature() function accepting both callable and string arguments. Overall, I think that we ought to have a real need to add this new API, so unless there's a good (or any, really) use case I'd say we shouldn't merge this now.

    @ezio-melotti ezio-melotti transferred this issue from another repository Apr 10, 2022
    @erlend-aasland erlend-aasland removed the 3.9 only security fixes label Jan 8, 2024
    @tungol
    Copy link
    Contributor

    tungol commented Dec 8, 2024

    This came up for me recently. I wanted to create a better signature for a built-in class's __init__ method by converting the signature from the underlying class. The text of the signature was easy to manipulate, but then I had no way to convert it to a signature object.

    I worked around it by creating the signature object for the underlying class first, and then modifying it with replace(). That's not a bad work-around, but there were a couple extra considerations that I thought were slightly easier to handle when generating the text of the signature I wanted directly.

    I agree that that's no need for inspect.signature() to understand the text format itself.

    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
    Labels
    stdlib Python modules in the Lib dir type-feature A feature request or enhancement
    Projects
    None yet
    Development

    No branches or pull requests

    4 participants