Skip to content

__text_signature__ parser doesn't handle globals in extension module #82062

Closed

Description

@anntzer
mannequin
BPO 37881
Nosy @ericsnowcurrently, @anntzer

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 2019-08-18.13:33:56.559>
labels = ['extension-modules']
title = "__text_signature__ parser doesn't handle globals in extension module"
updated_at = <Date 2020-10-08.11:34:43.922>
user = 'https://github.com/anntzer'

bugs.python.org fields:

activity = <Date 2020-10-08.11:34:43.922>
actor = 'pitrou'
assignee = 'none'
closed = False
closed_date = None
closer = None
components = ['Extension Modules']
creation = <Date 2019-08-18.13:33:56.559>
creator = 'Antony.Lee'
dependencies = []
files = []
hgrepos = []
issue_num = 37881
keywords = []
message_count = 1.0
messages = ['349919']
nosy_count = 3.0
nosy_names = ['eric.snow', 'Antony.Lee', 'Eric Wieser']
pr_nums = []
priority = 'normal'
resolution = None
stage = None
status = 'open'
superseder = None
type = None
url = 'https://bugs.python.org/issue37881'
versions = []

Linked PRs

Activity

  1. anntzer commented on Aug 18, 2019

    anntzermannequin
    MannequinAuthor

    Starting from the custom2 example at https://docs.python.org/3/extending/newtypes_tutorial.html#adding-data-and-methods-to-the-basic-example, change the methods table to

    static PyMethodDef Custom_methods[] = {
        {"foo", (PyCFunction) Custom_foo, METH_VARARGS,
        "foo(x=ONE)\n--\n\nFoos this."
        },
        {NULL}  /* Sentinel */
    };
    

    and add a global ONE to the module dict:

        PyModule_AddObject(m, "ONE", PyLong_FromLong(1));

    Building and running e.g. pydoc on this module results in

        Traceback (most recent call last):
        File ".../lib/python3.7/inspect.py", line 2003, in wrap_value
            value = eval(s, module_dict)
        File "<string>", line 1, in <module>
        NameError: name 'ONE' is not defined
    
        During handling of the above exception, another exception occurred:
    
        Traceback (most recent call last):
        File ".../lib/python3.7/inspect.py", line 2006, in wrap_value
            value = eval(s, sys_module_dict)
        File "<string>", line 1, in <module>
        NameError: name 'ONE' is not defined
    
        During handling of the above exception, another exception occurred:
    
        Traceback (most recent call last):
        File ".../lib/python3.7/runpy.py", line 193, in _run_module_as_main
            "__main__", mod_spec)
        <elided>
        File ".../lib/python3.7/inspect.py", line 2008, in wrap_value
            raise RuntimeError()
        RuntimeError

    I think the fix is fairly simple; one needs to replace

        module_name = getattr(obj, '__module__', None)

    in inspect.py::_signature_fromstr by

        module_name = (getattr(obj, '__module__', None)
                       or getattr(getattr(obj, '__objclass__'), '__module__', None))

    (This is a less general but simpler solution than https://bugs.python.org/issue23967.)

  2. transferred this issue fromon Apr 10, 2022
  3. added a commit that references this issue on Feb 11, 2024
  4. added a commit that references this issue on Feb 26, 2024
  5. added a commit that references this issue on May 2, 2024
  6. added
    stdlibStandard Library Python modules in the Lib/ directory
    3.13only security fixes
    and removed on May 2, 2024
  7. added a commit that references this issue on May 8, 2024
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.13only security fixesstdlibStandard Library Python modules in the Lib/ directory

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions