Skip to content
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

inspect.signature(bytes.hex) raises ValueError "builtin has invalid signature" #87233

Open
verhovsky mannequin opened this issue Jan 29, 2021 · 4 comments
Open

inspect.signature(bytes.hex) raises ValueError "builtin has invalid signature" #87233

verhovsky mannequin opened this issue Jan 29, 2021 · 4 comments
Labels
3.10 only security fixes stdlib Python modules in the Lib dir type-feature A feature request or enhancement

Comments

@verhovsky
Copy link
Mannequin

verhovsky mannequin commented Jan 29, 2021

BPO 43067
Nosy @verhovsky

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 2021-01-29.21:00:52.553>
labels = ['type-feature', 'library', '3.10']
title = 'inspect.signature(bytes.hex) raises ValueError "builtin has invalid signature"'
updated_at = <Date 2021-01-29.21:00:52.553>
user = 'https://github.com/verhovsky'

bugs.python.org fields:

activity = <Date 2021-01-29.21:00:52.553>
actor = 'boris'
assignee = 'none'
closed = False
closed_date = None
closer = None
components = ['Library (Lib)']
creation = <Date 2021-01-29.21:00:52.553>
creator = 'boris'
dependencies = []
files = []
hgrepos = []
issue_num = 43067
keywords = []
message_count = 1.0
messages = ['385940']
nosy_count = 1.0
nosy_names = ['boris']
pr_nums = []
priority = 'normal'
resolution = None
stage = None
status = 'open'
superseder = None
type = 'enhancement'
url = 'https://bugs.python.org/issue43067'
versions = ['Python 3.10']

@verhovsky
Copy link
Mannequin Author

verhovsky mannequin commented Jan 29, 2021

On Python 3.9

>>> import inspect
>>> inspect.signature(bytes.hex)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.9/inspect.py", line 3118, in signature
    return Signature.from_callable(obj, follow_wrapped=follow_wrapped)
  File "/usr/lib/python3.9/inspect.py", line 2867, in from_callable
    return _signature_from_callable(obj, sigcls=cls,
  File "/usr/lib/python3.9/inspect.py", line 2322, in _signature_from_callable
    return _signature_from_builtin(sigcls, obj,
  File "/usr/lib/python3.9/inspect.py", line 2135, in _signature_from_builtin
    return _signature_fromstr(cls, func, s, skip_bound_arg)
  File "/usr/lib/python3.9/inspect.py", line 2005, in _signature_fromstr
    raise ValueError("{!r} builtin has invalid signature".format(obj))
ValueError: <method 'hex' of 'bytes' objects> builtin has invalid signature

This is also true for memoryview.hex and bytearray.hex . This happens because

>>> bytes.hex.__text_signature__
'($self, /, sep=<unrepresentable>, bytes_per_sep=1)'

when it would make more sense for it to return

'($self, /, sep='', bytes_per_sep=1)'

or at least sep=None

@verhovsky verhovsky mannequin added 3.10 only security fixes stdlib Python modules in the Lib dir type-feature A feature request or enhancement labels Jan 29, 2021
@ezio-melotti ezio-melotti transferred this issue from another repository Apr 10, 2022
@JelleZijlstra
Copy link
Member

I am looking at this because I realized it's preventing us from testing some signatures in typeshed.

I got this to work:

>>> import inspect
>>> inspect.signature(bytes.hex)
<Signature (self, /, sep=Ellipsis, bytes_per_sep=1)>

But it feels wrong to claim Ellipsis as the default, because that's not really true. A more principled solution would be to add a Parameter.unrepresentable marker and use that as the default, but that feels like a change we can make only in 3.13, not in the bugfix branches.

My leaning is to apply the fix suggested above in 3.13, and put some hack in stubtest (or other tools that want to inspect signatures) to make it work on earlier versions.

@JelleZijlstra
Copy link
Member

@sobolevn
Copy link
Member

sobolevn commented Nov 9, 2023

@serhiy-storchaka said that future inspect.signatures() is a better solution. But, it is in the works.

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

No branches or pull requests

2 participants