zmc
2023-12-22 9fdbf60165db0400c2e8e6be2dc6e88138ac719a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
U
H=®d¸ ã@s’ddlmZddlZddlZddlZddlZddlmZddl    Z    ddl
Z
ddl Z ddl Z ddl Z ddlZddlZddlZddlZddlZddlZddlmZmZddlmZmZmZmZmZddlmZddlm Z m!Z!m"Z"m#Z#dd    l$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-dd
l.m/Z/m0Z0e  1e2¡Z3da4e5ed ƒr<d Z6n*ej7 8d ¡rPdZ6nej7dkrbdZ6ndZ6e 9d¡Z:e:sˆdej;dd…Z:de:Z<e6e:Z=ej$ >¡ ?dd¡ ?dd¡Z@e 9d¡ZAeArÜeA 8d¡rÜeA ?dd¡ZAndd„ZBeBƒZA[Be CdejDejEB¡ZFe CdejDejEB¡ZGe Cd¡ZHe Cd ¡ZId!ZJd"ZKe jLd#krFd$d%„ZMnd&d%„ZMGd'd(„d(eNƒZOeOƒZPGd)d*„d*eNƒZQd+d,„ZReRƒZS[Rd/d-d.„ZTdS)0é)Úunicode_literalsN)Úmessage_from_fileé)Ú __version__ÚDistlibException)Ú    sysconfigÚZipFileÚfsdecodeÚ    text_typeÚfilter)ÚInstalledDistribution)ÚMetadataÚMETADATA_FILENAMEÚWHEEL_METADATA_FILENAMEÚLEGACY_METADATA_FILENAME)    Ú FileOperatorÚ convert_pathÚ    CSVReaderÚ    CSVWriterÚCacheÚcached_propertyÚget_cache_baseÚ read_exportsÚtempdir)ÚNormalizedVersionÚUnsupportedVersionErrorÚpypy_version_infoÚppÚjavaÚjyÚcliÚipÚcpÚpy_version_nodotz%s%séÚpyú-Ú_Ú.ÚSOABIzcpython-cCsRdtg}t d¡r| d¡t d¡r0| d¡t d¡dkrH| d¡d     |¡S)
Nr"ÚPy_DEBUGÚdÚ WITH_PYMALLOCÚmÚPy_UNICODE_SIZEéÚuÚ)Ú
VER_SUFFIXrÚget_config_varÚappendÚjoin)Úparts©r7úPD:\z\workplace\VsCode\pyvenv\venv\Lib\site-packages\pip/_vendor/distlib/wheel.pyÚ _derive_abi<s
 
 
 
 
r9zz
(?P<nm>[^-]+)
-(?P<vn>\d+[^-]*)
(-(?P<bn>\d+[^-]*))?
-(?P<py>\w+\d+(\.\w+\d+)*)
-(?P<bi>\w+)
-(?P<ar>\w+(\.\w+)*)
\.whl$
z7
(?P<nm>[^-]+)
-(?P<vn>\d+[^-]*)
(-(?P<bn>\d+[^-]*))?$
s \s*#![^\r\n]*s^(\s*#!("[^"]+"|\S+))\s+(.*)$s#!pythons    #!pythonwú/cCs|S©Nr7©Úor7r7r8Ú<lambda>^ór>cCs| tjd¡S)Nr:)ÚreplaceÚosÚsepr<r7r7r8r>`r?c@s6eZdZdd„Zdd„Zdd„Zd dd    „Zd
d „ZdS) ÚMountercCsi|_i|_dSr;)Ú impure_wheelsÚlibs©Úselfr7r7r8Ú__init__dszMounter.__init__cCs||j|<|j |¡dSr;)rDrEÚupdate)rGÚpathnameÚ
extensionsr7r7r8Úaddhs
z Mounter.addcCs0|j |¡}|D]\}}||jkr|j|=qdSr;)rDÚpoprE)rGrJrKÚkÚvr7r7r8Úremovels  
zMounter.removeNcCs||jkr|}nd}|Sr;)rE)rGÚfullnameÚpathÚresultr7r7r8Ú find_modulers
zMounter.find_modulecCsj|tjkrtj|}nP||jkr,td|ƒ‚t ||j|¡}||_| dd¡}t|ƒdkrf|d|_    |S)Nzunable to find extension for %sr(rr)
ÚsysÚmodulesrEÚ ImportErrorÚimpZ load_dynamicÚ
__loader__ÚrsplitÚlenÚ __package__)rGrQrSr6r7r7r8Ú load_moduleys
 
 
zMounter.load_module)N)Ú__name__Ú
__module__Ú __qualname__rHrLrPrTr]r7r7r7r8rCcs
 
