3 $f]@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) 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@z*int is out of range (need a 128-bit value)zillegal version numberiiiLintrrrrrliirll l lll) count TypeErrorreplacestriplen ValueErrorint_ isinstancebytes_AssertionErrorrepr from_bytes__dict__)selfhexbytesbytes_lefieldsrversiontime_lowtime_midtime_hi_versionclock_seq_hi_variant clock_seq_lownode clock_seqr3/usr/lib64/python3.6/uuid.py__init__js\   6    $    z UUID.__init__cCst|tr|j|jkStS)N)r rrNotImplemented)r&otherr3r3r4__eq__s  z UUID.__eq__cCst|tr|j|jkStS)N)r rrr6)r&r7r3r3r4__lt__s  z UUID.__lt__cCst|tr|j|jkStS)N)r rrr6)r&r7r3r3r4__gt__s  z UUID.__gt__cCst|tr|j|jkStS)N)r rrr6)r&r7r3r3r4__le__s  z UUID.__le__cCst|tr|j|jkStS)N)r rrr6)r&r7r3r3r4__ge__s  z UUID.__ge__cCs t|jS)N)hashr)r&r3r3r4__hash__sz UUID.__hash__cCs|jS)N)r)r&r3r3r4__int__sz UUID.__int__cCsd|jjt|fS)Nz%s(%r)) __class____name__str)r&r3r3r4__repr__sz UUID.__repr__cCs tddS)NzUUID objects are immutable)r)r&namevaluer3r3r4 __setattr__szUUID.__setattr__cCsDd|j}d|dd|dd|dd|dd|ddfS)Nz%032xz%s-%s-%s-%s-%sr r)r)r&r'r3r3r4__str__s z UUID.__str__cCs|jjddS)Nrr )rto_bytes)r&r3r3r4r(sz UUID.bytescCs<|j}|ddd|ddd |d d d |ddS) Nrrr r rrrrrrrr)r()r&r(r3r3r4r)s(z UUID.bytes_lecCs|j|j|j|j|j|jfS)N)r,r-r.r/r0r1)r&r3r3r4r*s z UUID.fieldscCs |jd?S)Nr)r)r&r3r3r4r,sz UUID.time_lowcCs|jd?d@S)Nri)r)r&r3r3r4r-sz UUID.time_midcCs|jd?d@S)Nri)r)r&r3r3r4r.szUUID.time_hi_versioncCs|jd?d@S)N8)r)r&r3r3r4r/szUUID.clock_seq_hi_variantcCs|jd?d@S)Nr rL)r)r&r3r3r4r0szUUID.clock_seq_lowcCs|jd@d>|jd>B|jBS)Nir r)r.r-r,)r&r3r3r4time sz UUID.timecCs|jd@d>|jBS)N?r )r/r0)r&r3r3r4r2s zUUID.clock_seqcCs |jd@S)Nl)r)r&r3r3r4r1sz UUID.nodecCs d|jS)Nz%032x)r)r&r3r3r4r'szUUID.hexcCs dt|S)Nz urn:uuid:)rB)r&r3r3r4urnszUUID.urncCs2|jd@stS|jd@stS|jd@s*tStSdS)Nir i@i lll)r RESERVED_NCSRFC_4122RESERVED_MICROSOFTRESERVED_FUTURE)r&r3r3r4variant s   z UUID.variantcCs |jtkrt|jd?d@SdS)Nr)rTrQr)r&r3r3r4r++s z UUID.version)NNNNNN)rA __module__ __qualname____doc__r5r8r9r:r;r<r>r?rCrFrIpropertyr(r)r*r,r-r.r/r0rMr2r1r'rOrTr+r3r3r3r4r: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)pathCLC_ALL)stdoutstderrenv)rZr[) osshutil subprocessZwhichpathsepjoindictenvironPopenPIPEZDEVNULL) commandargsrbrcrd executabler\raprocr3r3r4_popen1s    roc Csyt|f|j}|sdS|x|jD]z}|jjj}xdtt|D]T}|||krLy*|||}t|jddd} | r| SWqLt t fk rYqLXqLWq*WWdQRXWnt k rYnXdS)N:r) rosplitr_lowerrstriprangerrrr IndexErrorOSError) rkrlZhw_identifiersZ get_indexrnlinewordsiwordmacr3r3r4 _find_macDs$   r}cCs0d }x&d D]}td||d d }|r |Sq Wd S)z5Get the hardware address on Unix by running ifconfig.hwaddretheraddress:lladdrr-a-avZifconfigcSs|dS)Nrr3)rzr3r3r4bsz#_ifconfig_getnode..N)r~rrr)rrr)r})keywordsrlr|r3r3r4_ifconfig_getnode]s  rcCs tdddgdd}|r|SdS)z/Get the hardware address on Unix by running ip.Ziplinks link/ethercSs|dS)Nrr3)rzr3r3r4risz_ip_getnode..N)r})r|r3r3r4 _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)Nrrr3)rzr3r3r4rvsz_arp_getnode..cSs|dS)Nrr3)rzr3r3r4r{sz(%s)cSs|dS)Nr3)rzr3r3r4rs)rbsocketZ gethostbynameZ gethostnamerwr}fsencode)rbrZip_addrr|r3r3r4 _arp_getnodems rcCstdddgddS)z4Get the hardware address on Unix by running lanscan.Zlanscanz-aislan0cSsdS)Nrr3)rzr3r3r4rsz"_lanscan_getnode..)r}r3r3r3r4_lanscan_getnodesrc"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-iaNsAddressrprrqr) ror_readlinertrrindexrrrrrrvrw)rnryrzrxr{r|r3r3r4_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.Nr)r(rgeAdl@'Hw rlrir irLr rN)r*r+) rrrrr!rrMr_last_timestamprrr) r1r2rrMZ nanosecondsZ timestamprr,r-r.r0r/r3r3r4uuid1Ds,     rcCs<ddlm}||jt|dddj}t|dddd S) zAGenerate a UUID from the MD5 hash of a namespace UUID and a name.r)md5zutf-8F)ZusedforsecurityNrr)r(r+)hashlibrr(digestr) namespacerDrrr3r3r4uuid3gs   rcCsttjdddS)zGenerate a random UUID.rr)r(r+)rrburandomr3r3r3r4uuid4psrcCs8ddlm}||jt|dj}t|ddddS)zCGenerate a UUID from the SHA-1 hash of a namespace UUID and a name.r)sha1zutf-8Nrr)r(r+)rrr(rr)rrDrr=r3r3r4uuid5ts rz$6ba7b810-9dad-11d1-80b4-00c04fd430c8z$6ba7b811-9dad-11d1-80b4-00c04fd430c8z$6ba7b812-9dad-11d1-80b4-00c04fd430c8z$6ba7b814-9dad-11d1-80b4-00c04fd430c8)NN)=rXrb __author__rPrQrRrSrrr(r!objectrror}rrrrrrrrrrZ ctypes.utilrZ _libnamesr startswithappendZlibnameZCDLLutilZ find_librarylib ExceptionhasattrrunamereleaserrrZrpcrt4getattrrrrrrrrrrrrrZ NAMESPACE_DNSZ NAMESPACE_URLZ NAMESPACE_OIDZNAMESPACE_X500r3r3r3r4-szx "           #