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 krtdtj|dd}|dk r"t|dkr td|\}}} } } } d|ko.d0kns>tdd|koRd1knsbtdd| kovd2knstdd| kod3knstdd| kod4knstdd| kod5knstd| d>| B} |d>|d>B| d>B| d>B| B}|dk rTd|koDd d>knsTtd |dk rd |kord!knstd"|d7M}|d8O}|d:M}||d&>O}||jd'<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_ from_bytes__dict__)selfhexbytesbytes_lefieldsrversiontime_lowtime_midtime_hi_versionclock_seq_hi_variant clock_seq_lownode clock_seqr//usr/lib64/python3.6/uuid.py__init__jsZ   6    $    z UUID.__init__cCst|tr|j|jkStS)N) isinstancerrNotImplemented)r"otherr/r/r0__eq__s  z UUID.__eq__cCst|tr|j|jkStS)N)r2rrr3)r"r4r/r/r0__lt__s  z UUID.__lt__cCst|tr|j|jkStS)N)r2rrr3)r"r4r/r/r0__gt__s  z UUID.__gt__cCst|tr|j|jkStS)N)r2rrr3)r"r4r/r/r0__le__s  z UUID.__le__cCst|tr|j|jkStS)N)r2rrr3)r"r4r/r/r0__ge__s  z UUID.__ge__cCs t|jS)N)hashr)r"r/r/r0__hash__sz UUID.__hash__cCs|jS)N)r)r"r/r/r0__int__sz UUID.__int__cCsd|jjt|fS)Nz%s(%r)) __class____name__str)r"r/r/r0__repr__sz UUID.__repr__cCs tddS)NzUUID objects are immutable)r)r"namevaluer/r/r0 __setattr__szUUID.__setattr__cCsDd|j}d|dd|dd|dd|dd|ddfS)Nz%032xz%s-%s-%s-%s-%sr r)r)r"r#r/r/r0__str__s z UUID.__str__cCs|jjddS)Nrr )rto_bytes)r"r/r/r0r$sz UUID.bytescCs<|j}|ddd|ddd |d d d |ddS) Nrrr r rrrrrrrr)r$)r"r$r/r/r0r%s(z UUID.bytes_lecCs|j|j|j|j|j|jfS)N)r(r)r*r+r,r-)r"r/r/r0r&s z UUID.fieldscCs |jd?S)Nr)r)r"r/r/r0r(sz UUID.time_lowcCs|jd?d@S)Nri)r)r"r/r/r0r)sz UUID.time_midcCs|jd?d@S)Nri)r)r"r/r/r0r*szUUID.time_hi_versioncCs|jd?d@S)N8)r)r"r/r/r0r+szUUID.clock_seq_hi_variantcCs|jd?d@S)Nr rI)r)r"r/r/r0r,szUUID.clock_seq_lowcCs|jd@d>|jd>B|jBS)Nir r)r*r)r()r"r/r/r0time sz UUID.timecCs|jd@d>|jBS)N?r )r+r,)r"r/r/r0r.s zUUID.clock_seqcCs |jd@S)Nl)r)r"r/r/r0r-sz UUID.nodecCs d|jS)Nz%032x)r)r"r/r/r0r#szUUID.hexcCs dt|S)Nz urn:uuid:)r?)r"r/r/r0urnszUUID.urncCs2|jd@stS|jd@stS|jd@s*tStSdS)Nir i@i lll)r RESERVED_NCSRFC_4122RESERVED_MICROSOFTRESERVED_FUTURE)r"r/r/r0variant s   z UUID.variantcCs |jtkrt|jd?d@SdS)Nr)rQrNr)r"r/r/r0r'+s z UUID.version)NNNNNN)r> __module__ __qualname____doc__r1r5r6r7r8r9r;r<r@rCrFpropertyr$r%r&r(r)r*r+r,rJr.r-r#rLrQr'r/r/r/r0r: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)rWrX) osshutil subprocessZwhichpathsepjoindictenvironPopenPIPEZDEVNULL) commandargsr_r`ra executablerYr^procr/r/r0_popen1s    rlc Csyt|f|j}|sdS|x|jD]z}|jjj}xdtt|D]T}|||krLy*|||}t|jddd} | r| SWqLt t fk rYqLXqLWq*WWdQRXWnt k rYnXdS)N:r) rlsplitr\lowerrstriprangerrrr IndexErrorOSError) rhriZhw_identifiersZ get_indexrklinewordsiwordmacr/r/r0 _find_macDs$   rzcCs0d }x&d D]}td||d d }|r |Sq Wd S)z5Get the hardware address on Unix by running ifconfig.hwaddretheraddress:lladdrr-a-avZifconfigcSs|dS)Nrr/)rwr/r/r0bsz#_ifconfig_getnode..N)r{r|r}r~)rrr)rz)keywordsriryr/r/r0_ifconfig_getnode]s  rcCs tdddgdd}|r|SdS)z/Get the hardware address on Unix by running ip.Ziplinks link/ethercSs|dS)Nrr/)rwr/r/r0risz_ip_getnode..N)rz)ryr/r/r0 _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)Nrrr/)rwr/r/r0rvsz_arp_getnode..cSs|dS)Nrr/)rwr/r/r0r{sz(%s)cSs|dS)Nr/)rwr/r/r0rs)r_socketZ gethostbynameZ gethostnamertrzfsencode)r_rZip_addrryr/r/r0 _arp_getnodems rcCstdddgddS)z4Get the hardware address on Unix by running lanscan.Zlanscanz-aislan0cSsdS)Nrr/)rwr/r/r0rsz"_lanscan_getnode..)rzr/r/r/r0_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-iaNsAddressrmrrnr) rlr\readlinerqroindexrrrrrrsrt)rkrvrwrurxryr/r/r0_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 irIr rK)r&r') rrrrrrrJr_last_timestamprrr) r-r.rrJZ nanosecondsZ timestamprr(r)r*r,r+r/r/r0uuid1Ds,     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) namespacerArrr/r/r0uuid3gs   rcCsttjdddS)zGenerate a random UUID.rr)r$r')rr_urandomr/r/r/r0uuid4psrcCs8ddlm}||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)rrArr:r/r/r0uuid5ts rz$6ba7b810-9dad-11d1-80b4-00c04fd430c8z$6ba7b811-9dad-11d1-80b4-00c04fd430c8z$6ba7b812-9dad-11d1-80b4-00c04fd430c8z$6ba7b814-9dad-11d1-80b4-00c04fd430c8)NN)=rUr_ __author__rMrNrOrPrrr$robjectrrlrzrrrrrrrrrrZ ctypes.utilrZ _libnamesr startswithappendZlibnameZCDLLutilZ find_librarylib ExceptionhasattrrunamereleaserorZrpcrt4getattrrrrrrrrrrrrrZ NAMESPACE_DNSZ NAMESPACE_URLZ NAMESPACE_OIDZNAMESPACE_X500r/r/r/r0-szx "           #