rCc@sîeZdZdZdZdZd4dd„Zedd    „ƒZed
d „ƒZ    ed d „ƒZ
e dd„ƒZ dd„Z e dd„ƒZdd„Zd5dd„Zdd„Zdd„Zdd„Zd6dd„Zd d!„Zd"d#„Zd$d%„Zd&d'„Zd(d)„Zd*d+„Zd7d,d-„Zd.d/„Zd0d1„Zd8d2d3„ZdS)9ÚWheelz@
    Class to build and install from Wheel files (PEP 427).
    )rrÚsha256NFcCs8||_||_d|_tg|_dg|_dg|_t ¡|_    |dkrRd|_
d|_ |j |_ nât |¡}|rš| d¡}|d|_
|d d    d
¡|_ |d |_|j |_ nštj |¡\}}t |¡}|sÄtd |ƒ‚|rÖtj |¡|_    ||_ | d¡}|d|_
|d|_ |d |_|d  d¡|_|d d¡|_|d d¡|_dS)zB
        Initialise an instance using a (valid) filename.
        r1ÚnoneÚanyNÚdummyz0.1ÚnmZvnr'r&ZbnzInvalid name or filename: %rr%r(ZbiÚar)ÚsignZ should_verifyÚbuildverÚPYVERÚpyverÚabiÚarchrAÚgetcwdÚdirnameÚnameÚversionÚfilenameÚ    _filenameÚNAME_VERSION_REÚmatchÚ    groupdictr@rRÚsplitÚ FILENAME_RErÚabspath)rGrrrhÚverifyr-Úinforor7r7r8rH‘sD
 
 
 
 
 
 
 
ÿ
 
 
 
