This module provides immutable UUID objects (class UUID) and the functions uuid1(), uuid3(), uuid4(), uuid5() for generating version 1, 3, 4, and 5 UUIDs as specified in RFC 4122.
If all you want is a unique ID, you should probably call uuid1() or uuid4(). Note that uuid1() may compromise privacy since it creates a UUID containing the computer's network address. uuid4() creates a random UUID.
Typical usage:
>>> import uuid
# make a UUID based on the host ID and current time >>> uuid.uuid1() UUID('a8098c1a-f86e-11da-bd1a-00112444be1e')
# make a UUID using an MD5 hash of a namespace UUID and a name >>> uuid.uuid3(uuid.NAMESPACE_DNS, 'python.org') UUID('6fa459ea-ee8a-3ca4-894e-db77e160355e')
# make a random UUID >>> uuid.uuid4() UUID('16fd2706-8baf-433b-82eb-8c7fada847da')
# make a UUID using a SHA-1 hash of a namespace UUID and a name >>> uuid.uuid5(uuid.NAMESPACE_DNS, 'python.org') UUID('886313e1-3b8a-5372-9b90-0c9aee199e5d')
# make a UUID from a string of hex digits (braces and hyphens ignored) >>> x = uuid.UUID('{00010203-0405-0607-0809-0a0b0c0d0e0f}')
# convert a UUID to a string of hex digits in standard form >>> str(x) '00010203-0405-0607-0809-0a0b0c0d0e0f'
# get the raw 16 bytes of the UUID >>> x.bytes '\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f'
# make a UUID from a 16-byte string >>> uuid.UUID(bytes=x.bytes) UUID('00010203-0405-0607-0809-0a0b0c0d0e0f') i����NsKa-Ping Yee <ping@zesty.ca>sreserved for NCS compatibilitysspecified in RFC 4122s$reserved for Microsoft compatibilitysreserved for future definitiontUUIDcBs�eZdZddddddd�Zd�Zd�Zd�Zd�Zd�Z d�Z d�Zee�Z d �Zee�Zd �Zee�Zd�Zee�Zd�Zee�Zd �Zee�Zd�Zee�Zd�Zee�Zd�Zee�Zd�Zee�Zd�Z ee �Z!d�Z"ee"�Z#d�Z$ee$�Z%d�Z&ee&�Z'd�Z(ee(�Z)RS(s�Instances of the UUID class represent UUIDs as specified in RFC 4122. UUID objects are immutable, hashable, and usable as dictionary keys. Converting a UUID to a string with str() yields something in the form '12345678-1234-1234-1234-123456789abc'. The UUID constructor accepts five possible forms: a similar string of hexadecimal digits, or a tuple of six integer fields (with 32-bit, 16-bit, 16-bit, 8-bit, 8-bit, and 48-bit values respectively) as an argument named 'fields', or a string of 16 bytes (with all the integer fields in big-endian order) as an argument named 'bytes', or a string of 16 bytes (with the first three fields in little-endian order) as an argument named 'bytes_le', or a single 128-bit integer as an argument named 'int'.
UUIDs have these read-only attributes:
bytes the UUID as a 16-byte string (containing the six integer fields in big-endian byte order)
bytes_le the UUID as a 16-byte string (with time_low, time_mid, and time_hi_version in little-endian byte order)
fields a tuple of the six integer fields of the UUID, which are also available as six individual attributes and two derived attributes:
time_low the first 32 bits of the UUID time_mid the next 16 bits of the UUID time_hi_version the next 16 bits of the UUID clock_seq_hi_variant the next 8 bits of the UUID clock_seq_low the next 8 bits of the UUID node the last 48 bits of the UUID
time the 60-bit timestamp clock_seq the 14-bit sequence number
hex the UUID as a 32-character hexadecimal string
int the UUID as a 128-bit integer
urn the UUID as a URN as specified in RFC 4122
variant the UUID variant (one of the constants RESERVED_NCS, RFC_4122, RESERVED_MICROSOFT, or RESERVED_FUTURE)
version the UUID version number (1 through 5, meaningful only when the variant is RFC_4122) cCs�|||||gjd,�dkr3td��n|d,k r�|jdd�jdd�}|jd�jdd�}t|�dkr�td ��nt|d �}n|d,k r%t|�d kr�td��n|d|d |d|d|d|d|d|d|d}n|d,k r{t|�d krRtd��ntdd tt t |��d �}n|d,k r�t|�dkr�td��n|\}}} } }}d|ko�d-kns�td��nd|kod.knstd��nd| ko-d/knsAtd��nd| koXd0knsltd��nd|ko�d1kns�td��nd|ko�d2kns�td ��n| d>|B} |d!>|d">B| d#>B| d>B|B}n|d,k r3d|kod3kns3td%��q3n|d,k r�d|koVdknsjtd&��n|d5M}|d6O}|d8M}||d*>O}n||jd+<d,S(9smCreate 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:
Exactly one of 'hex', 'bytes', 'bytes_le', 'fields', or 'int' must be given. The 'version' argument is optional; if given, the resulting UUID will have its variant and version set according to RFC 4122, overriding the given 'hex', 'bytes', 'bytes_le', 'fields', or 'int'. is0need one of hex, bytes, bytes_le, fields, or intsurn:tsuuid:s{}t-i s$badly formed hexadecimal UUID stringis bytes_le is not a 16-char stringiiiiiiiisbytes is not a 16-char strings%02xsfields is not a 6-tuplel s*field 1 out of range (need a 32-bit value)ls*field 2 out of range (need a 16-bit value)s*field 3 out of range (need a 16-bit value)ls*field 4 out of range (need an 8-bit value)s*field 5 out of range (need an 8-bit value)l0s*field 6 out of range (need a 48-bit value)l`lPl@l�s*int is out of range (need a 128-bit value)sillegal version numberi�i�i�lLtintNlllllll ll����lll����(tcounttNonet TypeErrortreplacetstriptlent ValueErrortlongttupletmaptordt__dict__(tselfthextbytestbytes_letfieldsRtversionttime_lowttime_midttime_hi_versiontclock_seq_hi_variantt clock_seq_lowtnodet clock_seq((s/usr/lib64/python2.7/uuid.pyt__init__gs\$?))
c Cs�y�t||�}|sdS|��x�|D]�}|j�j�j�}x�tt|��D]l}|||kr[y9|||�}t|jdd�d�} | r�| SWq�tt fk r�q�Xq[q[Wq*WWdQXWnt k r�nXdS(Nt:Ri(R^tlowertrstripRNR,R RRR t IndexErrortIOError( RYRZthw_identifierst get_indextpipetlinetwordstitwordtmac((s/usr/lib64/python2.7/uuid.pyt _find_mac:s$
cCs=d}x0dD](}td||d ��}|r |Sq Wd S( s5Get the hardware address on Unix by running ifconfig.thwaddrtethersaddress:tlladdrRs-as-avtifconfigcSs|dS(Ni((Ri((s/usr/lib64/python2.7/uuid.pyt<lambda>XRN(RmRnsaddress:Ro(Rs-as-av(Rl(tkeywordsRZRk((s/usr/lib64/python2.7/uuid.pyt_ifconfig_getnodeSs
cCs�ddl}ddl}y|j|j��}Wntk rEdSXtdd|gd��}|rk|Stdd|gd��}|r�|Stddd|gd��}|r�|SdS( s0Get the hardware address on Unix by running arp.i����Ntarps-ancSsdS(Ni����((Ri((s/usr/lib64/python2.7/uuid.pyRqeRcSs|dS(Ni((Ri((s/usr/lib64/python2.7/uuid.pyRqjRs(%s)cSs|dS(Ni((Ri((s/usr/lib64/python2.7/uuid.pyRqpR(RJtsockett gethostbynametgethostnametEnvironmentErrorRRl(RJRutip_addrRk((s/usr/lib64/python2.7/uuid.pyt_arp_getnode\s cCstdddgd��S(s4Get the hardware address on Unix by running lanscan.tlanscans-aitlan0cSsdS(Ni((Ri((s/usr/lib64/python2.7/uuid.pyRqwR(Rl(((s/usr/lib64/python2.7/uuid.pyt_lanscan_getnodetscCsytdd�}|sdS|��|j�j�j�}y|jd�}Wntk rbdSXx�|D]�}yo|j�j�}||}t|�dkr�|jd�dkr�t|j dd�d �}|r�|SnWqjtt fk r�qjXqjWWdQXWntk rnXdS( s4Get the hardware address on Unix by running netstat.tnetstats-iaNtAddressiR_iRi(R^treadlineRaRNtindexR R RRRRbtOSError(RfRhRiRgRjRk((s/usr/lib64/python2.7/uuid.pyt_netstat_getnodeys,
' c Cs<ddl}ddl}dddg}yQddl}|jd�}|jjj|d�|jd|jj d��WnnXx�|D]�}y&|j |jj|d �d �}Wnt k r�q�nX|�`xX|D]P}|jd�dj�j�}|jd|�r�t|jd d�d�Sq�WWdQXq�WdS(s<Get the hardware address on Windows by running ipconfig.exe.i����NRsc:\windows\system32sc:\winnt\system32i,itmbcstipconfigs /allR_s)(?:[0-9a-f][0-9a-f]-){5}[0-9a-f][0-9a-f]$Ri(RJtretctypestcreate_string_buffertwindlltkernel32tGetSystemDirectoryAtinsertR)tdecodeRXRQRRRcRNRR`tmatchRR( RJR�tdirsR�tbufferR[RfRgR)((s/usr/lib64/python2.7/uuid.pyt_ipconfig_getnode�s& &
cCs�ddl}ddl}|j�}|j|_|j�|_}|j�|j|�dkrfdS|j �x't |j�D]}|j�|j |_t|j|�|_|j|�dkr�q�n|j�|j|_t|j|�|_djd�|_|j�|_}|j|�dkr9q�n|j �tt|j�}|dd>|dd>|d d >|dd>|d d>|dSWdS(stGet the hardware address on Windows using NetBIOS calls. See http://support.microsoft.com/kb/118623 for details.i����Nit*il(il ililili(t win32wnettnetbiostNCBtNCBENUMtCommandt LANA_ENUMtBuffert_packtNetbiost_unpackR,tlengthtResettNCBRESETRtlanatLana_numtNCBASTATtljusttCallnametADAPTER_STATUSR tadapter_address(R�R�tncbtadaptersRitstatusR((s/usr/lib64/python2.7/uuid.pyt_netbios_getnode�s0
tuuidtwintctuuid_generate_timetuuid_generate_md5tdarwinit.ii tUuidCreateSequentialt UuidCreatecCs,tjd�}t|�td|j�jS(s.Get the hardware address on Unix using ctypes.iR(R�R�t_uuid_generate_timeRtrawR(t_buffer((s/usr/lib64/python2.7/uuid.pyt_unixdll_getnode�s cCs8tjd�}t|�dkr4td|j�jSdS(s1Get the hardware address on Windows using ctypes.iiRN(R�R�t_UuidCreateRR�R(R�((s/usr/lib64/python2.7/uuid.pyt_windll_getnodescCs ddl}|jdd�dBS(sCGet a random node ID, with eighth bit set as suggested by RFC 4122.i����Niil0ll(trandomt randrange(R�((s/usr/lib64/python2.7/uuid.pyt_random_getnode scCs�tdk rtSddl}|jdkr4t}nt}x[|tgD]L}y |�aWn qHnXtdk rHdtko�dknrHtSqHWdS(s3Get the hardware address as a 48-bit positive integer.
The first time this runs, it may launch a separate program, which could be quite slow. If all attempts to obtain the hardware address fail, we choose a random 48-bit number with its eighth bit set to 1 as recommended in RFC 4122. i����Ntwin32iii0I(t_nodeRtsystplatformt_NODE_GETTERS_WIN32t_NODE_GETTERS_UNIXR�(R�tgetterstgetter((s/usr/lib64/python2.7/uuid.pytgetnodes
(cCsQtrK||kodknrKtjd�}t|�td|j�Sddl}t|j�d�}t|d�d}tdk r�|tkr�td}n|a|dkr�ddl }|j d�}n|d @}|d?d@}|d ?d@} |d@} |d?d@}|dkr,t�}ntd||| || |fdd�S(sGenerate a UUID from a host ID, sequence number, and the current time. If 'node' is not given, getnode() is used to obtain the hardware address. If 'clock_seq' is given, it is used as the sequence number; otherwise a random 14-bit sequence number is chosen.iRi����Nge��Aidl@'Hw� ill��l l�l0l�l�ll?RRl@(R�RR�R�RR�RGRt_last_timestampR�R�R�(RRR�RGtnanosecondst timestampR�RRRRR((s/usr/lib64/python2.7/uuid.pytuuid14s,"
cCs�trAtjd�}t||j|t|��td|j�Sddlm}||j|�j �}td|d dd�S(sAGenerate a UUID from the MD5 hash of a namespace UUID and a name.iRi����(tmd5Ri( t_uuid_generate_md5R�R�RR RR�thashlibR�tdigest(t namespaceR(R�R�R#((s/usr/lib64/python2.7/uuid.pytuuid3WscCstdtjd�dd�S(sGenerate a random UUID.RiRi(RRJturandom(((s/usr/lib64/python2.7/uuid.pytuuid4bscCs@ddlm}||j|�j�}td|d dd�S(sCGenerate a UUID from the SHA-1 hash of a namespace UUID and a name.i����(tsha1RiRi(R�R�RR�R(R�R(R�R#((s/usr/lib64/python2.7/uuid.pytuuid5fss$6ba7b810-9dad-11d1-80b4-00c04fd430c8s$6ba7b811-9dad-11d1-80b4-00c04fd430c8s$6ba7b812-9dad-11d1-80b4-00c04fd430c8s$6ba7b814-9dad-11d1-80b4-00c04fd430c8(9RERJt __author__R<R=R>R?tobjectRR^RlRsRzR}R�R�R�RR�R�R�R�tctypes.utilR�t _libnamesR�t startswithtappendtlibnametCDLLtutiltfind_librarytlibthasattrR�tgetattrRtunameRNR�trpcrt4R�R�R�R�R�R�R�R�R�R�R�R�t NAMESPACE_DNSt NAMESPACE_URLt NAMESPACE_OIDtNAMESPACE_X500(((s/usr/lib64/python2.7/uuid.pyt<module>-sx