3 ^]c@s dZddlZdZddddg\ZZZZeZe Z Gdd d e Z d d Z d d ZddZddZddZddZddZddZddZdZZyddlZddlZddlZdgZejjdsejdxLeD]DZyej ej!j"eZ#Wne$k rwYnXe%e#dre#j&ZPqW[ejd kr@eej'j(j)d!dd"kr@dZy ej*j+Z#WndZ#YnXe,e#d#e,e#d$dZWn YnXd%d&Z-d'd(Z.d)d*Z/da0e.eegZ1e-eeeeegZ2d+d,Z3da4d9d-d.Z5d/d0Z6d1d2Z7d3d4Z8e d5Z9e d6Z:e d7Z;e d8Z>> import uuid # make a UUID based on the host ID and current time >>> uuid.uuid1() # doctest: +SKIP 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() # doctest: +SKIP 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 b'\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') NzKa-Ping Yee zreserved for NCS compatibilityzspecified in RFC 4122z$reserved for Microsoft compatibilityzreserved for future definitionc@seZdZdZd7ddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZeddZeddZeddZedd Zed!d"Zed#d$Zed%d&Zed'd(Zed)d*Zed+d,Zed-d.Zed/d0Zed1d2Zed3d4Zed5d6ZdS)8UUIDaInstances 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) NcCs|||||gjddkr td|dk rl|jddjdd}|jdjdd}t|d krbtd t|d }|dk rt|d krtd |d(dd)|d*d+d,|d-d.d/|dd}|dk rt|d krtdt|tst t |tj |dd}|dk r:t|dkr"td|\}}} } } } d|koFd0knsVtdd|kojd1knsztdd| kod2knstdd| kod3knstdd| kod4knstdd| kod5kns td| d>| B} |d>|d>B| d>B| d>B| B}|dk rld|ko\d d>knsltd |dk rd |kod!knstd"|d7M}|d8O}|d:M}||d&>O}||j d'<dS);amCreate 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: UUID('{12345678-1234-5678-1234-567812345678}') UUID('12345678123456781234567812345678') UUID('urn:uuid:12345678-1234-5678-1234-567812345678') UUID(bytes='\x12\x34\x56\x78'*4) UUID(bytes_le='\x78\x56\x34\x12\x34\x12\x78\x56' + '\x12\x34\x56\x78\x12\x34\x56\x78') UUID(fields=(0x12345678, 0x1234, 0x5678, 0x12, 0x34, 0x567812345678)) UUID(int=0x12345678123456781234567812345678) 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'. NzGone of the hex, bytes, bytes_le, fields, or int arguments must be givenzurn:zuuid:z{}- z$badly formed hexadecimal UUID stringz bytes_le is not a 16-char stringzbytes is not a 16-char stringbig)Z byteorderzfields is not a 6-tuplerz*field 1 out of range (need a 32-bit value)z*field 2 out of range (need a 16-bit value)z*field 3 out of range (need a 16-bit value)z*field 4 out of range (need an 8-bit value)z*field 5 out of range (need an 8-bit value)0z*field 6 out of range (need a 48-bit value)`P@iz*int is out of range (need a 128-bit value)zillegal version numberiiLintrrrrrlrrl l ll) count TypeErrorreplacestriplen ValueErrorint_ isinstancebytes_AssertionErrorZrepr from_bytesZ__dict__)selfhexbytesbytes_lefieldsrversiontime_lowtime_midtime_hi_versionclock_seq_hi_variant clock_seq_lownode clock_seqr2/usr/lib64/python3.6/uuid.py__init__js\   6    $    z UUID.__init__cCst|tr|j|jkStSNr!rrZNotImplementedr%Zotherr2r2r3__eq__  z UUID.__eq__cCst|tr|j|jkStSr5r6r7r2r2r3__lt__r9z UUID.__lt__cCst|tr|j|jkStSr5r6r7r2r2r3__gt__r9z UUID.__gt__cCst|tr|j|jkStSr5r6r7r2r2r3__le__r9z UUID.__le__cCst|tr|j|jkStSr5r6r7r2r2r3__ge__r9z UUID.__ge__cCs t|jSr5)hashrr%r2r2r3__hash__z UUID.__hash__cCs|jSr5rr?r2r2r3__int__rAz UUID.__int__cCsd|jjt|fS)Nz%s(%r))Z __class____name__strr?r2r2r3__repr__rAz UUID.__repr__cCs tddS)NzUUID objects are immutable)r)r%namevaluer2r2r3 __setattr__rAzUUID.__setattr__cCsDd|j}d|dd|dd|dd|dd|ddfS)N%032xz%s-%s-%s-%s-%sr i rirB)r%r&r2r2r3__str__s z UUID.__str__cCs|jjddS)Nrr )rZto_bytesr?r2r2r3r'z UUID.bytescCs<|j}|ddd|ddd |d d d |ddS) Nrrrr rrrrrrrrr')r%r'r2r2r3r(s(z UUID.bytes_lecCs|j|j|j|j|j|jfSr5)r+r,r-r.r/r0r?r2r2r3r) z UUID.fieldscCs |jd?S)Nr rBr?r2r2r3r+rLz UUID.time_lowcC|jd?d@S)Nr rBr?r2r2r3r,rLz UUID.time_midcCrO)NrrPrBr?r2r2r3r-rLzUUID.time_hi_versioncCrO)Ni8rBr?r2r2r3r.rLzUUID.clock_seq_hi_variantcCrO)Nr rQrBr?r2r2r3r/rLzUUID.clock_seq_lowcCs|jd@d>|jd>B|jBS)Nr r)r-r,r+r?r2r2r3time z UUID.timecCs|jd@d>|jBS)N?r )r.r/r?r2r2r3r1rNzUUID.clock_seqcCs |jd@S)NlrBr?r2r2r3r0rLz UUID.nodecCs d|jS)NrJrBr?r2r2r3r&rLzUUID.hexcCs dt|S)Nz urn:uuid:)rEr?r2r2r3urnrLzUUID.urncCs2|jd@stS|jd@stS|jd@s*tStSdS)Nrr i@i rll)r RESERVED_NCSRFC_4122RESERVED_MICROSOFTRESERVED_FUTUREr?r2r2r3variant s   z UUID.variantcCs |jtkrt|jd?d@SdS)Nri)r[rXrr?r2r2r3r*+s z UUID.version)NNNNNN)rDZ __module__Z __qualname____doc__r4r8r:r;r<r=r@rCrFrIrKZpropertyr'r(r)r+r,r-r.r/rSr1r0r&rVr[r*r2r2r2r3r:s8. O              rc Gsddl}ddl}ddl}|j|}|dkrP|jjd}|j||d}|dkrPdSt|j}d|d<|j|f||j |j |d}|S) Nr/sbin /usr/sbin)pathZCZLC_ALL)stdoutZstderrenv)r]r^) osshutil subprocessZwhichZpathsepjoinZdictZenvironPopenPIPEZDEVNULL) commandargsrbrcrdZ executabler_raprocr2r2r3_popen1s    rkc Csyt|f|j}|sdS|x|jD]z}|jjj}xdtt|D]T}|||krLy*|||}t|jddd} | r| SWqLt t fk rYqLXqLWq*WWdQRXWnt k rYnXdS)N:r) rksplitr`lowerrstriprangerrrr IndexErrorOSError) rhriZhw_identifiersZ get_indexrjlinewordsiwordmacr2r2r3 _find_macDs$   rycCs0d }x&d D]}td||d d }|r |Sq Wd S)z5Get the hardware address on Unix by running ifconfig.hwaddretheraddress:lladdrr-a-avZifconfigcS|dSNrr2rvr2r2r3brmz#_ifconfig_getnode..N)rzr{r|r})rr~rry)Zkeywordsrirxr2r2r3_ifconfig_getnode]s  rcCs tdddgdd}|r|SdS)z/Get the hardware address on Unix by running ip.ZipZlinks link/ethercSrrr2rr2r2r3rirmz_ip_getnode..Nr)rxr2r2r3 _ip_getnodefsrcCsddl}ddl}y|j|j}Wntk r6dSXtdd|j|gdd}|rZ|Stdd|j|gdd}|r||Stdd|jd|gd d}|r|SdS) z0Get the hardware address on Unix by running arp.rNZarpz-ancSsdS)Nrrr2rr2r2r3rvrmz_arp_getnode..cSrrr2rr2r2r3r{rmz(%s)cSr)Nir2rr2r2r3rrm)rbsocketZ gethostbynameZ gethostnamersryZfsencode)rbrZip_addrrxr2r2r3 _arp_getnodems rcCstdddgddS)z4Get the hardware address on Unix by running lanscan.Zlanscanz-aislan0cSsdS)Nrr2rr2r2r3rrmz"_lanscan_getnode..rr2r2r2r3_lanscan_getnoderTrc"Csytdd}|sdS||jjjj}y|jd}Wntk rNdSXxt|jD]j}yL|jj}||}t|dkr|jddkrt |j ddd }|r|SWqXtt fk rYqXXqXWWdQRXWnt k rYnXdS) z4Get the hardware address on Unix by running netstat.Znetstatz-iaNsAddressirlrrmr) rkr`ZreadlinerprnZindexrrrrrrrrs)rjrurvrtrwrxr2r2r3_netstat_getnodes,   rc Cs ddl}ddl}ddl}dddg}y:ddl}|jd}|jjj|d|jd|j j dWn YnXx|D]}y$|j |j j |dd g|jd d }Wntk rwpYnX|JxB|jD]8}|jd djj} |jd| rt| jdddSqWWdQRXqpWdS)z||kodknr>tjd}t|tt|jdSddl}t|jd}t|dd}tdk r~|tkr~td}|a|dkrddl }|j d }|d @}|d ?d @}|d ?d@} |d@} |d?d@} |dkrt }t||| | | |fddS)aGenerate 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.NrrMrgeAidl@'Hw rilrrPr rRrQr rU)r)r*) rrrrr"rrSr_last_timestamprrr) r0r1rrSZ nanosecondsZ timestamprr+r,r-r/r.r2r2r3uuid1Ds,     rcC8ddlm}||jt|dj}t|ddddS)zAGenerate a UUID from the MD5 hash of a namespace UUID and a name.r)md5utf-8Nrrr'r*)hashlibrr'digestr) namespacerGrr>r2r2r3uuid3g rcCsttjdddS)zGenerate a random UUID.rrr)rrbZurandomr2r2r2r3uuid4mrLrcCr)zCGenerate a UUID from the SHA-1 hash of a namespace UUID and a name.r)sha1rNrrr)rrr'rr)rrGrr>r2r2r3uuid5qrrz$6ba7b810-9dad-11d1-80b4-00c04fd430c8z$6ba7b811-9dad-11d1-80b4-00c04fd430c8z$6ba7b812-9dad-11d1-80b4-00c04fd430c8z$6ba7b814-9dad-11d1-80b4-00c04fd430c8)NN)=r\rbZ __author__rWrXrYrZrr r'r"ZobjectrrkryrrrrrrrrrrZ ctypes.utilrZ _libnamesrZ startswithZappendZlibnameZCDLLZutilZ find_libraryZlibZ ExceptionZhasattrrZunameZreleasernrZrpcrt4ZgetattrrrrrrrrrrrrrZ NAMESPACE_DNSZ NAMESPACE_URLZ NAMESPACE_OIDZNAMESPACE_X500r2r2r2r3Z-szx "           #