zWheel.__init__cCs^|jrd|j}nd}d |j¡}d |j¡}d |j¡}|j dd¡}d|j|||||fS)zJ
        Build and return a filename from the various components.
        r&r1r(r'z%s-%s%s-%s-%s-%s.whl)rir5rkrlrmrqr@rp)rGrirkrlrmrqr7r7r8rrºs    
ÿzWheel.filenamecCstj |j|j¡}tj |¡Sr;)rArRr5rorrÚisfile)rGrRr7r7r8ÚexistsËsz Wheel.existsccs4|jD](}|jD]}|jD]}|||fVqqqdSr;)rkrlrm)rGrkrlrmr7r7r8ÚtagsÐs
 
 
z
Wheel.tagsc Cstj |j|j¡}d|j|jf}d|}t d¡}t    |dƒÀ}| 
|¡}|d  dd¡}t dd    „|Dƒƒ}t tg}    d}
|    D]f} zLt || ¡} | | ¡,} || ƒ}t|d
}
|
rÀW5QR£WqäW5QRXWq|tk
ràYq|Xq||
sútd d  |    ¡ƒ‚W5QRX|
S) Nú%s-%sú %s.dist-infoúutf-8Úrú Wheel-Versionr(rcSsg|] }t|ƒ‘qSr7©Úint©Ú.0Úir7r7r8Ú
<listcomp>àsz"Wheel.metadata.<locals>.<listcomp>)Úfileobjz8Invalid wheel, because metadata is missing: looked in %sz, )rArRr5rorrrprqÚcodecsÚ    getreaderrÚget_wheel_metadatarwÚtuplerrÚ    posixpathÚopenr ÚKeyErrorÚ
ValueError)rGrJÚname_verÚinfo_dirÚwrapperÚzfÚwheel_metadataÚwvÚ file_versionÚfnsrSÚfnÚmetadata_filenameÚbfÚwfr7r7r8Úmetadata×s2
 
 
ÿzWheel.metadatac    CsXd|j|jf}d|}t |d¡}| |¡}t d¡|ƒ}t|ƒ}W5QRXt|ƒS)Nrr€ÚWHEELr)    rprqrr5rr‹rŒrÚdict)rGr–r“r”rœrržÚmessager7r7r8r÷s  zWheel.get_wheel_metadatac    Cs6tj |j|j¡}t|dƒ}| |¡}W5QRX|S)Nr‚)rArRr5rorrrr)rGrJr–rSr7r7r8r{s z
Wheel.infoc CsÔt |¡}|r|| ¡}|d|…||d…}}d| ¡krBt}nt}t |¡}|rfd| ¡d}nd}||}||}nT| d¡}| d¡}    |dks ||    kr¦d}
n|||d…d    krÀd    }
nd}
t|
|}|S)
Nspythonwó éÿÿÿÿr?ó ó
rr$s
)    Ú
SHEBANG_REruÚendÚlowerÚSHEBANG_PYTHONWÚSHEBANG_PYTHONÚSHEBANG_DETAIL_REÚgroupsÚfind) rGÚdatar-r¨ÚshebangZdata_after_shebangZshebang_pythonÚargsZcrÚlfZtermr7r7r8Úprocess_shebangs,
 
 
 
 
 zWheel.process_shebangcCsh|dkr|j}ztt|ƒ}Wn tk
r<td|ƒ‚YnX||ƒ ¡}t |¡ d¡     d¡}||fS)NzUnsupported hash algorithm: %ró=Úascii)
Ú    hash_kindÚgetattrÚhashlibÚAttributeErrorrÚdigestÚbase64Úurlsafe_b64encodeÚrstripÚdecode)rGr¯r¶ÚhasherrSr7r7r8Úget_hash%s zWheel.get_hashc    CsVt|ƒ}ttj ||¡ƒ}| |ddf¡t|ƒ}|D]}| |¡q8W5QRXdS)Nr1)ÚlistÚto_posixrArRÚrelpathr4rÚwriterow)rGÚrecordsÚ record_pathÚbaseÚpÚwriterÚrowr7r7r8Ú write_record0s 
zWheel.write_recordc
Cs®g}|\}}tt|jƒ}|D]P\}}    t|    dƒ}
|
 ¡} W5QRXd| | ¡} tj |    ¡} |     || | f¡qtj 
