Sitelet https://github.com/python/cpython/issues/85267
Skip to content

inspect.signature() doesn't parse __text_signature__ containing a newline character #85267

Description

@vstinner
BPO 41095
Nosy @vstinner, @serhiy-storchaka, @1st1, @asottile
PRs
  • bpo-31938: Fix default-value signatures of several functions in the select module #21066
  • 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 = None
    closed_at = None
    created_at = <Date 2020-06-23.22:26:29.252>
    labels = ['library', '3.10']
    title = "inspect.signature() doesn't parse __text_signature__ containing a newline character"
    updated_at = <Date 2020-06-24.01:12:14.804>
    user = 'https://github.com/vstinner'

    bugs.python.org fields:

    activity = <Date 2020-06-24.01:12:14.804>
    actor = 'Anthony Sottile'
    assignee = 'none'
    closed = False
    closed_date = None
    closer = None
    components = ['Library (Lib)']
    creation = <Date 2020-06-23.22:26:29.252>
    creator = 'vstinner'
    dependencies = []
    files = []
    hgrepos = []
    issue_num = 41095
    keywords = ['patch']
    message_count = 2.0
    messages = ['372213', '372222']
    nosy_count = 4.0
    nosy_names = ['vstinner', 'serhiy.storchaka', 'yselivanov', 'Anthony Sottile']
    pr_nums = ['21066']
    priority = 'normal'
    resolution = None
    stage = 'patch review'
    status = 'open'
    superseder = None
    type = None
    url = 'https://bugs.python.org/issue41095'
    versions = ['Python 3.10']

    Activity

    1. vstinner commented on Jun 23, 2020

      @vstinner
      MemberAuthor
      $ ./python
      Python 3.10.0a0 (heads/unicode_latin1:40855c7064, Jun 24 2020, 00:20:07) 
      >>> import select
      >>> select.epoll.register.__text_signature__
      '($self, /, fd,\n         eventmask=select.EPOLLIN | select.EPOLLPRI | select.EPOLLOUT)'
      
      >>> import inspect
      >>> inspect.signature(select.epoll.register)
      <Signature (self, /, fd)>

      => eventmask parameter is gone!

      Either signature() must raise an exception, or it must handle a __text_signature__ containing a newline character.

      Issue spotted on bpo-31938 when fixing "./python -m pydoc select".

      By the way, as expected, pydoc shows:

      Help on method_descriptor in select.epoll:
      ---

      $ ./python -m pydoc select.epoll.register
      select.epoll.register = register(self, /, fd)
          Registers a new fd or raises an OSError if the fd is already registered.
      (...)

    2. added
      stdlibStandard Library Python modules in the Lib/ directory
      on Jun 23, 2020
    3. asottile commented on Jun 24, 2020

      asottilemannequin
      Mannequin

      Looking into this, it appears to be due to the default value and not due to the newline

      I've stumbled upon two simplifications to the routines in inspect but not a fix for this

      1. bpo-20684: Remove unused inspect._signature_get_bound_param #21100
      2. gh-99815: remove unused 'invalid' sentinel value and code that checks for it in inspect.signature parsing #21104

      the following code is hit because ast.literal_eval(...) fails for the |d expression:

      cpython/Lib/inspect.py

      Lines 2069 to 2070 in 2f9ada9

      if o is invalid:
      return None

      this causes the parameter to be skipped entirely

    4. transferred this issue fromon Apr 10, 2022
    5. added a commit that references this issue on Oct 28, 2022
    6. vstinner commented on Nov 3, 2022

      @vstinner
      MemberAuthor

      Sadly, I don't have the bandwidth to work on this issue, so I just close it.

    7. JelleZijlstra commented on Nov 8, 2022

      @JelleZijlstra
      Member

      Reopening as there's an active PR fixing this.

    8. vstinner commented on Nov 8, 2022

      @vstinner
      MemberAuthor

      What is the active PR?

    9. JelleZijlstra commented on Nov 8, 2022

      @JelleZijlstra
      Member
    10. added a commit that references this issue on Dec 21, 2022
    11. added 2 commits that reference this issue on Dec 21, 2022
    12. added 2 commits that reference this issue on Dec 21, 2022
    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

    Metadata

    Metadata

    Assignees

    No one assigned

      Labels

      3.10 (EOL)end of lifestdlibStandard Library Python modules in the Lib/ directory

      Projects

      No projects

        Milestone

        No milestone

        Relationships

        None yet

        Development

        No branches or pull requests

        Issue actions