Skip to content
New issue

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

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

Already on GitHub? # to your account

bytes.fromhex() should parse a bytes #129349

Open
lordmauve opened this issue Jan 27, 2025 · 0 comments
Open

bytes.fromhex() should parse a bytes #129349

lordmauve opened this issue Jan 27, 2025 · 0 comments
Labels
interpreter-core (Objects, Python, Grammar, and Parser dirs) type-feature A feature request or enhancement

Comments

@lordmauve
Copy link
Contributor

lordmauve commented Jan 27, 2025

Feature or enhancement

Proposal:

bytes.fromhex() should accept a bytes:

>>> bytes.fromhex(b'8a3218def90a84cb4373beed87d9ba1ccc7d90d1')
b'\x8a2\x18\xde\xf9\n\x84\xcbCs\xbe\xed\x87\xd9\xba\x1c\xcc}\x90\xd1'

Background:

bytes.fromhex() accepts a str:

>>> bytes.fromhex('8a3218def90a84cb4373beed87d9ba1ccc7d90d1')
b'\x8a2\x18\xde\xf9\n\x84\xcbCs\xbe\xed\x87\xd9\xba\x1c\xcc}\x90\xd1'

However, it refuses to parse a byte string:

>>> bytes.fromhex(b'8a3218def90a84cb4373beed87d9ba1ccc7d90d1')
Traceback (most recent call last):
  File "<python-input-0>", line 1, in <module>
    bytes.fromhex(b'8a3218def90a84cb4373beed87d9ba1ccc7d90d1')
    ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: fromhex() argument must be str, not bytes

This requires an extra .decode(), which is rather wasteful given that the str is not of any real use.

This came up for me in parsing the output of git cat-file --batch, which must be a binary stream because it contains bytes, but includes header lines like

8a3218def90a84cb4373beed87d9ba1ccc7d90d1 100644 1394

The integers are parseable directly from bytes:

>>> int(b'100644', 8)
33188

so it seems like an omission that the SHAs are not.

Has this already been discussed elsewhere?

This is a minor feature, which does not need previous discussion elsewhere

Links to previous discussion of this feature:

No response

@lordmauve lordmauve added the type-feature A feature request or enhancement label Jan 27, 2025
@encukou encukou added the interpreter-core (Objects, Python, Grammar, and Parser dirs) label Jan 27, 2025
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
interpreter-core (Objects, Python, Grammar, and Parser dirs) type-feature A feature request or enhancement
Projects
None yet
Development

No branches or pull requests

2 participants