|d¡}    |  ||    |¡t tj 
|d¡ƒ}|     ||    f¡dS)NÚrbz%s=%sÚRECORD) r·r¸r¶rÚreadrÀrArRÚgetsizer4r5rËrÂ)rGr{ÚlibdirÚ archive_pathsrÅÚdistinfor”r¿ÚaprÈÚfr¯rºÚsizer7r7r8Ú write_records8s    zWheel.write_recordsc    CsFt|dtjƒ.}|D]"\}}t d||¡| ||¡qW5QRXdS)NÚwzWrote %s to %s in wheel)rÚzipfileÚ ZIP_DEFLATEDÚloggerÚdebugÚwrite)rGrJrÑr–rÓrÈr7r7r8Ú    build_zipHs zWheel.build_zipc" s’|dkr i}tt‡fdd„dƒƒd}|dkrFd}tg}tg}tg}nd}tg}d    g}d
g}| d |¡|_| d |¡|_| d |¡|_    ˆ|}    d|j
|j f}
d|
} d|
} g} dD]Þ}|ˆkrÄq¶ˆ|}t j  |¡r¶t  |¡D]°\}}}|D] }tt j  ||¡ƒ}t j  ||¡}tt j  | ||¡ƒ}|  ||f¡|dkrð| d¡sðt|dƒ}| ¡}W5QRX| |¡}t|dƒ}| |¡W5QRXqðqâq¶|    }d}t  |¡D]´\}}}||kr t|ƒD]8\}}t|ƒ}| d¡rÄt j  ||¡}||=qþqÄ|s tdƒ‚|D]H}t|ƒ d¡r(qt j  ||¡}tt j  ||¡ƒ}|  ||f¡qq¨t  |¡}|D]B}|dkrltt j  ||¡ƒ}tt j  | |¡ƒ}|  ||f¡qld|p¼|jdtd|g}|jD] \}}}| d|||f¡qÔt j  |d¡}t|dƒ}| d  |¡¡W5QRXtt j  | d¡ƒ}|  ||f¡d!d"„} t | | d#} | !|| f|    | ¡t j  |j"|j#¡}!| $|!| ¡|!S)$z‰
        Build a wheel from files in specified paths, and use any specified tags
        when determining the name of the wheel.
        Ncs|ˆkSr;r7r<©Úpathsr7r8r>Vr?zWheel.build.<locals>.<lambda>)ÚpurelibÚplatlibrráÚfalseÚtruercrdrkrlrmrú%s.datar€)r¯ÚheadersÚscriptsræú.exerÌÚwbú
.dist-infoz(.dist-info directory expected, not found)z.pycz.pyo)rÍÚ    INSTALLERZSHAREDr zWheel-Version: %d.%dzGenerator: distlib %szRoot-Is-Purelib: %sz Tag: %s-%s-%sr r×Ú
cSs*|d}| d¡}d|kr"|d7}||fS)Nrr:réi')Úcount)ÚtrÓÚnr7r7r8Úsorter²s
 
zWheel.build.<locals>.sorter)Úkey)%rÁr ÚIMPVERÚABIÚARCHrjÚgetrkrlrmrprqrArRÚisdirÚwalkr    r5rÃrÂr4ÚendswithrrÎr³rÜÚ    enumerateÚAssertionErrorÚlistdirÚ wheel_versionrr~ÚsortedrÖrorrrÝ)"rGrßr~rûZlibkeyÚis_pureZ default_pyverZ default_abiZ default_archrÐr“Údata_dirr”rÑrðrRÚrootÚdirsÚfilesr›rÈÚrprÓrÔr¯rÒrˆÚdnr—rkrlrmrïrJr7rÞr8ÚbuildNsš  
 
 
 
 
ý   z Wheel.buildcCs
| d¡S)zl
        Determine whether an archive entry should be skipped when verifying
        or installing.
        )r:z /RECORD.jws)r÷)rGÚarcnamer7r7r8Ú
