beeware / Python-Apple-support

A meta-package for building a version of Python that can be embedded into a macOS, iOS, tvOS or watchOS project.
MIT License
1.1k stars 159 forks source link

Docstrings are required to support `inspect` #165

Closed freakboy3742 closed 1 year ago

freakboy3742 commented 1 year ago

Docstrings aren't just decoration for humans; they're required by the Python interpreter in order to support inspect calls on builtin methods (via the __text_signature__ attribute, populated by the Argument Clinic).

The current Makefile disables docstrings on all operating systems.

To Reproduce Steps to reproduce the behavior:

  1. import hashlib
  2. print(hashlib.md5.__text_signature__)

If docstrings are disabled, this will return None.

Expected behavior

hashlib.md5.__text_signature__ should return ($module, /, string=b'', *, usedforsecurity=True).

Environment:

freakboy3742 commented 1 year ago

Here's the stack trace that lead to this discovery:

2022-10-13 14:29:01.662 Df Positron[74705:55b06d2] (_ctypes.cpython-310-iphonesimulator.so) Traceback (most recent call last):
2022-10-13 14:29:01.663 Df Positron[74705:55b06d2] (_ctypes.cpython-310-iphonesimulator.so)   File "/Users/rkm/Library/Developer/CoreSimulator/Devices/91314875-180C-41BB-AE5C-968C8B89897D/data/Containers/Bundle/Application/5E4A0905-96C0-4924-A9D2-95B9FBEB09DD/Positron.app/python-stdlib/runpy.py", line 196, in _run_module_as_main
2022-10-13 14:29:01.663 Df Positron[74705:55b06d2] (_ctypes.cpython-310-iphonesimulator.so)     return _run_code(code, main_globals, None,
2022-10-13 14:29:01.663 Df Positron[74705:55b06d2] (_ctypes.cpython-310-iphonesimulator.so)   File "/Users/rkm/Library/Developer/CoreSimulator/Devices/91314875-180C-41BB-AE5C-968C8B89897D/data/Containers/Bundle/Application/5E4A0905-96C0-4924-A9D2-95B9FBEB09DD/Positron.app/python-stdlib/runpy.py", line 86, in _run_code
2022-10-13 14:29:01.664 Df Positron[74705:55b06d2] (_ctypes.cpython-310-iphonesimulator.so)     exec(code, run_globals)
2022-10-13 14:29:01.664 Df Positron[74705:55b06d2] (_ctypes.cpython-310-iphonesimulator.so)   File "/Users/rkm/Library/Developer/CoreSimulator/Devices/91314875-180C-41BB-AE5C-968C8B89897D/data/Containers/Bundle/Application/5E4A0905-96C0-4924-A9D2-95B9FBEB09DD/Positron.app/app/positron/__main__.py", line 1, in <module>
2022-10-13 14:29:01.665 Df Positron[74705:55b06d2] (_ctypes.cpython-310-iphonesimulator.so)     from positron.app import main
2022-10-13 14:29:01.665 Df Positron[74705:55b06d2] (_ctypes.cpython-310-iphonesimulator.so)   File "/Users/rkm/Library/Developer/CoreSimulator/Devices/91314875-180C-41BB-AE5C-968C8B89897D/data/Containers/Bundle/Application/5E4A0905-96C0-4924-A9D2-95B9FBEB09DD/Positron.app/app/positron/app.py", line 7, in <module>
2022-10-13 14:29:01.665 Df Positron[74705:55b06d2] (_ctypes.cpython-310-iphonesimulator.so)     from django.core.servers.basehttp import WSGIRequestHandler
2022-10-13 14:29:01.666 Df Positron[74705:55b06d2] (_ctypes.cpython-310-iphonesimulator.so)   File "/Users/rkm/Library/Developer/CoreSimulator/Devices/91314875-180C-41BB-AE5C-968C8B89897D/data/Containers/Bundle/Application/5E4A0905-96C0-4924-A9D2-95B9FBEB09DD/Positron.app/app_packages/django/core/servers/basehttp.py", line 17, in <module>
2022-10-13 14:29:01.666 Df Positron[74705:55b06d2] (_ctypes.cpython-310-iphonesimulator.so)     from django.core.handlers.wsgi import LimitedStream
2022-10-13 14:29:01.666 Df Positron[74705:55b06d2] (_ctypes.cpython-310-iphonesimulator.so)   File "/Users/rkm/Library/Developer/CoreSimulator/Devices/91314875-180C-41BB-AE5C-968C8B89897D/data/Containers/Bundle/Application/5E4A0905-96C0-4924-A9D2-95B9FBEB09DD/Positron.app/app_packages/django/core/handlers/wsgi.py", line 5, in <module>
2022-10-13 14:29:01.667 Df Positron[74705:55b06d2] (_ctypes.cpython-310-iphonesimulator.so)     from django.core.handlers import base
2022-10-13 14:29:01.667 Df Positron[74705:55b06d2] (_ctypes.cpython-310-iphonesimulator.so)   File "/Users/rkm/Library/Developer/CoreSimulator/Devices/91314875-180C-41BB-AE5C-968C8B89897D/data/Containers/Bundle/Application/5E4A0905-96C0-4924-A9D2-95B9FBEB09DD/Positron.app/app_packages/django/core/handlers/base.py", line 11, in <module>
2022-10-13 14:29:01.668 Df Positron[74705:55b06d2] (_ctypes.cpython-310-iphonesimulator.so)     from django.urls import get_resolver, set_urlconf
2022-10-13 14:29:01.668 Df Positron[74705:55b06d2] (_ctypes.cpython-310-iphonesimulator.so)   File "/Users/rkm/Library/Developer/CoreSimulator/Devices/91314875-180C-41BB-AE5C-968C8B89897D/data/Containers/Bundle/Application/5E4A0905-96C0-4924-A9D2-95B9FBEB09DD/Positron.app/app_packages/django/urls/__init__.py", line 1, in <module>
2022-10-13 14:29:01.668 Df Positron[74705:55b06d2] (_ctypes.cpython-310-iphonesimulator.so)     from .base import (
2022-10-13 14:29:01.669 Df Positron[74705:55b06d2] (_ctypes.cpython-310-iphonesimulator.so)   File "/Users/rkm/Library/Developer/CoreSimulator/Devices/91314875-180C-41BB-AE5C-968C8B89897D/data/Containers/Bundle/Application/5E4A0905-96C0-4924-A9D2-95B9FBEB09DD/Positron.app/app_packages/django/urls/base.py", line 8, in <module>
2022-10-13 14:29:01.669 Df Positron[74705:55b06d2] (_ctypes.cpython-310-iphonesimulator.so)     from .exceptions import NoReverseMatch, Resolver404
2022-10-13 14:29:01.669 Df Positron[74705:55b06d2] (_ctypes.cpython-310-iphonesimulator.so)   File "/Users/rkm/Library/Developer/CoreSimulator/Devices/91314875-180C-41BB-AE5C-968C8B89897D/data/Containers/Bundle/Application/5E4A0905-96C0-4924-A9D2-95B9FBEB09DD/Positron.app/app_packages/django/urls/exceptions.py", line 1, in <module>
2022-10-13 14:29:01.670 Df Positron[74705:55b06d2] (_ctypes.cpython-310-iphonesimulator.so)     from django.http import Http404
2022-10-13 14:29:01.670 Df Positron[74705:55b06d2] (_ctypes.cpython-310-iphonesimulator.so)   File "/Users/rkm/Library/Developer/CoreSimulator/Devices/91314875-180C-41BB-AE5C-968C8B89897D/data/Containers/Bundle/Application/5E4A0905-96C0-4924-A9D2-95B9FBEB09DD/Positron.app/app_packages/django/http/__init__.py", line 2, in <module>
2022-10-13 14:29:01.671 Df Positron[74705:55b06d2] (_ctypes.cpython-310-iphonesimulator.so)     from django.http.request import (
2022-10-13 14:29:01.671 Df Positron[74705:55b06d2] (_ctypes.cpython-310-iphonesimulator.so)   File "/Users/rkm/Library/Developer/CoreSimulator/Devices/91314875-180C-41BB-AE5C-968C8B89897D/data/Containers/Bundle/Application/5E4A0905-96C0-4924-A9D2-95B9FBEB09DD/Positron.app/app_packages/django/http/request.py", line 8, in <module>
2022-10-13 14:29:01.672 Df Positron[74705:55b06d2] (_ctypes.cpython-310-iphonesimulator.so)     from django.core import signing
2022-10-13 14:29:01.672 Df Positron[74705:55b06d2] (_ctypes.cpython-310-iphonesimulator.so)   File "/Users/rkm/Library/Developer/CoreSimulator/Devices/91314875-180C-41BB-AE5C-968C8B89897D/data/Containers/Bundle/Application/5E4A0905-96C0-4924-A9D2-95B9FBEB09DD/Positron.app/app_packages/django/core/signing.py", line 43, in <module>
2022-10-13 14:29:01.673 Df Positron[74705:55b06d2] (_ctypes.cpython-310-iphonesimulator.so)     from django.utils.crypto import constant_time_compare, salted_hmac
2022-10-13 14:29:01.673 Df Positron[74705:55b06d2] (_ctypes.cpython-310-iphonesimulator.so)   File "/Users/rkm/Library/Developer/CoreSimulator/Devices/91314875-180C-41BB-AE5C-968C8B89897D/data/Containers/Bundle/Application/5E4A0905-96C0-4924-A9D2-95B9FBEB09DD/Positron.app/app_packages/django/utils/crypto.py", line 84, in <module>
2022-10-13 14:29:01.674 Df Positron[74705:55b06d2] (_ctypes.cpython-310-iphonesimulator.so)     if func_supports_parameter(hashlib.md5, "usedforsecurity"):
2022-10-13 14:29:01.674 Df Positron[74705:55b06d2] (_ctypes.cpython-310-iphonesimulator.so)   File "/Users/rkm/Library/Developer/CoreSimulator/Devices/91314875-180C-41BB-AE5C-968C8B89897D/data/Containers/Bundle/Application/5E4A0905-96C0-4924-A9D2-95B9FBEB09DD/Positron.app/app_packages/django/utils/inspect.py", line 73, in func_supports_parameter
2022-10-13 14:29:01.675 Df Positron[74705:55b06d2] (_ctypes.cpython-310-iphonesimulator.so)     return any(param.name == name for param in _get_callable_parameters(func))
2022-10-13 14:29:01.675 Df Positron[74705:55b06d2] (_ctypes.cpython-310-iphonesimulator.so)   File "/Users/rkm/Library/Developer/CoreSimulator/Devices/91314875-180C-41BB-AE5C-968C8B89897D/data/Containers/Bundle/Application/5E4A0905-96C0-4924-A9D2-95B9FBEB09DD/Positron.app/app_packages/django/utils/inspect.py", line 16, in _get_callable_parameters
2022-10-13 14:29:01.676 Df Positron[74705:55b06d2] (_ctypes.cpython-310-iphonesimulator.so)     return _get_func_parameters(func, remove_first=is_method)
2022-10-13 14:29:01.676 Df Positron[74705:55b06d2] (_ctypes.cpython-310-iphonesimulator.so)   File "/Users/rkm/Library/Developer/CoreSimulator/Devices/91314875-180C-41BB-AE5C-968C8B89897D/data/Containers/Bundle/Application/5E4A0905-96C0-4924-A9D2-95B9FBEB09DD/Positron.app/app_packages/django/utils/inspect.py", line 7, in _get_func_parameters
2022-10-13 14:29:01.677 Df Positron[74705:55b06d2] (_ctypes.cpython-310-iphonesimulator.so)     parameters = tuple(inspect.signature(func).parameters.values())
2022-10-13 14:29:01.677 Df Positron[74705:55b06d2] (_ctypes.cpython-310-iphonesimulator.so)   File "/Users/rkm/Library/Developer/CoreSimulator/Devices/91314875-180C-41BB-AE5C-968C8B89897D/data/Containers/Bundle/Application/5E4A0905-96C0-4924-A9D2-95B9FBEB09DD/Positron.app/python-stdlib/inspect.py", line 3247, in signature
2022-10-13 14:29:01.678 Df Positron[74705:55b06d2] (_ctypes.cpython-310-iphonesimulator.so)     return Signature.from_callable(obj, follow_wrapped=follow_wrapped,
2022-10-13 14:29:01.678 Df Positron[74705:55b06d2] (_ctypes.cpython-310-iphonesimulator.so)   File "/Users/rkm/Library/Developer/CoreSimulator/Devices/91314875-180C-41BB-AE5C-968C8B89897D/data/Containers/Bundle/Application/5E4A0905-96C0-4924-A9D2-95B9FBEB09DD/Positron.app/python-stdlib/inspect.py", line 2995, in from_callable
2022-10-13 14:29:01.679 Df Positron[74705:55b06d2] (_ctypes.cpython-310-iphonesimulator.so)     return _signature_from_callable(obj, sigcls=cls,
2022-10-13 14:29:01.679 Df Positron[74705:55b06d2] (_ctypes.cpython-310-iphonesimulator.so)   File "/Users/rkm/Library/Developer/CoreSimulator/Devices/91314875-180C-41BB-AE5C-968C8B89897D/data/Containers/Bundle/Application/5E4A0905-96C0-4924-A9D2-95B9FBEB09DD/Positron.app/python-stdlib/inspect.py", line 2461, in _signature_from_callable
2022-10-13 14:29:01.680 Df Positron[74705:55b06d2] (_ctypes.cpython-310-iphonesimulator.so)     return _signature_from_builtin(sigcls, obj,
2022-10-13 14:29:01.680 Df Positron[74705:55b06d2] (_ctypes.cpython-310-iphonesimulator.so)   File "/Users/rkm/Library/Developer/CoreSimulator/Devices/91314875-180C-41BB-AE5C-968C8B89897D/data/Containers/Bundle/Application/5E4A0905-96C0-4924-A9D2-95B9FBEB09DD/Positron.app/python-stdlib/inspect.py", line 2271, in _signature_from_builtin
2022-10-13 14:29:01.681 Df Positron[74705:55b06d2] (_ctypes.cpython-310-iphonesimulator.so)     raise ValueError("no signature found for builtin {!r}".format(func))
2022-10-13 14:29:01.681 Df Positron[74705:55b06d2] (_ctypes.cpython-310-iphonesimulator.so) ValueError: no signature found for builtin <built-in function openssl_md5>