classification
Title: uuid.UUID.bytes gives a bytearray() instead of bytes
Type: Stage:
Components: Documentation, Library (Lib) Versions: Python 3.1, Python 3.2
process
Status: closed Resolution: accepted
Dependencies: Superseder:
Assigned To: georg.brandl Nosy List: flox, georg.brandl
Priority: normal Keywords: patch

Created on 2009-11-23 12:33 by flox, last changed 2009-12-19 18:23 by georg.brandl. This issue is now closed.

Files
File name Uploaded Description Edit
issue7380_py3k.diff flox, 2009-12-01 09:05 Patch against branches/py3k r76622, with tests
Messages (4)
msg95622 - (view) Author: Florent Xicluna (flox) * (Python committer) Date: 2009-11-23 12:33
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.
~ $
msg95623 - (view) Author: Florent Xicluna (flox) * (Python committer) Date: 2009-11-23 12:47
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.
msg95639 - (view) Author: Florent Xicluna (flox) * (Python committer) Date: 2009-11-23 18:03
Patch with documentation included. (branches/py3k)
msg96637 - (view) Author: Georg Brandl (georg.brandl) * (Python committer) Date: 2009-12-19 18:23
Thanks, applied in r76895.
History
Date User Action Args
2009-12-19 18:23:38georg.brandlsetstatus: open -> closed
resolution: accepted
messages: + msg96637
2009-12-11 18:00:32floxsetversions: - Python 3.0
2009-12-01 09:05:56floxsetfiles: - issue7380.diff
2009-12-01 09:05:49floxsetfiles: + issue7380_py3k.diff
2009-11-23 18:05:32floxsetfiles: - issue7380_uuid.diff
2009-11-23 18:03:46floxsetfiles: + issue7380.diff

nosy: + georg.brandl
messages: + msg95639

assignee: georg.brandl
components: + Documentation
2009-11-23 12:47:17floxsetfiles: + issue7380_uuid.diff
keywords: + patch
messages: + msg95623
2009-11-23 12:33:51floxcreate