skip_entryÂszWheel.skip_entrycC Ksl|j}| d¡}| dd¡}| dd¡}tj |j|j¡}d|j|jf}    d|    }
d|    } t     | t
¡} t     | d¡} t     | d    ¡}t   d
¡}t |d ƒÎ}| | ¡}||ƒ}t|ƒ}W5QRX|d  d d¡}tdd„|Dƒƒ}||jkrø|rø||j|ƒ|ddkr|d}n|d}i}| |¡8}t|d"}|D]}|d}|||<q8W5QRXW5QRXt     |
d¡}t     | d¡}t     |
dd¡}t|d}d|_tj } g}!t ¡}"|"|_d|_z”zb| ¡D]´}#|#j}$t|$t ƒrè|$}%n
|$ !d
¡}%| "|%¡rqÊ||%}|dr4t#|#j$ƒ|dkr4t%d|%ƒ‚|dr–|d dd¡\}&}'| |$¡}| &¡}(W5QRX| '|(|&¡\})}*|*|'kr–t%d|$ƒ‚|r¼|% (||f¡r¼t) *d |%¡qÊ|% (|¡oÒ|% +d!¡ }+|% (|¡r
|% d"d¡\})},}-tj ||,t,|-ƒ¡}.n$|%| |fkrqÊtj |t,|%ƒ¡}.|+s
| |$¡}| -||.¡W5QRX|! .|.¡|s´|dr´t|.d#ƒ4}| &¡}(| '|(|&¡\})}/|/|*krªt%d$|.ƒ‚W5QRX| r~|. +d%¡r~z|j/|.|d&}0|! .|0¡Wn$t0k
rt)j1d'dd(YnXnttj 2t,|$ƒ¡}1tj |"|1¡}2| |$¡}| -||2¡W5QRXtj |.¡\}3}1|3|_| 3|1¡}4| 4|4¡|! 5|4¡qÊ|ršt) *d)¡d}5ntd}6|j6d }|d*kr€t     | d+¡}7zž| |7¡}t7|ƒ}8W5QRXi}6d,D]r}9d-|9}:|:|8kræi|6d.|9<};|8|: 8¡D]<}<d/|<j9|<j:f}=|<j;rH|=d0d1 |<j;¡7}=|=|;|<j<qqæWn t0k
r|t) 1d2¡YnXndzB| | ¡.}||ƒ}t< =|¡ d3¡}6|6r¶|6 d4¡}6W5QRXWn t0k
rât) 1d5¡YnX|6r®|6 d6i¡}>|6 d7i¡}?|>s|?r®| dd¡}@tj >|@¡s0t?d8ƒ‚|@|_|> @¡D]*\}:}<d9|:|<f}A| 3|A¡}4| 4|4¡q>|?r®d:di}B|? @¡D],\}:}<d9|:|<f}A| 3|A|B¡}4| 4|4¡q€tj || ¡}tA|ƒ}5tB|ƒ}|d=|d=||d;<|5 C||¡}|rü|! .|¡|5 D|!|d<|¡|5WW¢<W5QR£St0k
rLt) Ed=¡| F¡‚YnXW5t |"¡XW5QRXdS)>a~
        Install a wheel to the specified paths. If kwarg ``warner`` is
        specified, it should be a callable, which will be called with two
        tuples indicating the wheel version of this software and the wheel
        version in the file, if there is a discrepancy in the versions.
        This can be used to issue any warnings to raise any exceptions.
        If kwarg ``lib_only`` is True, only the purelib/platlib files are
        installed, and the headers, scripts, data and dist-info metadata are
        not written. If kwarg ``bytecode_hashed_invalidation`` is True, written
        bytecode will try to use file-hash based invalidation (PEP-552) on
        supported interpreter versions (CPython 2.7+).
 
        The return value is a :class:`InstalledDistribution` instance unless
        ``options.lib_only`` is True, in which case the return value is ``None``.
        ÚwarnerÚlib_onlyFZbytecode_hashed_invalidationrrär€r rÍrr‚rƒr(rcSsg|] }t|ƒ‘qSr7r„r†r7r7r8r‰øsz!Wheel.install.<locals>.<listcomp>zRoot-Is-Purelibrãràrá©Ústreamrr1ræ)Údry_runTNr$úsize mismatch for %sú=údigest mismatch for %szlib_only: skipping %srçr:rÌzdigest mismatch on write for %sz.py)Úhashed_invalidationzByte-compilation failed)Úexc_infozlib_only: returning Nonez1.0zentry_points.txt)ÚconsoleÚguiz
