classification
Title: Update uuid.UUID TypeError exception: integer should not be an argument.
Type: behavior Stage: resolved
Components: Documentation Versions: Python 3.6, Python 3.5
process
Status: closed Resolution: fixed
Dependencies: Superseder:
Assigned To: docs@python Nosy List: Elena.Oat, berker.peksag, docs@python, ezio.melotti, georg.brandl, makronized, python-dev, vajrasky
Priority: normal Keywords: easy, needs review, patch

Created on 2013-10-04 11:18 by makronized, last changed 2016-03-20 14:48 by berker.peksag. This issue is now closed.

Files
File name Uploaded Description Edit
issue19164.patch jgauthier, 2013-11-18 03:05 review
Messages (6)
msg198943 - (view) Author: Marco Buccini (makronized) Date: 2013-10-04 11:18
When you try to use uuid.UUID() without arguments you get a TypeError exception saying that you can actually use an integer (while you cannot). 

Python 2.6.8 (default, Apr 26 2013, 16:24:53) 
[GCC 4.6.3] on linux2
>>> uuid.UUID()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.6/uuid.py", line 129, in __init__
    raise TypeError('need one of hex, bytes, bytes_le, fields, or int')
TypeError: need one of hex, bytes, bytes_le, fields, or int

>>> uuid.UUID(uuid.uuid4().int)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.6/uuid.py", line 131, in __init__
    hex = hex.replace('urn:', '').replace('uuid:', '')
AttributeError: 'long' object has no attribute 'replace'

So, let's check with an integer - maybe an int has 'replace'.
>>> uuid.UUID(1231231)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.6/uuid.py", line 131, in __init__
    hex = hex.replace('urn:', '').replace('uuid:', '')
AttributeError: 'int' object has no attribute 'replace'

No, it doesn't. Anyway, with a propery hex value, it works (of course!).

>>> uuid.UUID(uuid.uuid4().hex)
UUID('89b1283d-c32e-4b8a-a9e3-a699445fdd4d')
msg198946 - (view) Author: Vajrasky Kok (vajrasky) * Date: 2013-10-04 13:01
The exception message is correct. You can give an integer argument. But you have to use keyword argument.

>>> uuid.UUID(int=uuid.uuid4().int)
UUID('62ad61e5-b492-4f01-81e6-790049051c4f')

From the documentation:

 __init__(self, hex=None, bytes=None, bytes_le=None, fields=None, int=None, v
ersion=None)
 |      Create a UUID from either a string of 32 hexadecimal digits,
 |      a string of 16 bytes as the 'bytes' argument, a string of 16 bytes
 |      in little-endian order as the 'bytes_le' argument, a tuple of six
 |      integers (32-bit time_low, 16-bit time_mid, 16-bit time_hi_version,
 |      8-bit clock_seq_hi_variant, 8-bit clock_seq_low, 48-bit node) as
 |      the 'fields' argument, or a single 128-bit integer as the 'int'
 |      argument.  When a string of hex digits is given, curly braces,
 |      hyphens, and a URN prefix are all optional.  For example, these
 |      expressions all yield the same UUID:
msg198955 - (view) Author: Georg Brandl (georg.brandl) * (Python committer) Date: 2013-10-04 15:12
Yeah, the first message should probably say "one of the hex, bytes, bytes_le, fields, or int arguments must be given"
msg262069 - (view) Author: Elena Oat (Elena.Oat) * Date: 2016-03-20 11:32
I tested the patch and it seems fine. Also ran tests for uuid.py and it they passed.
msg262079 - (view) Author: Roundup Robot (python-dev) (Python triager) Date: 2016-03-20 14:48
New changeset f736aea929c2 by Berker Peksag in branch '3.5':
Issue #19164: Improve exception message of uuid.UUID()
https://hg.python.org/cpython/rev/f736aea929c2

New changeset e59b799df6e2 by Berker Peksag in branch 'default':
Issue #19164: Improve exception message of uuid.UUID()
https://hg.python.org/cpython/rev/e59b799df6e2
msg262080 - (view) Author: Berker Peksag (berker.peksag) * (Python committer) Date: 2016-03-20 14:48
Thanks!
History
Date User Action Args
2016-03-20 14:48:58berker.peksagsetstatus: open -> closed

versions: + Python 3.6, - Python 2.7, Python 3.4
nosy: + berker.peksag

messages: + msg262080
resolution: fixed
stage: patch review -> resolved
2016-03-20 14:48:15python-devsetnosy: + python-dev
messages: + msg262079
2016-03-20 11:32:05Elena.Oatsetnosy: + Elena.Oat
messages: + msg262069
2014-12-08 21:29:34serhiy.storchakasetkeywords: + needs review
stage: needs patch -> patch review
versions: + Python 3.4, Python 3.5
2013-11-18 03:05:28jgauthiersetfiles: + issue19164.patch
keywords: + patch
2013-10-05 00:31:32ezio.melottisetkeywords: + easy
nosy: + ezio.melotti
stage: needs patch

versions: + Python 2.7, - Python 2.6
2013-10-04 15:12:44georg.brandlsetnosy: + georg.brandl
messages: + msg198955
2013-10-04 13:01:10vajraskysetnosy: + vajrasky
messages: + msg198946
2013-10-04 11:18:10makronizedcreate