B /g^Nsc@svdZddlZddlZddlmZdZddddg\ZZZZ e Z e Z Gd d d eZGd d d Zd dZddZddZddZddZddZddZddZddZdd Zdaaday ddlZWnek rdZYnXd!d"Zd#d$Z d%d&Z!d'd(Z"da#e!eegZ$e eeeeegZ%dd)d*d+Z&da'd8d,d-Z(d.d/Z)d0d1Z*d2d3Z+ed4Z,ed5Z-ed6Z.ed7Z/dS)9aQUUID objects (universally unique identifiers) according to RFC 4122. 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() # 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') N)EnumzKa-Ping Yee zreserved for NCS compatibilityzspecified in RFC 4122z$reserved for Microsoft compatibilityzreserved for future definitionc@seZdZdZdZdZdS)SafeUUIDrN)__name__ __module__ __qualname__ZsafeZunsafeunknownrr/usr/lib64/python3.7/uuid.pyr?src@s6eZdZdZd| B}|d">| d#>B| d$>B|d%>B| B}|dk rZd|krPd&d'>ksZntd(|dk rd&|kr|dksntd)|d*M}|d+O}|d,M}||d->O}||j d.<||j d/<dS)0aLCreate 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'. is_safe is an enum exposed as an attribute on the instance. It indicates whether the UUID has been generated in a way that is safe for multiprocessing applications, via uuid_generate_time_safe(3). 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 stringrzbytes is not a 16-char stringbig)Z byteorderzfields is not a 6-tuplerlz*field 1 out of range (need a 32-bit value)iz*field 2 out of range (need a 16-bit value)z*field 3 out of range (need a 16-bit value)iz*field 4 out of range (need an 8-bit value)z*field 5 out of range (need an 8-bit value)z*field 6 out of range (need a 48-bit value)`P@0iz*int is out of range (need a 128-bit value)zillegal version numberl lLintr ) count TypeErrorreplacestriplen ValueErrorint_ isinstancebytes_AssertionErrorZrepr from_bytes__dict__)selfhexbytesbytes_lefieldsrversionr time_lowtime_midtime_hi_versionclock_seq_hi_variant clock_seq_lownode clock_seqrrr __init__ys^    6   $    z UUID.__init__cCs.|j}|jtjkr$|jj|d<n|d=|SNr )r+Zcopyr rrvaluer,Zstaterrr __getstate__s   zUUID.__getstate__cCs0|j|d|kr t|dntj|jd<dSr:)r+Zupdaterrr<rrr __setstate__s zUUID.__setstate__cCst|tr|j|jkStSNr'r rZNotImplementedr,Zotherrrr __eq__  z UUID.__eq__cCst|tr|j|jkStSr?r@rArrr __lt__rCz UUID.__lt__cCst|tr|j|jkStSr?r@rArrr __gt__rCz UUID.__gt__cCst|tr|j|jkStSr?r@rArrr __le__rCz UUID.__le__cCst|tr|j|jkStSr?r@rArrr __ge__rCz UUID.__ge__cCs t|jSr?)hashrr,rrr __hash__z UUID.__hash__cCs|jSr?rrIrrr __int__rKz UUID.__int__cCsd|jjt|fS)Nz%s(%r))Z __class__rstrrIrrr __repr__rKz UUID.__repr__cCs tddS)NzUUID objects are immutable)r!)r,namer;rrr __setattr__rKzUUID.__setattr__cCsDd|j}d|dd|dd|dd|dd|ddfS)N%032xz%s-%s-%s-%s-%sri rirL)r,r-rrr __str__ s z UUID.__str__cCs|jddS)Nrr)rZto_bytesrIrrr r.z UUID.bytescCs<|j}|ddd|ddd|ddd|ddS)Nrrrrrr.)r,r.rrr r/s(z UUID.bytes_lecCs|j|j|j|j|j|jfSr?)r2r3r4r5r6r7rIrrr r0 z UUID.fieldscCs |jd?S)NrrLrIrrr r2rTz UUID.time_lowcC|jd?d@S)NrrLrIrrr r3"rTz UUID.time_midcCrW)NrrXrLrIrrr r4&rTzUUID.time_hi_versioncCrW)Ni8rLrIrrr r5*rTzUUID.clock_seq_hi_variantcCrW)NrrYrLrIrrr r6.rTzUUID.clock_seq_lowcCs|jd@d>|jd>B|jBS)Nrr)r4r3r2rIrrr time2z UUID.timecCs|jd@d>|jBS)N?r)r5r6rIrrr r87rVzUUID.clock_seqcCs |jd@S)NlrLrIrrr r7<rTz UUID.nodecCs d|jS)NrRrLrIrrr r-@rTzUUID.hexcCs dt|S)Nz urn:uuid:)rNrIrrr urnDrTzUUID.urncCs2|jd@stS|jd@stS|jd@s*tStSdS)Nrll)r RESERVED_NCSRFC_4122RESERVED_MICROSOFTRESERVED_FUTURErIrrr variantHs   z UUID.variantcCs |jtkrt|jd?d@SdS)Nri)rcr`rrIrrr r1Ss z UUID.version)NNNNNN)#rrr__doc__rrr9r=r>rBrDrErFrGrJrMrOrQrSZpropertyr.r/r0r2r3r4r5r6r[r8r7r-r^rcr1rrrr r Es>2T               r c Gsddl}ddl}ddl}||}|dkrP|jd}|j||d}|dkrPdSt|j}d|d<|j|f||j |j |d}|S)Nr)z/sbinz /usr/sbin)pathZCZLC_ALL)stdoutZstderrenv) osshutil subprocessZwhichZpathsepjoinZdictZenvironPopenPIPEZDEVNULL) commandargsrhrirjZ executablerergprocrrr _popenYs    rqcCs |d@ S)Nlrmacrrr _is_universal{rKrtc Csd}yt|f|}|s dS|x|jD]}|}xptt|D]`}|||krPy6|||} t| ddd} t | r| S|p| }WqPt t fk rYqPXqPWq.WWdQRXWnt k rYnX|pdS)N:r) rqsplitrflowerrstripranger$rr"rtr% IndexErrorOSError) rnroZhw_identifiersZ get_indexfirst_local_macrplinewordsiwordrsrrr _find_mac~s*    rcCs2d}x(dD] }td||dd}|r(|SdSWdS)z5Get the hardware address on Unix by running ifconfig.)shwaddrsethersaddress:slladdr)r z-az-avZifconfigcS|dSNrrrrrr rvz#_ifconfig_getnode..Nr)Zkeywordsrorsrrr _ifconfig_getnodes  rcCs tdddgdd}|r|SdS)z/Get the hardware address on Unix by running ip.ZipZlinks link/ethercSrrrrrrr rrvz_ip_getnode..Nrrrrrr _ip_getnodesrcCsddl}ddl}y||}Wntk r6dSXtdd||gdd}|rZ|Stdd||gdd}|r||Stdd|d|gd d}|r|SdS) z0Get the hardware address on Unix by running arp.rNZarpz-ancSdS)Nrrrrrr rrvz_arp_getnode..cSrrrrrrr rrvz(%s)cSr)Nirrrrr rrv)rhsocketZ gethostbynameZ gethostnamer|rZfsencode)rhrZip_addrrsrrr _arp_getnodes  rcCstdddgddS)z4Get the hardware address on Unix by running lanscan.Zlanscanz-aislan0cSr)Nrrrrrr rrvz"_lanscan_getnode..rrrrr _lanscan_getnoder\rc Csd}ytdd}|sdS||j}y|d}Wntk rRdSXx|jD]v}yX|}||}t|dkr|ddkrt | ddd }t |r|S|p|}Wq\tt fk rYq\Xq\WWdQRXWnt k rYnX|pdS) z4Get the hardware address on Unix by running netstat.NZnetstatz-iasAddressirurrvr)rqrfZreadlineryrwZindexr%r$r rr"rtr{r|)r}rprrr~rrsrrr _netstat_getnodes2    rc Cs.ddl}ddl}ddl}d}dddg}y:ddl}|d}|jj|d|d|j dWn YnXx|D]}y$|j |j |dd g|jd d }Wntk rwtYnX|bxZ|jD]P} | d d } |d| rt| ddd} t| r| S|p| }qWWdQRXqtW|p,dS)z   rc s~tdk r dSdatjdkr8ttjdddkr8ntdk rPtj a tj adSyddl ddl dg}tjds~|d x|D]~}yj|}Wntk rwYnXt|d r|jfd d a d aPqt|dr|jd_fdd a PqWy jj}Wnd}YnXt|dt|ddaWn>tk rx}zddl}|d|tWdd}~XYnXdS)zG Try to load platform-specific functions for generating uuids. NFZdarwinZ.ri ZuuidZwinZcuuid_generate_time_safecs d}|}t|j|fSNrrr.raw)_bufferZres)_uuid_generate_time_saferrr _generate_time_safea rTuuid_generate_timecs d}|t|jdfSrr)r)_uuid_generate_timerrr rlrZUuidCreateSequentialZ UuidCreatez/Could not find fallback ctypes uuid functions: )_has_uuid_generate_time_safesysplatformrrhZunameZreleaserw_uuidZgenerate_time_saferZhas_uuid_generate_time_saferZ ctypes.utilZ startswithZappendZCDLLZutilZ find_libraryZ ExceptionZhasattrrrZrestyperZrpcrt4Zgetattr _UuidCreatewarningsZwarnZ ImportWarning)Z _libnamesZlibnameZlibZexcrr)rrrr _load_system_functions3sP&         rcCstt\}}t|djS)zPGet the hardware address on Unix using the _uuid extension module or ctypes.rU)rrr r7) uuid_timeZ_rrr _unix_getnodes rcCs:ddl}t|d}t|dkr6tt|jdjSdS)z1Get the hardware address on Windows using ctypes.rNrrU)rrrrr r(rr7)rrrrr _windll_getnodes   rcCsddl}|ddBS)zGet a random node ID.rNrl)random getrandbits)rrrr _random_getnodes r)getterscCstdk r tStjdkrt}nt}xP|tgD]B}y |aWnw,YnXtdk r,dtkrfdkr,nq,tSq,WdstdtdS)a3Get 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. NZwin32rrFz,_random_getnode() returned invalid value: {})_noderr_NODE_GETTERS_WIN32_NODE_GETTERS_UNIXrr)Zformat)rZgetterrrr getnodes    rcCsttdk rd||kr"dkrdnn>t\}}y t|}Wntk rVtj}YnXt||dSddl}t|d}t|dd}tdk r|tkrtd}|a|dkrddl }| 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.N)r.r rgeAidl@'Hw rilrrXrrZrYrr])r0r1) rrrr%rr r[r_last_timestamprrr)r7r8rZsafely_generatedr r[Z nanosecondsZ timestamprr2r3r4r6r5rrr uuid1s4          rcC8ddlm}||jt|d}t|ddddS)zAGenerate a UUID from the MD5 hash of a namespace UUID and a name.r)md5utf-8Nrrr.r1)hashlibrr.digestr ) namespacerPrrHrrr uuid3 rcCsttdddS)zGenerate a random UUID.rr r)r rhZurandomrrrr uuid4rTrcCr)zCGenerate a UUID from the SHA-1 hash of a namespace UUID and a name.r)sha1rNrrr)rrr.rr )rrPrrHrrr uuid5rrz$6ba7b810-9dad-11d1-80b4-00c04fd430c8z$6ba7b811-9dad-11d1-80b4-00c04fd430c8z$6ba7b812-9dad-11d1-80b4-00c04fd430c8z$6ba7b814-9dad-11d1-80b4-00c04fd430c8)NN)0rdrhrZenumrZ __author__r_r`rarbrr&r.r(rr rqrtrrrrrrrrrrrrZ ImportErrorrrrrrrrrrrrrrZ NAMESPACE_DNSZ NAMESPACE_URLZ NAMESPACE_OIDZNAMESPACE_X500rrrr Z-s\ " $  T   '