%s_scriptszwrap_%sz%s:%sz [%s]ú,zAUnable to read legacy script metadata, so cannot generate scriptsrKzpython.commandsz8Unable to read JSON metadata, so cannot generate scriptsZ wrap_consoleZwrap_guizValid script path not specifiedz%s = %srÚlibÚprefixzinstallation failed.)Gr rôrArRr5rorrrprqrrr‹rŒrrrrwrŽrûrrÚrecordrUÚdont_write_bytecodeÚtempfileÚmkdtempÚ
source_dirÚ
target_dirÚshutilÚrmtreeÚinfolistÚ
isinstancer
r¾rÚstrÚ    file_sizerrÎrÀÚ
startswithrÚrÛr÷rÚ copy_streamr4Ú byte_compileÚ    ExceptionÚwarningÚbasenameÚmakeÚset_executable_modeÚextendr{rÚvaluesrÚsuffixÚflagsÚjsonÚloadrõr’Úitemsr r¡Zwrite_shared_locationsZwrite_installed_filesÚ    exceptionÚrollback)CrGrßÚmakerÚkwargsr rrZbc_hashed_invalidationrJr“rþr”Ú metadata_nameÚwheel_metadata_nameÚ record_namer•r–Úbwfržr¢r˜r™rÐrÅrÚreaderrÊrÈZdata_pfxZinfo_pfxZ
script_pfxÚfileopZbcZoutfilesÚworkdirÚzinforÚ    u_arcnameÚkindÚvaluer¯r'rºZ    is_scriptÚwhererÚoutfileZ    newdigestZpycr›ZworknamerÚ    filenamesÚdistÚcommandsÚepZepdatarðrNr+rOÚsÚconsole_scriptsÚ gui_scriptsZ
script_dirÚscriptÚoptionsr7r7r8ÚinstallÒsT
 
 
     
 
 ÿ
 
ÿ  
ÿ  
 
þÿÿ 
 
 
 
 
 
 
 
 ÿ
 z Wheel.installcCs8tdkr4tj tƒtdƒdtjdd…¡}t|ƒatS)Nz dylib-cachez%s.%sr$)    ÚcacherArRr5rr rUÚ version_infor)rGrÇr7r7r8Ú_get_dylib_cache¸s ÿzWheel._get_dylib_cachec
Cshtj |j|j¡}d|j|jf}d|}t |d¡}t     d¡}g}t
|dƒ}zð|  |¡Ü}||ƒ}    t   |    ¡}
| ¡} |  |¡} tj | j| ¡} tj | ¡sªt | ¡|
 ¡D]‚\}}tj | t|ƒ¡}tj |¡sÞd}n6t |¡j}tj |¡}| |¡}tj|jŽ}||k}|r&| || ¡| ||f¡q²W5QRXWntk
rXYnXW5QRX|S)Nrr€Z
EXTENSIONSrr‚T)rArRr5rorrrprqrr‹rŒrrr.r/rNÚ prefix_to_dirrÇrõÚmakedirsr0rr}ÚstatÚst_mtimeÚdatetimeÚ fromtimestampÚgetinfoÚ    date_timeÚextractr4r‘)rGrJr“r”rr•rSr–rržrKrLrZ
cache_baserprÃÚdestrWZ    file_timer{Z
wheel_timer7r7r8Ú_get_extensionsÁs> 
 
 
 
 
  zWheel._get_extensionscCst|ƒS)zM
        Determine if a wheel is compatible with the running system.
        )Ú is_compatiblerFr7r7r8rZãszWheel.is_compatiblecCsdS)zP
        Determine if a wheel is asserted as mountable by its metadata.
        Tr7rFr7r7r8Ú is_mountableészWheel.is_mountablecCs´tj tj |j|j¡¡}| ¡s2d|}t|ƒ‚| ¡sJd|}t|ƒ‚|t    jkrbt
  d|¡nN|rtt    j  |¡nt    j  d|¡| ¡}|r°tt    jkr¤t    j  t¡t ||¡dS)Nz)Wheel %s not compatible with this Python.z$Wheel %s is marked as not mountable.z%s already in pathr)rArRryr5rorrrZrr[rUrÚrÛr4ÚinsertrYÚ_hookÚ    meta_pathrL)rGr4rJÚmsgrKr7r7r8Úmountïs"
 
 z Wheel.mountcCsrtj tj |j|j¡¡}|tjkr2t d|¡n<tj     |¡|t
