U ʗRez@sddlmZddlZddlZddlZddlmZddlZddlZddl 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 /e0Z1da2e3ed r0d Z4n*ej56d rDdZ4nej5dkrVdZ4ndZ4e7dZ8e8s|dej9ddZ8de8Z:e4e8Z;e+e>re>6dre>nddZ@e@Z>[@e Ade jBe jCBZDe Ade jBe jCBZEe AdZFe Ad ZGd!ZHd"ZIe jJd#kr@d$d%ZKnd&d%ZKej9dd'krbddlLZLndZLddlMZNddlOZNd(d)ZPd*d+ZQGd,d-d-eRZSeSZTGd.d/d/eRZUd0d1ZVd2d3ZWeWZX[Wd6d4d5ZYdS)7)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-cCsdtg}tdr|dtdkrtjdd}|dkrtd}|dkrPd}|r^|d|d krtd }|d ks|dkrtjd kr|d d|S)Nr#Py_DEBUGdr%) WITH_PYMALLOCTm)r-r-Py_UNICODE_SIZEiu) VER_SUFFIXrget_config_varappend IMP_PREFIXsys version_info maxunicodejoin)partsviZwpmusr@/builddir/build/BUILDROOT/alt-python38-pip-22.2.1-2.el8.x86_64/opt/alt/python38/lib/python3.8/site-packages/pip/_vendor/distlib/wheel.py _derive_abi;s       rBzz (?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/cCs|SNr@or@r@rAerGcCs|tjdS)NrC)replaceosseprEr@r@rArGgrHr-cCs"trddtDStjjSdS)NcSsg|] }|dqS)rr@.0sr@r@rA rsz!_get_suffixes..)impZ get_suffixes importlib machineryEXTENSION_SUFFIXESr@r@r@rA _get_suffixespsrTcCsHtrt||Stj||}tj|}|tj|<|j ||SdSrD) rPZ load_dynamicrQutilspec_from_file_locationmodule_from_specr9modulesloader exec_module)namepathspecmoduler@r@rA _load_dynamicvs    r_c@s6eZdZddZddZddZd dd Zd d ZdS) MountercCsi|_i|_dSrD) impure_wheelslibsselfr@r@rA__init__szMounter.__init__cCs||j|<|j|dSrD)rarbupdate)rdpathname extensionsr@r@rAadds z Mounter.addcCs0|j|}|D]\}}||jkr|j|=qdSrD)rapoprb)rdrgrhkvr@r@rAremoves   zMounter.removeNcCs||jkr|}nd}|SrD)rb)rdfullnamer\resultr@r@rA find_modules zMounter.find_modulecCsh|tjkrtj|}nN||jkr,td|t||j|}||_|dd}t|dkrd|d|_|S)Nzunable to find extension for %sr)rr) r9rXrb ImportErrorr_ __loader__rsplitlen __package__)rdrnror=r@r@rA load_modules       zMounter.load_module)N)__name__ __module__ __qualname__rerirmrprvr@r@r@rAr`s  r`c@seZdZdZdZdZd4ddZedd Zed d Z ed d Z e ddZ ddZ e ddZddZd5ddZddZddZddZd6ddZd d!Zd"d#Zd$d%Zd&d'Zd(d)Zd*d+Zd7d,d-Zd.d/Zd0d1Zd8d2d3ZdS)9Wheelz@ Class to build and install from Wheel files (PEP 427). )rrsha256NFcCs8||_||_d|_tg|_dg|_dg|_t|_ |dkrRd|_ d|_ |j |_ nt|}|r|d}|d|_ |dd d |_ |d |_|j |_ ntj|\}}t|}|std ||rtj||_ ||_ |d}|d|_ |d|_ |d |_|d d|_|dd|_|dd|_dS)zB Initialise an instance using a (valid) filename. r4noneanyNdummyz0.1nmZvnr(r'ZbnzInvalid name or filename: %rr&r)Zbiar)signZ should_verifybuildverPYVERpyverabiarchrJgetcwddirnamer[versionfilename _filenameNAME_VERSION_REmatch groupdictrIr\split FILENAME_RErabspath)rdrrverifyr0inforr@r@rAresD            zWheel.__init__cCs^|jrd|j}nd}d|j}d|j}d|j}|jdd}d|j|||||fS)zJ Build and return a filename from the various components. r'r4r)r(z%s-%s%s-%s-%s-%s.whl)rr<rrrrrIr[)rdrrrrrr@r@rArs     zWheel.filenamecCstj|j|j}tj|SrD)rJr\r<rrisfile)rdr\r@r@rAexistssz Wheel.existsccs4|jD](}|jD]}|jD]}|||fVqqqdSrD)rrr)rdrrrr@r@rAtagss   z Wheel.tagsc Cstj|j|j}d|j|jf}d|}td}t |d}| |}|d dd}t dd |D}t tg} d} | D]f} zLt|| } || ,} || }t|d } | rW5QRWqW5QRXWq|tk rYq|Xq|| std d | W5QRX| S) N%s-%s %s.dist-infoutf-8r Wheel-Versionr)rcSsg|] }t|qSr@intrMir@r@rArOsz"Wheel.metadata..)fileobjz8Invalid wheel, because metadata is missing: looked in %sz, )rJr\r<rrr[rcodecs getreaderrget_wheel_metadatartuplerr posixpathopenr KeyError ValueError)rdrgname_verinfo_dirwrapperzfwheel_metadatawv file_versionfnsrofnmetadata_filenamebfwfr@r@rAmetadatas2      zWheel.metadatac CsXd|j|jf}d|}t|d}||}td|}t|}W5QRXt|S)NrrWHEELr) r[rrr<rrrrdict)rdrrrrrrmessager@r@rArs  zWheel.get_wheel_metadatac Cs6tj|j|j}t|d}||}W5QRX|S)Nr)rJr\r<rrrr)rdrgrror@r@rArs z Wheel.infoc Cst|}|r||}|d|||d}}d|krBt}nt}t|}|rfd|d}nd}||}||}nT|d}|d} |dks|| krd} n|||dd krd } nd} t| |}|S) Nspythonw rH  rr%s ) SHEBANG_RErendlowerSHEBANG_PYTHONWSHEBANG_PYTHONSHEBANG_DETAIL_REgroupsfind) rddatar0rshebangZdata_after_shebangZshebang_pythonargscrlftermr@r@rAprocess_shebang%s,       zWheel.process_shebangcCsh|dkr|j}ztt|}Wn tk r<td|YnX||}t|d d}||fS)NzUnsupported hash algorithm: %r=ascii) hash_kindgetattrhashlibAttributeErrorrdigestbase64urlsafe_b64encoderstripdecode)rdrrhasherror@r@rAget_hashCs zWheel.get_hashc CsDt|}||ddft|}|D]}||q&W5QRXdS)Nr4)listr7rwriterow)rdrecords record_pathZarchive_record_pathwriterrowr@r@rA write_recordNs  zWheel.write_recordc Csg}|\}}tt|j}|D]P\}} t| d} | } W5QRXd|| } tj| } | || | fqtj |d} t tj |d}| || || || fdS)Nrbz%s=%sRECORD) rrrrreadrrJr\getsizer7r<to_posixr)rdrlibdir archive_pathsrdistinforrappfrrsizer@r@rA write_recordsUs    zWheel.write_recordsc CsFt|dtj.}|D]"\}}td|||||qW5QRXdS)NwzWrote %s to %s in wheel)rzipfile ZIP_DEFLATEDloggerdebugwrite)rdrgrrrrr@r@rA build_zipes zWheel.build_zipc" s|dkr i}ttfdddd}|dkrFd}tg}tg}tg}nd}tg}d g}d g}|d ||_|d ||_|d ||_ |} d|j |j f} d| } d| } g} dD]}|krq|}t j |rt |D]\}}}|D]}tt j ||}t j ||}tt j | ||}| ||f|dkr|dst|d}|}W5QRX||}t|d}||W5QRXqqq| }d}t |D]\}}}||kr t|D]8\}}t|}|drt j ||}||=qq|s td|D]H}t|dr(qt j ||}tt j ||}| ||fqqt |}|D]B}|dkrltt j ||}tt j | |}| ||fqld|p|jdtd|g}|jD] \}}}|d|||fqt j |d}t|d}|d |W5QRXtt j | d}| ||fd!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|kSrDr@rEpathsr@rArGsrHzWheel.build..)purelibplatlibrrfalsetruer|r}rrrr%s.datar)rheadersscriptsr.exerwb .dist-infoz(.dist-info directory expected, not found)z.pycz.pyo)r INSTALLERZSHAREDrzWheel-Version: %d.%dzGenerator: distlib %szRoot-Is-Purelib: %sz Tag: %s-%s-%srr cSs*|d}|d}d|kr"|d7}||fS)NrrCri')count)trnr@r@rAsorters  zWheel.build..sorter)key)%rr IMPVERABIARCHrgetrrrr[rrJr\isdirwalkr r<relpathrr7endswithrrrr enumerateAssertionErrorlistdir wheel_versionrrsortedrrrr)"rdrrrZlibkeyis_pureZ default_pyverZ default_abiZ default_archrrdata_dirrrrr\rootdirsfilesrrrprrrrrdnrrrrrrgr@rrAbuildks            z Wheel.buildcCs |dS)zl Determine whether an archive entry should be skipped when verifying or installing. )rCz /RECORD.jws)r)rdarcnamer@r@rA skip_entryszWheel.skip_entrycC Ks|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||ddkr|d}n|d}i}||8}t|d"}|D]}|d}|||<q8W5QRXW5QRXt | d}t | d}t | dd}t|d}d|_tj } g}!t}"|"|_d|_zz|D]}#|#j}$t|$t r|$}%n |$!d }%|"|%rq||%}|dr4t#|#j$|dkr4t%d|%|dr|ddd\}&}'||$}|&}(W5QRX|'|(|&\})}*|*|'krt%d|$|r|%(||frt)*d |%q|%(|o|%+d! }+|%(|r |%d"d\})},}-tj||,t,|-}.n$|%| |fkrqtj|t,|%}.|+s,||$}|-||.W5QRXtjd#krxt.|.|#j/d$?d%@|!0|.|s|drt|.d&4}|&}(|'|(|&\})}/|/|*krt%d'|.W5QRX| r|.+d(rz|j1|.|d)}0|!0|0Wn$t2k r(t)j3d*dd+YnXnttj4t,|$}1tj|"|1}2||$}|-||2W5QRXtj|.\}3}1|3|_|5|1}4|6|4|!7|4q|rt)*d,d}5ntd}6|j8d }|d-krt | d.}7z||7}t9|}8W5QRXi}6d/D]r}9d0|9}:|:|8kri|6d1|9<};|8|::D]<}?|d6}6|6r|6d7}6W5QRXWn t2k rt)3d8YnX|6r|6d9i}>|6d:i}?|>s0|?r|dd}@tj@|@sRtAd;|@|_|>BD]*\}:}<|5E||}|r|!0||5F|!|d?||5WW.zRoot-Is-Purelibrrrstreamrr4r)dry_runTNr%size mismatch for %s=digest mismatch for %szlib_only: skipping %srrCposixirzdigest mismatch on write for %sz.py)hashed_invalidationzByte-compilation failed)exc_infozlib_only: returning Nonez1.0zentry_points.txt)consoleguiz %s_scriptszwrap_%sz%s:%sz [%s],zAUnable to read legacy script metadata, so cannot generate scriptsrhzpython.commandsz8Unable to read JSON metadata, so cannot generate scriptsZ wrap_consoleZwrap_guizValid script path not specifiedz%s = %sr+libprefixzinstallation failed.)Ir"r rJr\r<rrr[rrrrrrrrrrrrrrecordr9dont_write_bytecodetempfilemkdtemp source_dir target_dirshutilrmtreeinfolist isinstancer rrstr file_sizerrr startswithrrrr copy_streamchmod external_attrr7 byte_compile Exceptionwarningbasenamemakeset_executable_modeextendrrvaluesr.suffixflagsjsonloadr ritemsr rZwrite_shared_locationsZwrite_installed_files exceptionrollback)Crdrmakerkwargsr"rrZbc_hashed_invalidationrgrrr metadata_namewheel_metadata_name record_namerrbwfrrrrrrrreaderrrZdata_pfxZinfo_pfxZ script_pfxfileopbcZoutfilesworkdirzinfor u_arcnamekindvaluerr(rZ is_scriptwhereroutfileZ newdigestZpycrZworknamer filenamesdistcommandsepZepdatarrkr,rlrNconsole_scripts gui_scriptsZ script_dirscriptoptionsr@r@rAinstallsX                                                      z Wheel.installcCs8tdkr4tjttddtjdd}t|atS)Nz dylib-cachez%s.%sr%) cacherJr\r<rr9r9r:r)rdbaser@r@rA_get_dylib_caches zWheel._get_dylib_cachec Cshtj|j|j}d|j|jf}d|}t|d}t d}g}t |d}z| |}||} t | } |} | |} tj| j| } tj| st| | D]\}}tj| t|}tj|sd}n6t|j}tj|}||}tj|j}||k}|r&||| |||fqW5QRXWntk rXYnXW5QRX|S)NrrZ EXTENSIONSrrT)rJr\r<rrr[rrrrrrrIrJri prefix_to_dirrhr makedirsrKrrstatst_mtimedatetime fromtimestampgetinfo date_timeextractr7r)rdrgrrrrrorrrrhrgr.Z cache_baser[r destrrZ file_timerZ wheel_timer@r@rA_get_extensionss>             zWheel._get_extensionscCst|S)zM Determine if a wheel is compatible with the running system. ) is_compatiblercr@r@rAruszWheel.is_compatiblecCsdS)zP Determine if a wheel is asserted as mountable by its metadata. Tr@rcr@r@rA is_mountable szWheel.is_mountablecCstjtj|j|j}|s2d|}t||sJd|}t||t jkrbt d|nN|rtt j |nt j d||}|rtt jkrt j tt||dS)Nz)Wheel %s not compatible with this Python.z$Wheel %s is marked as not mountable.z%s already in pathr)rJr\rr<rrrurrvr9rrr7insertrt_hook meta_pathri)rdr7rgmsgrhr@r@rAmounts"   z Wheel.mountcCsrtjtj|j|j}|tjkr2td|n.r rrC..invalid entry in wheel: %rr%r#r$r%)rJr\r<rrr[rrrrrrrrrrrr7r8r rrrr9r:rr)rdrgrrrrPrQrRrrrSrrrrrrrTrrrXrrYrZr[rr(rr@r@rAr4s\                z Wheel.verifyc Ksdd}dd}tj|j|j}d|j|jf}d|}t|d} t} t |d|} i} | D]h} | j}t |t r|}n | d }|| krqhd |krtd || | | tj| t|}|| |<qhW5QRX|| |\}}|| f|}|r|| |\}}|r$||kr$||||d krNtjd d| d\}}t|n*tj|shtd|tj||j}t| }tj| |}||f}||| |||||d krt||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|dj}||fS)Nz%s/%sz %s/PKG-INFOr\)rr r)path_maprrr\rr@r@rA get_version}s  z!Wheel.update..get_versioncSsd}z|t|}|d}|dkr*d|}nTdd||dddD}|dd7<d |d|dd d |Df}Wn tk rtd |YnX|rt|d }||_| t }|j ||dtd||dS)Nr'rz%s+1cSsg|] }t|qSr@rrLr@r@rArOsz8Wheel.update..update_version..rr)rz%s+%scss|]}t|VqdSrD)r9rr@r@rA sz7Wheel.update..update_version..z0Cannot update non-compliant (PEP-440) version %rr)r\legacyzVersion updated from %r to %r) rrrr<rrrr rrrr)rr\updatedrlrr=mdrr@r@rAupdate_versions.        z$Wheel.update..update_versionrrrrrr}r~Nz.whlz wheel-update-)rGr.dirzNot a directory: %r)rJr\r<rrr[rrrrr7r8r rrrrrr1mkstempcloser rrKrrr5copyfile)rdmodifierdest_dirrOrrrgrrrRrWrrrXrrYr\Zoriginal_versionr(modifiedcurrent_versionfdnewpathrrrr@r@rArfls\                 z Wheel.update)NFF)N)NN)F)N)rwrxry__doc__rrrepropertyrrrrrrrrrrrrrrrfrirtrurvr{r|rrfr@r@r@rArzs@ )        tn "  8rzcCsZddl}|}g}|ddkrV|ddD]}||rFt|ndq.t|}|S)Nrglibcrr))platformlibc_verrr7isdigitrr)rverrorNr@r@rA_get_glibc_versions rc Cs`tg}td}ttjddddD]}|d|t|gq$g}tD]$}|drL|| dddqL| t dkr| dt |dg}t g}tjd krtd t }|r|\}}}} t|}| g} | d kr| d | d kr| d| dkr| d| dkr,| d| dkr@| d|dkr| D]*} d|||| f} | t krN|| qN|d8}q@|D]} |D]} |dt|df| | f| dkrtjdr| dd} t}t|dkr|dkr|dt|df| d| f|dkrH|dt|df| d| f|dkrt|dt|df| d| f|dt|df| d|d|d| ffqqt|D]L\}}|dt|fddf|dkr|dt|dfddfqt|D]L\}}|dd |fddf|dkr |dd |dfddfq t|S)!zG Return (pyver, abi, arch) tuples compatible with this Python. rrrr4z.abir)r%r|darwinz(\w+)_(\d+)_(\d+)_(\w+)$)i386ppcfat)rrx86_64Zfat3)ppc64rfat64)rrintel)rrrrr universalz %s_%s_%s_%slinuxZlinux_)r%z manylinux1_%s)r% zmanylinux2010_%s)r%zmanylinux2014_%szmanylinux_%s_%s_%sr}r&)r5ranger9r:r7r<r9rTr;rsortrrwr rrerrrr8rIrrtrset)versionsmajorminorabisrGroarchesr0r[rmatchesrrNrr=rrr@r@rAcompatible_tagss                         " "rcCs\t|tst|}d}|dkr"t}|D]0\}}}||jkr&||jkr&||jkr&d}qXq&|S)NFT)r8rzCOMPATIBLE_TAGSrrr)wheelrrorrrr@r@rAru0s ru)N)Z __future__rrrrnemailrrrIloggingrJrrr5r9r1rr4rrcompatrrr r r Zdatabaser rr rrrrUrrrrrrrrrrrrr getLoggerrwrrghasattrr8rr;r6r5r:rrrIr rrrBcompile IGNORECASEVERBOSErrrrrrrKrrPimportlib.machineryrQimportlib.utilrTr_objectr`rxrzrrrrur@r@r@rAs   0              #0 P