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

uuid.UUID.bytes gives a bytearray() instead of bytes #51629

Closed
florentx mannequin opened this issue Nov 23, 2009 · 4 comments
Closed

uuid.UUID.bytes gives a bytearray() instead of bytes #51629

florentx mannequin opened this issue Nov 23, 2009 · 4 comments
Assignees
Labels
docs Documentation in the Doc dir stdlib Python modules in the Lib dir

Comments

@florentx
Copy link
Mannequin

florentx mannequin commented Nov 23, 2009

BPO 7380
Nosy @birkenfeld, @florentx
Files
  • issue7380_py3k.diff: Patch against branches/py3k r76622, with tests
  • 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 = 'https://github.com/birkenfeld'
    closed_at = <Date 2009-12-19.18:23:38.019>
    created_at = <Date 2009-11-23.12:33:51.961>
    labels = ['library', 'docs']
    title = 'uuid.UUID.bytes gives a bytearray() instead of bytes'
    updated_at = <Date 2009-12-19.18:23:38.018>
    user = 'https://github.com/florentx'

    bugs.python.org fields:

    activity = <Date 2009-12-19.18:23:38.018>
    actor = 'georg.brandl'
    assignee = 'georg.brandl'
    closed = True
    closed_date = <Date 2009-12-19.18:23:38.019>
    closer = 'georg.brandl'
    components = ['Documentation', 'Library (Lib)']
    creation = <Date 2009-11-23.12:33:51.961>
    creator = 'flox'
    dependencies = []
    files = ['15426']
    hgrepos = []
    issue_num = 7380
    keywords = ['patch']
    message_count = 4.0
    messages = ['95622', '95623', '95639', '96637']
    nosy_count = 2.0
    nosy_names = ['georg.brandl', 'flox']
    pr_nums = []
    priority = 'normal'
    resolution = 'accepted'
    stage = None
    status = 'closed'
    superseder = None
    type = None
    url = 'https://bugs.python.org/issue7380'
    versions = ['Python 3.1', 'Python 3.2']

    @florentx
    Copy link
    Mannequin Author

    florentx mannequin commented Nov 23, 2009

    I've tried some experiments with module uuid, and I meet some
    inconsistencies between the documentation, the docstring and the real
    behavior of the module.

    An interactive session is worth a thousand words:

    >>> import uuid
    >>> uuid.UUID(bytes='\x12\x34\x56\x78'*4)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/usr/lib/python3.1/uuid.py", line 149, in __init__
        assert isinstance(bytes, bytes_), repr(bytes)
    AssertionError: '\x124Vx\x124Vx\x124Vx\x124Vx'
    >>> uuid.UUID(bytes_le='\x78\x56\x34\x12\x34\x12\x78\x56' +
    ...                    '\x12\x34\x56\x78\x12\x34\x56\x78')
    Traceback (most recent call last):
      File "<stdin>", line 2, in <module>
      File "/usr/lib/python3.1/uuid.py", line 144, in __init__
        bytes_(reversed(bytes_le[6:8])) +
    TypeError: 'str' object cannot be interpreted as an integer
    >>> 

    Ok, the lines above are just parts of the documentation which need
    update. But what is more confusing is the last example of the documentation.
    http://docs.python.org/dev/py3k/library/uuid.html

    Here is the interactive session:

    >>> x = uuid.UUID('{00010203-0405-0607-0809-0a0b0c0d0e0f}')
    >>> x.bytes
    bytearray(b'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f')
    >>> x.bytes_le
    b'\x03\x02\x01\x00\x05\x04\x07\x06\x08\t\n\x0b\x0c\r\x0e\x0f'
    >>> 

    Normally both attributes should get a "UUID as a 16-byte string",
    according to the documentation. Only the endianness should do the
    difference. I guess this one need a patch.

    Finally, the docstring fails, too:

    ~ $ python3 -m doctest /usr/lib/python3.1/uuid.py
    **********************************************************************
    File "/usr/lib/python3.1/uuid.py", line 16, in uuid
    Failed example:
        uuid.uuid1()
    Expected:
        UUID('a8098c1a-f86e-11da-bd1a-00112444be1e')
    Got:
        UUID('e4bc8a38-d829-11de-9eee-0024e8bc58f0')
    **********************************************************************
    File "/usr/lib/python3.1/uuid.py", line 24, in uuid
    Failed example:
        uuid.uuid4()
    Expected:
        UUID('16fd2706-8baf-433b-82eb-8c7fada847da')
    Got:
        UUID('71588cf5-7a51-4d59-ad76-05fb6b932673')
    **********************************************************************
    File "/usr/lib/python3.1/uuid.py", line 39, in uuid
    Failed example:
        x.bytes
    Expected:
        b'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f'
    Got:
        bytearray(b'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f')
    **********************************************************************
    File "/usr/lib/python3.1/uuid.py", line 43, in uuid
    Failed example:
        uuid.UUID(bytes=x.bytes)
    Exception raised:
        Traceback (most recent call last):
          File "/usr/lib/python3.1/doctest.py", line 1243, in __run
            compileflags, 1), test.globs)
          File "<doctest uuid[8]>", line 1, in <module>
            uuid.UUID(bytes=x.bytes)
          File "/usr/lib/python3.1/uuid.py", line 149, in __init__
            assert isinstance(bytes, bytes_), repr(bytes)
        AssertionError:
    bytearray(b'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f')
    **********************************************************************
    1 items had failures:
       4 of   9 in uuid
    ***Test Failed*** 4 failures.
    ~ $

    @florentx florentx mannequin added the stdlib Python modules in the Lib dir label Nov 23, 2009
    @florentx
    Copy link
    Mannequin Author

    florentx mannequin commented Nov 23, 2009

    Attached patch gives coherence:

    • both UUID.bytes and UUID.bytes_le return a "bytes" object
    • the random tests are explicitly skipped

    Then the documentation needs fixing, too.

    @florentx
    Copy link
    Mannequin Author

    florentx mannequin commented Nov 23, 2009

    Patch with documentation included. (branches/py3k)

    @florentx florentx mannequin added the docs Documentation in the Doc dir label Nov 23, 2009
    @florentx florentx mannequin assigned birkenfeld Nov 23, 2009
    @birkenfeld
    Copy link
    Member

    Thanks, applied in r76895.

    @ezio-melotti ezio-melotti transferred this issue from another repository Apr 10, 2022
    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
    Labels
    docs Documentation in the Doc dir stdlib Python modules in the Lib dir
    Projects
    None yet
    Development

    No branches or pull requests

    1 participant