j krRt
     |¡t
j snt
tj krntj      t
¡dS)Nz%s not in path) rArRryr5rorrrUrÚrÛrPr]rDr^)rGrJr7r7r8Úunmounts
 
 
 
z Wheel.unmountc Cstj |j|j¡}d|j|jf}d|}d|}t |t¡}t |d¡}t |d¡}t     
d¡}t |dƒŽ}    |      |¡}
||
ƒ} t | ƒ} W5QRX| d d    d
¡} td d „| Dƒƒ}i}|      |¡6}t|d  }|D]}|d}|||<qÖW5QRXW5QRX|     ¡D]ì}|j}t|tƒr$|}n
| d¡}| d¡}d|krNtd|ƒ‚| |¡r^q||}|drt|jƒ|dkrtd|ƒ‚|d
r|d
 dd
¡\}}|      |¡}| ¡}W5QRX| ||¡\}}||krtd|ƒ‚qW5QRXdS)Nrrär€r rÍrr‚rƒr(rcSsg|] }t|ƒ‘qSr7r„r†r7r7r8r‰!sz Wheel.verify.<locals>.<listcomp>r    rr:ú..úinvalid entry in wheel: %rr$r r r)rArRr5rorrrprqrrr‹rŒrrrrwrŽrrrr
r¾rrr r!rÎrÀ)rGrJr“rþr”r5r6r7r•r–r8ržr¢r˜r™rÅrr9rÊrÈr<rr=r>r?r¯r'rºr7r7r8rzs\   
 
 
 
ÿ ÿ
 
ÿz Wheel.verifyc
KsØdd„}dd„}tj |j|j¡}d|j|jf}d|}t |d¡}    tƒ€}
t    |dƒ|} i} |  
¡D]h} | j}t |t ƒr‚|}n
|  d    ¡}||    kr–qhd
|krªtd |ƒ‚|  | |
¡tj |
t|ƒ¡}|| |<qhW5QRX|| |ƒ\}}|| f|Ž}|rÊ|| |ƒ\}}|r$||kr$|||ƒ|d krNtjd d|
d\}}t |¡n*tj |¡shtd|ƒ‚tj ||j¡}t|  ¡ƒ}tj |
|¡}||f}| ||
|¡| ||¡|d krÊt ||¡W5QRX|S)a‘
        Update the contents of a wheel in a generic way. The modifier should
        be a callable which expects a dictionary argument: its keys are
        archive-entry paths, and its values are absolute filesystem paths
        where the contents the corresponding archive entries can be found. The
        modifier is free to change the contents of the files pointed to, add
        new entries and remove entries, before returning. This method will
        extract the entire contents of the wheel to a temporary location, call
        the modifier, and then use the passed (and possibly updated)
        dictionary to write a new wheel. If ``dest_dir`` is specified, the new
        wheel is written there -- otherwise, the original wheel is overwritten.
 
        The modifier should return True if it updated the wheel, else False.
        This method returns the same value the modifier returns.
        cSsHd}}d|tf}||kr$d|}||kr@||}t|dj}||fS)Nz%s/%sz %s/PKG-INFO©rR)rr rq)Úpath_mapr”rqrRrðr7r7r8Ú get_versionYs  z!Wheel.update.<locals>.get_versioncSsàd}z|t|ƒ}| d¡}|dkr*d|}nTdd„||dd… d¡Dƒ}|dd7<d    |d|…d d
d „|Dƒ¡f}Wn tk
r t d |¡YnX|rÜt|d }||_|     t
¡}|j ||dt d||¡dS)Nr&rz%s+1cSsg|] }t|ƒ‘qSr7r„)r‡rFr7r7r8r‰ksz8Wheel.update.<locals>.update_version.<locals>.<listcomp>rr(r¤z%s+%scss|]}t|ƒVqdSr;)r r†r7r7r8Ú    <genexpr>nsz7Wheel.update.<locals>.update_version.<locals>.<genexpr>z0Cannot update non-compliant (PEP-440) version %rrd)rRÚlegacyzVersion updated from %r to %r) rr®rwr5rrÚrÛr rqr÷rrÜ)rqrRÚupdatedrOrˆr6Zmdrhr7r7r8Úupdate_versioncs.
 
  ÿ
