idzddlmZddlZddlZddlZddlmZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlZddlZddlmZmZddlmZmZmZmZmZddlmZddlmZmZmZm Z dd l!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+dd l,m-Z-m.Z.e j/e0Z1da2e3ed rd Z4n-ej56d rdZ4nej5dkrdZ4ndZ4ej7dZ8e8sdej9ddzZ8de8zZ:e4e8zZ;e+<dd<ddZ=ej7dZ>e>rEe>6dr0e><dd?ddZ>ndZ@e@Z>[@e jAde jBe jCzZDe jAde jBe jCzZEe jAdZFe jAdZGd ZHd!ZIe jJd"krd#ZKnd$ZKej9dd%krddlLZLn dZLddlMZNddlOZNd&ZPd'ZQGd(d)eRZSeSZTGd*d+eRZUd,ZVd-ZWeWZX[Wd/d.ZYdS)0)unicode_literalsN)message_from_file) __version__DistlibException) sysconfigZipFilefsdecode text_typefilter)InstalledDistribution)MetadataMETADATA_FILENAMEWHEEL_METADATA_FILENAMELEGACY_METADATA_FILENAME) FileOperator convert_path CSVReader CSVWriterCachecached_propertyget_cache_base read_exportstempdir get_platform)NormalizedVersionUnsupportedVersionErrorpypy_version_infoppjavajycliipcppy_version_nodotz%s%spy-_.SOABIzcpython-cdtg}tjdr|dtdkrt jdd}|dkrvtjd}|d}|r|d|d krAtjd }|d ks|%t jd kr|d d|S)Nr$Py_DEBUGdr&) WITH_PYMALLOCTm)r/r/Py_UNICODE_SIZEiu) VER_SUFFIXrget_config_varappend IMP_PREFIXsys version_info maxunicodejoin)partsviwpmuss B/opt/cloudlinux/venv/lib/python3.11/site-packages/distlib/wheel.py _derive_abirD;sz"  #J / /  LL      !"1"%BF{{.??;C&LL%%%;;"12CDDBQww2:#.H2L2L S)))wwu~~zz (?P[^-]+) -(?P\d+[^-]*) (-(?P\d+[^-]*))? -(?P\w+\d+(\.\w+\d+)*) -(?P\w+) -(?P\w+(\.\w+)*) \.whl$ z7 (?P[^-]+) -(?P\d+[^-]*) (-(?P\d+[^-]*))?$ s \s*#![^\r\n]*s^(\s*#!("[^"]+"|\S+))\s+(.*)$s#!pythons #!pythonw/c|SNos rCrLesrEcB|tjdS)NrF)replaceosseprJs rCrLrLgs263//rEr/cltrdtjDStjjS)Ncg|] }|d S)rrI.0ss rC z!_get_suffixes..rs111!111rE)imp get_suffixes importlib machineryEXTENSION_SUFFIXESrIrErC _get_suffixesr\ps3 611c.001111"55rEctrtj||Stj||}tj|}|t j|<|j ||SrH) rW load_dynamicrYutilspec_from_file_locationmodule_from_specr;modulesloader exec_module)namepathspecmodules rC _load_dynamicrivsp d+++~55dDAA0066" D ''' rEc.eZdZdZdZdZddZdZdS)Mounterc"i|_i|_dSrH) impure_wheelslibsselfs rC__init__zMounter.__init__s rEcN||j|<|j|dSrH)rmrnupdate)rppathname extensionss rCaddz Mounter.adds+'18$ $$$$$rEcl|j|}|D]\}}||jvr|j|=dSrH)rmpoprn)rprtrukvs rCremovezMounter.removesJ'++H55  ! !DAqDI~~IaL ! !rENc"||jvr|}nd}|SrH)rn)rpfullnamerfresults rC find_modulezMounter.find_modules ty FFF rEc.|tjvrtj|}ns||jvrtd|zt ||j|}||_|dd}t|dkr |d|_|S)Nzunable to find extension for %sr*rr) r;rbrn ImportErrorri __loader__rsplitlen __package__)rpr}r~r?s rC load_modulezMounter.load_modules s{ " "[*FFty((!"Ch"NOOO"8TYx-@AAF $F OOC++E5zzA~~%*1X" rErH)__name__ __module__ __qualname__rqrvr{rrrIrErCrkrksd%%%!!!      rErkceZdZdZdZdZddZedZedZ ed Z e d Z d Z e d Zd ZddZdZdZdZddZdZdZdZdZdZdZd dZdZdZddZdS)!Wheelz@ Class to build and install from Wheel files (PEP 427). )rrsha256NFc||_||_d|_tg|_dg|_dg|_tj|_ |d|_ d|_ |j |_ dSt|}|r^|d}|d|_ |dd d |_ |d |_|j |_ dStj|\}}t(|}|st+d |z|r$tj||_ ||_ |d}|d|_ |d|_ |d |_|d d|_|dd|_|dd|_dS)zB Initialise an instance using a (valid) filename. r6noneanyNdummyz0.1nmvnr)r(bnzInvalid name or filename: %rr'r*biar)sign should_verifybuildverPYVERpyverabiarchrOgetcwddirnamereversionfilename _filenameNAME_VERSION_REmatch groupdictrNrfsplit FILENAME_RErabspath)rprrverifyr2infors rCrqzWheel.__init__s # W 8G y{{  DI DL!]DNNN%%h//A 2{{2 J #Dz11#s;; $T  !%$&GMM($;$;!%%h//F*,:rrrrrNre)rprrrrrs rCrzWheel.filenames = T]*HHH$$hhtx  xx "",&&sC00)-GGXXX).TTT; ;rEctj|j|j}tj|SrH)rOrfr>rrisfile)rprfs rCexistsz Wheel.existss/w||DL$-88w~~d###rEc#TK|jD]}|jD]}|jD] }|||fV dSrH)rrr)rprrrs rCtagsz Wheel.tagsscZ + +Ex + + I++Dd*****+ + + +rEc tj|j|j}|jd|j}d|z}tjd}t|d5}| |}|d dd}td|D}ttg} d} | D]} tj|| } || 5} || }t#| } | r dddn) dddn #1swxYwYr#t$$rY~wxYw| s%t'd d | z dddn #1swxYwY| S) Nr( %s.dist-infoutf-8r Wheel-Versionr*rc,g|]}t|SrIintrTis rCrVz"Wheel.metadata..!5!5!5Q#a&&!5!5!5rE)fileobjz8Invalid wheel, because metadata is missing: looked in %sz, )rOrfr>rrrercodecs getreaderr get_wheel_metadatartuplerr posixpathopenrKeyError ValueError)rprtname_verinfo_dirwrapperzfwheel_metadatawv file_versionfnsr~fnmetadata_filenamebfwfs rCmetadatazWheel.metadatas\7<< dm<<"iii6!H,"7++ Xs # # Kr!44R88N066sA>>B !5!5"!5!5!566L +,DECF  (1x(D(D%!233"r$WR[[!)"!5!5!5!"! """"""""""""""""""""""""  D K "9;?99S>>"JKKK K+ K K K K K K K K K K K K K K K0 sg%AE8*D4/D( D4E8 D4(D, ,D4/D, 0D43E84 E>E8E*E88E<?E<c(|jd|j}d|z}tj|d}||5}t jd|}t|}dddn #1swxYwYt|S)Nr(rWHEELr) rerrr>rrrrdict)rprrrrrrmessages rCrzWheel.get_wheel_metadatas"iii6!H,%N8W== WW& ' ' ,2*!'**2..B'++G , , , , , , , , , , , , , , ,G}}s-A::A>A>ctj|j|j}t |d5}||}dddn #1swxYwY|S)Nr)rOrfr>rrr r)rprtrr~s rCrz Wheel.infos7<< dm<< Xs # # 1r,,R00F 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 sAA!$A!ct|}|r|}|d|||d}}d|vrt}nt }t |}|rd|dz}nd}||z}||z}n\|d}|d} |dks|| krd} n|||dzd krd } nd} t | z|z}|S) Nspythonw rE  rr&s ) SHEBANG_RErendlowerSHEBANG_PYTHONWSHEBANG_PYTHONSHEBANG_DETAIL_REgroupsfind) rpdatar2rshebangdata_after_shebangshebang_pythonargscrlfterms rCprocess_shebangzWheel.process_shebang%s#   T " "  0%%''C*.tt*d344j'GW]]__,,!0!/!''00A ahhjjn,$t+G//DD5!!B5!!BAvvb26 ?g--"DD D!D(4/D rEc8||j} tt|}n #t$rt d|zwxYw||}t j|d d}||fS)NzUnsupported hash algorithm: %r=ascii) hash_kindgetattrhashlibAttributeErrorrdigestbase64urlsafe_b64encoderstripdecode)rprrhasherr~s rCget_hashzWheel.get_hashCs  I QWi00FF Q Q Q"#Ci#OPP P Q$$&&)&1188>>EEgNN&  s!>ct|}||ddft|5}|D]}|| ddddS#1swxYwYdS)Nr6)listr9rwriterow)rprecords record_patharchive_record_pathwriterrows rC write_recordzWheel.write_recordNsw--+R4555 { # # %v % %$$$$ % % % % % % % % % % % % % % % % % % %sA  A$'A$cdg}|\}}tt|j}|D]\}} t| d5} | } dddn #1swxYwYd|| z} t j| } | || | ft j |d} tt j |d}| || || || fdS)Nrbz%s=%sRECORD) rrrrreadrrOrfgetsizer9r>to_posixr)rprlibdir archive_pathsrdistinforrappfrrsizes rC write_recordszWheel.write_recordsUsO!($.11" / /EBa !vvxx               t}}T222F7??1%%D NNB- . . . . GLL8 , , bgll8X66 7 7 '1b)))b!W%%%%%sAA !A ct|dtj5}|D]7\}}td|||||8 ddddS#1swxYwYdS)NwzWrote %s to %s in wheel)r zipfile ZIP_DEFLATEDloggerdebugwrite)rprtr rr rs rC build_zipzWheel.build_zipes XsG$8 9 9 R&  A 62>>>B                   s;A%%A),A)c  |i}ttfddd}|dkrd}tg}tg}tg}nd}t g}dg}d g}|d ||_|d ||_|d ||_ |} |j d |j } d| z} d| z} g} dD]}|vr|}tj |r_tj|D]I\}}}|D]>}t!tj ||}tj ||}t'tj | ||}| ||f|dkr|dst-|d5}|}dddn #1swxYwY||}t-|d5}||dddn #1swxYwY@K| }d}tj|D]\}}}||krjt5|D]N\}}t!|}|dr%tj ||}||=nO|s Jd|D]}t!|dr%tj ||}t'tj ||}| ||ftj|}|D]w}|dvrqt!tj ||}t'tj | |}| ||fxd|p|jzdt:zd|zg}|jD]$\}}}|d|d |d |%tj |d}t-|d5}|d|dddn #1swxYwYt'tj | d}| ||fd } t?| | !} | || f| | tj |j!|j"}!|#|!| |!S)"z Build a wheel from files in specified paths, and use any specified tags when determining the name of the wheel. Nc |vSrHrI)rKpathss rCrLzWheel.build..ss qEzrE)purelibplatlibrrfalsetruerrrrrr(%s.datar)rheadersscriptsr#.exerwb .dist-infoz(.dist-info directory expected, not found)z.pycz.pyo)r INSTALLERSHAREDrzWheel-Version: %d.%dzGenerator: distlib %szRoot-Is-Purelib: %szTag: rr cV|d}|d}d|vr|dz }||fS)NrrFr&i')count)tr ns rCsorterzWheel.build..sorters71B Ar!!U r7NrE)key)$rr IMPVERABIARCHrgetrrrrerrOrfisdirwalkr r>relpathr r9endswithrrrr enumeratelistdir wheel_versionrrsortedrrrr)"rprrr:libkeyis_pure default_pyver default_abi default_archr rdata_dirrr r/rfrootdirsfilesrrrpr rrr rdnrrrrr.rts" ` rCbuildz Wheel.buildks( <Df11113IJJKKAN Y  G#HM%K 6LLG"GM!(K!7LXXg}55 88E;//HHV\22 v"iii6x'!H, 2 . .C%:Dw}}T"" .)+ . .%D$# . .$RW\\$%;%;<<W__Q55%bgll8S"&E&EFF%,,b!W555)++AJJv4F4F+!%a0!'(vvxx000000000000000#'#7#7#=#=D!%a.! ! ............... .!# . . D$t||'t__EAr!"B{{<00#%7<<b#9#9 G KK!KKKK . .B<<(()9::GLLr**bgooa6677$$b!W----  . 8$$ . .BCCCRW\\(B7788bgll8R8899$$b!W--- #m&It7I J #k 1 !G +  !%  H H E3  ! ! !UUUCCC"F G G G G GLL7 + + !S\\ /Q GGDIIn-- . . . / / / / / / / / / / / / / / / bgll8W55 6 6b!W%%%     }&999  Hh/GGG7<< dm<< x///s6"H H H 3I I I )R<<SSc,|dS)zl Determine whether an archive entry should be skipped when verifying or installing. )rFz /RECORD.jws)r7)rparcnames rC skip_entryzWheel.skip_entrys 4555rEc |j}|d}|dd}|dd}tj|j|j}|jd|j} d| z} d| z} tj| t} tj| d} tj| d }tj d }t|d 5}|| 5}||}t|}d d d n #1swxYwY|d dd}t#d|D}||jkr|r||j||ddkr |d}n|d}i}||5}t'|5}|D]}|d}|||< d d d n #1swxYwYd d d n #1swxYwYtj| d}tj| d}tj| dd}t)|}d|_t,j } g}!t1j}"|"|_d |_ |D]}#|#j}$t;|$t<r|$}%n|$d }%| |%rM||%}|dr0tC|#j"|dkrtGd|%z|dr|ddd\}&}'||$5}|$}(d d d n #1swxYwY|%|(|&\})}*|*|'krtGd|$z|r4|%&||frtN(d|%\|%&|o|%)d  }+|%&|rN|%d!d\})},}-tj||,tU|-}.n5|%| |fvrtj|tU|%}.|+su||$5}|+||.d d d n #1swxYwYtjd"kr tj,|.|#j-d#z d$z|!.|.|sv|drnt|.d%5}|$}(|%|(|&\})}/|/|*krtGd&|.z d d d n #1swxYwY| rq|.)d'r\ |/|.|(}0|!.|0h#t`$r tN1d)d*YwxYwtj2tU|$}1tj|"|1}2||$5}|+||2d d d n #1swxYwYtj|.\}3}1|3|_|3|1}4|4|4|!5|4|rtN(d+d }5n[d }6|j6d }|d,krtj| d-}7 ||75}to|}8d d d n #1swxYwYi}6d.D]t}9d/|9z}:|:|8vriix|6d0|9z<};|8|:8D]D}<||6d9i}?|>s|?r|dd}@tj>|@std:|@|_|>@D]6\}:}<|:d;|<}A|3|A}4|4|47|?rPd||5tjF|"cd d d S#t`$r0tNGd?|HwxYw#tjF|"wxYw#1swxYwYd S)@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``. warnerlib_onlyFbytecode_hashed_invalidationr(r!rrrrrNrr*rc,g|]}t|SrIrrs rCrVz!Wheel.install..rrEzRoot-Is-Purelibr rrstreamrr6r#)dry_runTr&size mismatch for %s=digest mismatch for %szlib_only: skipping %sr$rFposixirzdigest mismatch on write for %sz.py)hashed_invalidationzByte-compilation failed)exc_infozlib_only: returning Nonez1.0zentry_points.txt)consoleguiz %s_scriptszwrap_%s:z [%s],zAUnable to read legacy script metadata, so cannot generate scriptsruzpython.commandsz8Unable to read JSON metadata, so cannot generate scripts wrap_consolewrap_guizValid script path not specifiedz = r[libprefixzinstallation failed.)IrRr3rOrfr>rrrerrrrrr rrrrr:rrrecordr;dont_write_bytecodetempfilemkdtemp source_dir target_dirinfolist isinstancer rrJstr file_sizerrr startswithrrr7r copy_streamchmod external_attrr9 byte_compile Exceptionwarningbasenamemakeset_executable_modeextendrrvaluesrasuffixflagsjsonloadr4ritemsr rwrite_shared_locationswrite_installed_filesshutilrmtree exceptionrollback)CrprmakerkwargsrRrLrMbc_hashed_invalidationrtrrAr metadata_namewheel_metadata_name record_namerrbwfrrrrr rrreaderrrdata_pfxinfo_pfx script_pfxfileopbcoutfilesworkdirzinforI u_arcnamekindvaluerr)r is_scriptwhererEoutfile newdigestpycrworknamerF filenamesdistcommandsepepdatar/ryr.rzrUconsole_scripts gui_scripts script_dirscriptoptionssC rCinstallz Wheel.installs"-H%%::j%00!',JE!R!R7<< dm<<"iii6x'!H,!x1IJJ 'nXw??nXx88 "7++ Xs # #J 'r,-- 0WS\\+B// 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)//Q77B !5!5"!5!5!566L 2222t)<888()V33y)y)G%% )b))))V%))F%( )))))))))))))))) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) !~h33H ~h33H")R@@J"'222F FM,,BH&((G 'E #E a '[[]]K3K3E#nG!'955<$+ $+NN7$;$; y11! !),C1vA#eo"6"6#a&"@"@.046?0@AAA1vC&)!fll3&:&: eWWW---#%7799D---------------$(MM$$=$= 6!U??"248:A4B#C#CC !I$8$8(H9M$N$N! %'> 5""$',,uU|\"=M=M"N"N%)'"2"25"9"9 >>&,&9&9'Nd':'f'f ( 4 4 4 4#,>>>!'/H8<!/!>!>!>!>!>>  W--l7.C.CDD#%7<<#<#<WWW--="..r8<<<==============="$w!7!7B+-($)JJrNN 229===  2222L8LL!;<<<DD $H#'9_#=L#u,,&^H6HII6!#;)5c):):;;;;;;;;;;;;;;;')H'966$03$6#$;;DF$FHY_$=-3AY-=-=-?-?%6%678xxx,J+,7)M,-388AG;L;L1L,LA45!& 6 )666"NN,5666666 F!#!7!7O3%,WS\\+/9R==+<+<\+J+J#+!O/7||&02='>'>!>/9E,(7(=(=(?(?FF167aa);,1JJv,>,> & : :9 E E E E*J+0$.,7,=,=,?,?!J!JDAq:;!!QQ-?F05 670K0KI$*$>$>y$I$I$I$I VX66A033D!KKEi(i(#)E%L33E7CCA+ ***..xx/6888  g&&&UJ 'J 'J 'J 'J 'J 'J 'J 'J     !7888!!!   g&&&&UJ 'J 'J 'J 'J 'J 'J 'J 'J 'J 's6l7 D3' l73D7 7l7:D7 ;B l7H G6* H 6G: :H =G: >H  l7 H l7H B l7 Ck!=N k!N" "k!%N" &Ek!+T k!T k!T A"k!8AW ? k! W k!W k!.,Xk!&Yk!YA&k!,[ k![ k![ B7k!a$_4 a_ a_ Al;ct^tjt t ddt jddz}t|atS)Nz dylib-cachez%s.%sr&) cacherOrfr>rrjr;r<r)rpbases rC_get_dylib_cachezWheel._get_dylib_cachesT =7<< 0 0#m2D2D '#*:2A2*> >@@D$KKE rEc tj|j|j}|jd|j}d|z}tj|d}tj d}g}t|d5} | |5}||} tj | } |} | |} tj| j| } tj| stj| | D]\}}tj| t)|}tj|sd}nftj|j}t0j|}||}t1j|j}||k}|r||| |||f dddn #1swxYwYn#t<$rYnwxYwdddn #1swxYwY|S)Nr(r EXTENSIONSrrT)rOrfr>rrrerrrrr rrzr{r prefix_to_dirrr4makedirsr|rrstatst_mtimedatetime fromtimestampgetinfo date_timeextractr9r)rprtrrrIrr~rrrrurra cache_baserer6destr file_timer wheel_times rC_get_extensionszWheel._get_extensionss7<< dm<<"iii6!H,.<88"7++ Xs # # r WWW%%4 B!%2J 1133E"00::F!#ej&!A!AJ7==440 J///)3)9)9);); 4 4 g!w||J W8M8MNN!w~~d33=&*GG(* (>I(0(9(G(G (R(RI#%::g#6#6D)1):DN)KJ&09&I FH?3 I ?I I I I  I' II'II''I+.I+c t|S)zM Determine if a wheel is compatible with the running system. ) is_compatibleros rCrzWheel.is_compatiblesT"""rEcdS)zP Determine if a wheel is asserted as mountable by its metadata. TrIros rC is_mountablezWheel.is_mountable s trEctjtj|j|j}|sd|z}t||sd|z}t||tjvrt d|dS|r tj |n tj d||}|rTttjvr$tj tt||dSdS)Nz)Wheel %s not compatible with this Python.z$Wheel %s is marked as not mountable.z%s already in pathr)rOrfrr>rrrrrr;rrr9insertr_hook meta_pathrv)rpr9rtmsgrus rCmountz Wheel.mounts>7??27<< dm#L#LMM!!## (=HC"3'' '  "" (88CC"3'' ' sx   LL-x 8 8 8 8 8 -))))8,,,--//J 0 --M((/// (J///// 0 0rEctjtj|j|j}|t jvrtd|dSt j ||tj vrt |tj s9tt j vr(t j tdSdSdS)Nz%s not in path) rOrfrr>rrr;rrr{rrmr)rprts rCunmountz Wheel.unmount(s7??27<< dm#L#LMM 38 # # LL)8 4 4 4 4 4 HOOH % % %5... X&&&& 0CM))M((///// 0 0))rEc.tj|j|j}|jd|j}d|z}d|z}tj|t}tj|d}tj|d}tj d}t|d5} | |5} || } t| } dddn #1swxYwY| dd d } td | D}i}| |5}t!| 5}|D]}|d }|||< dddn #1swxYwYdddn #1swxYwY| D]Q}|j}t%|t&r|}n|d}|d}d|vrt+d|z||rx||}|dr0t/|j|dkrt+d|z|d r|d dd \}}| |5}|}dddn #1swxYwY|||\}}||krt+d|zS ddddS#1swxYwYdS)Nr(r!rrrrrrr*rc,g|]}t|SrIrrs rCrVz Wheel.verify..ErrErPrrF..invalid entry in wheel: %rr&rSrTrU)rOrfr>rrrerrrrrr rrrrrrhrir rrrJrjrkrr)rprtrrArrrrrrrrrrrrrrrrrrIrrrrr)rs rCrz Wheel.verify4sr7<< dm<<"iii6x'!H,!x1IJJ 'nXw??nXx88 "7++ Xs # #* ?r,-- 0WS\\+B// 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)//Q77B !5!5"!5!5!566LG%% )b))))V%))F%( )))))))))))))))) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )  ? ?.gy118 'II 'w 7 7IOOC((199*,79B,CDDD??9--i(q6=c%/22c!f<<*,02;,<===q6?"%a&,,sA"6"6KD%)))R!wwyy))))))))))))))) $ dD 9 9IAv.046=0>???5 ?* ?* ?* ?* ?* ?* ?* ?* ?* ?* ?* ?* ?* ?* ?* ?* ?* ?* ?s.L C+ L +C/ /L 2C/ 3AL F E3' F 3E7 7F :E7 ;F > L  F L F D L J>2 L >K L K 6L  LLc Zd}d}tj|j|j}|jd|j}d|z}tj|d} t5} t|d5} i} | D]} | j}t|tr|}n| d}|| kr=d|vrtd |z| | | tj| t!|}|| |< d d d n #1swxYwY|| |\}}|| fi|}|r3|| |\}}|r||kr ||||/t#jd d | \}}tj|nVtj|std|ztj||j}t+| }tj| |}||f}||| |||||t3j||d d d n #1swxYwY|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. c~dx}}|dt}||vrd|z}||vr||}t|j}||fS)NrFz %s/PKG-INFOrf)rrr)path_maprrrfr/s rC get_versionz!Wheel.update..get_version}sb! !Gd%XX'?'?@C(""#h.h}"---5D= rEc`d} t|}|d}|dkrd|z}nfd||dzddD}|dxxdz cc<|d|ddd |D}n+#t$rt d |YnwxYw|rft| }||_| t}| || t d ||dSdS)Nr(rz%s+1c,g|]}t|SrIrrSs rCrVz8Wheel.update..update_version..sHHHSVVHHHrErr*r+c34K|]}t|VdSrH)rjrs rC z7Wheel.update..update_version..s(1H1HQ#a&&1H1H1H1H1H1HrEz0Cannot update non-compliant (PEP-440) version %rr)rflegacyzVersion updated from %r to %r) rrrr>rrrrrr7rr)rrfupdatedrzrr?mdrs rCupdate_versionz$Wheel.update..update_versionsxG 4%g..LL%%q55$w.GGHHWQUVV_-B-B3-G-GHHHE"IIINIII)0!),1H1H%1H1H1H)H)H)HJG* 4 4 4 *+244444 4 &4((($ '?@@d6222 rrrerrrr rhrir rrrrrdmkstempcloser4rr|rrrcopyfile)rpmodifierdest_dirrrrrtrrrrrrrrIrrforiginal_versionr)modifiedcurrent_versionfdnewpathr r rs rCrsz Wheel.updatelsi" ! ! ! & & &.7<< dm<<"iii6!H,nXx88 YY, 7'3'' /2[[]] / /E#nG!'955<$+ $+NN7$;$;  K// y((.0;=F0GHHHJJug...7<<i1H1HIID*.HY'' / / / / / / / / / / / / / / / /$#.+h"A"A  ax33F33H 7(3 Hh(G(G%":;K(K(K"N?D999#"*"2&:I7>#@#@#@KBHRLLLL7==22Q./Dx/OPPP gll8T]CCG $X^^%5%5 6 6 7<<::)""4-@@@w 666#OGX666Y, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7Zs8*J ;B3D;/ J ;D? ?J D? EJ  J$'J$)NFFrH)NN)F)rrr__doc__r:rrqpropertyrrrrrrrrrrrrrGrJrrrrrrrrrsrIrErCrrsMI'2'2'2'2R;;X; $$X$++X+ _>_ < ! ! ! !%%%&&&    rrrrh666 k'k'k'Z   D###  0000* 0 0 06?6?6?pccccccrErcddl}|}g}|ddkre|ddD]:}||rt |nd;t |}|S)Nrglibcrr*)platformlibc_verrr9isdigitrr)rverr~rUs rC_get_glibc_versionrsOOO     C F 1vQc"" 8 8A MMAIIKK6#a&&&Q 7 7 7 7v MrEc  tg}td}ttjddz ddD]9}|d|t |g:g}tD]F}|dr/|| dddG| tdkr| dt|dg}tg}tjd krtjd t}|r|\}}}} t%|}| g} | d vr| d | d vr| d| dvr| d| dvr| d| dvr| d|dkr=| D]/} |d|d|d| } | tkr|| 0|dz}|dk=|D]} |D]} |dt&|df| | f| dkrhtjdrH| dd} t+}t-|dkr|dkr;|dt&|df| d| zf|dkr;|dt&|df| d| zf|dkr;|dt&|df| d| zf|dt&|df| d|dd|dd| ft/|D]u\}}|dt&|fddf|dkr8|dt&|dfddfvt/|D]k\}}|dd |fddf|dkr3|dd |dfddflt1|S)!zG Return (pyver, abi, arch) tuples compatible with this Python. rrrr6z.abir*r&rdarwinz(\w+)_(\d+)_(\d+)_(\w+)$)i386ppcfat)rrx86_64fat3)ppc64rfat64)rrintel)rrrrr universalr)linuxlinux_)r&z manylinux1_%s)r& zmanylinux2010_%s)r&zmanylinux2014_%s manylinux_rr')r7ranger;r<r9r>rjr\rlrsortr1rr2rrerrrr:rNrrr8set)versionsmajorminorabisrxr~archesr2rermatchesrrUrr?rrs rCcompatible_tagsrs4|H qMEs'*Q.R8866E 3445555 D//11   V $ $ 1 KK S!,,Q/ 0 0 0IIKKK f}} AsKK FVF |x H0$ 7 7  '(xxzz $D%JJEfG&&u%%%000v&&&***w''')))w'''BBB{+++1**$))E)-uuueeeUUCADyy a(((  1**CC C CD MM277J #<==sDI J J Jf}}!8!8!A!A}||Hb11*,,u::?? rww HQK/H'I'I3'6'='?@@@'' rww HQK/H'I'I3'9D'@'BCCC'' rww HQK/H'I'I3'9D'@'BCCCMM277J +D#E#Ess;@888U1XXX;?4$A#BCCC! C* ))NN 7 rww G455vuEFFF 66 MM277J #;<rs(''''' ######   ++++++++CCCCCCCCCCCCCC++++++111111111111!!!!!!!!!!!!!!!!!!!!!!!!@???????  8 $ $  73#$$JJ\V$$JJ\UJJJ %Y %&8 9 9 /#*2A2..J z j |~~c3''//S99iw''3>>* % % ++j$ ' ' - -c 2 21 5CC" +--Cbj]RZ!! "*]RZ !! RZ) * * BJ@AA6S=={HH//HAJJJJ C666   !!!!!f!!!F  h h h h h Fh h h TMMM`"/##      rE