ÿ
 
 
ÿz$Wheel.update.<locals>.update_versionrr€rÍr‚rrbrcNz.whlz wheel-update-)r,rÚdirzNot a directory: %r)rArRr5rorrrprqrrrrrr
r¾rrWrrÚmkstempÚcloserõrÁr0rÖrÝrÚcopyfile)rGÚmodifierÚdest_dirr4rfrjrJr“r”r7r;r–rer<rr=rRZoriginal_versionr'ÚmodifiedÚcurrent_versionÚfdÚnewpathrÑrÒr{r7r7r8rIHs\
 
 
 
ÿ  
 
þ
 
z Wheel.update)NFF)N)NN)F)N)r^r_r`Ú__doc__rûr¶rHÚpropertyrrr}r~rrŸrr{r³rÀrËrÖrÝrrrKrNrYrZr[r`rarzrIr7r7r7r8ra‰s@
)
 
 
 
    
 
 
tg    "
 8rac    Csxtg}td}ttjddddƒD]}| d |t|ƒg¡¡q$g}t ¡D]*\}}}|     d¡rN| | 
dd¡d¡qN|  ¡t dkr–|  dt ¡| d¡g}tg}tjd    krŽt d
t¡}|rŽ| ¡\}    }}}
t|ƒ}|
g} |
d krø|  d ¡|
d kr |  d¡|
dkr |  d¡|
dkr4|  d¡|
dkrH|  d¡|dkrŽ| D]*} d|    ||| f} | tkrV| | ¡qV|d8}qH|D]0}|D]$}
| d t|df¡||
f¡qšq’t|ƒD]L\}}| d t|f¡ddf¡|dkrÌ| d t|df¡ddf¡qÌt|ƒD]L\}}| d d|f¡ddf¡|dkr"| d d|df¡ddf¡q"t|ƒS)zG
    Return (pyver, abi, arch) tuples compatible with this Python.
    rrr¤r1z.abir(r$rcÚdarwinz(\w+)_(\d+)_(\d+)_(\w+)$)Úi386ÚppcÚfat)rxryÚx86_64Zfat3)Úppc64r{Úfat64)rxr{Úintel)rxr{r~ryr|Ú    universalz %s_%s_%s_%srdr%)r2ÚrangerUrMr4r5r rXZ get_suffixesr"rwÚsortròr\róÚplatformÚrerur­r…Ú
IMP_PREFIXrøÚset)ÚversionsÚmajorÚminorÚabisr,r'rSÚarchesr-rprmÚmatchesrurFrlrˆrqr7r7r8Úcompatible_tags­s`
 
 
 
 
 
 
 
 
 
 
 
 
 &
"
"rŒcCs\t|tƒst|ƒ}d}|dkr"t}|D]0\}}}||jkr&||jkr&||jkr&d}qXq&|S)NFT)rraÚCOMPATIBLE_TAGSrkrlrm)Úwheelr~rSÚverrlrmr7r7r8rZðs
rZ)N)UÚ
__future__rr»r‹rSÚdistutils.utilÚ    distutilsÚemailrr¸rXr.ÚloggingrArrƒrrUrrØr1rrÚcompatrrr    r
r Zdatabaser rŸr rrrÚutilrrrrrrrrrrqrrÚ    getLoggerr^rÚrLÚhasattrr„r‚r"r3r2rMrjrñÚ get_platformr@róròr9ÚcompileÚ
IGNORECASEÚVERBOSErxrtr§r¬r«rªrBrÂÚobjectrCr]rarŒrrZr7r7r7r8Ú<module>sŠ   ,
 
 
    
ø
 
ü
 
 
#*>