a і.^@sddlmZddlZddlZddlZddlZddlZddlZddl m Z ddl m Z ddlmZmZmZddlmZddlmZmZmZmZmZmZedejZd d d ZGd d d eZdS))print_functionN) OrderedDict)log) ZIP_DEFLATEDZipInfoZipFile) WheelError)urlsafe_b64decode as_unicodenativeurlsafe_b64encodeas_bytesStringIOzt^(?P(?P.+?)-(?P.+?))(-(?P\d[^-]*))? -(?P.+?)-(?P.+?)-(?P.+?)\.whl$cCs,ttjd|pt}t|ddS)NSOURCE_DATE_EPOCHr)intosenvirongettimegmtime)Z timestampr1/usr/lib/python3/dist-packages/wheel/wheelfile.pyget_zipinfo_datetimesrc@sReZdZdZejZdefddZdddZ dd Z dd d Z dd d Z ddZ dS) WheelFilezA ZipFile derivative class that also reads SHA-256 hashes from .dist-info/RECORD and checks any read files against those. rc Cstj|}t||_|dr,|jdur:td|t j ||||ddd|j d|_ |j d|_ t|_i|_|dkrd |j|j <d |j|j d <d |j|j d <z||j }Wn"tytd |j Yn0||D]}|d }|dd\}}} |r|d\} }zt| Wn"tyRtd| Yn0| dvrptd| | t|df|j|<qWdn1s0YdS)Nz.whlzBad wheel filename {!r}T) compressionZ allowZip64z {}.dist-infoZnameverz/RECORDr)NNz.jwsz.p7szMissing {} filezutf-8,=zUnsupported hash algorithm: {}>Zmd5Zsha1z4Weak hash algorithm ({}) is not permitted by PEP 427ascii)rpathbasename WHEEL_INFO_REmatchZparsed_filenameendswithrformatr__init__groupZdist_info_path record_pathr _file_hashes _file_sizesopenKeyErrordecodersplitsplithashlibnew ValueErrorlowerr encode) selffilemoderr"recordliner!Zhash_sumsize algorithmrrrr'&sF       zWheelFile.__init__Ncsdfdd }t||||tt|tr8|jn||dkrds|jvrltd t |j\}durt |j |_ S)NcsR|durj}|n ||||rNkrNtdtdS)NzHash mismatch for file '{}')Z_eofupdatedigestrr&r )newdataeofZefZef_nameZ expected_hashZ running_hashZupdate_crc_origrr _update_crcRs   z#WheelFile.open.._update_crcr/zNo hash found for file '{}')N)rr,r isinstancerfilenamer%r*rr&r r1r2rB)r6Z name_or_infor8pwdrBr<rrArr,Qs   zWheelFile.openc Cstd|j|g}t|D]\}}}|t|D]r}tjtj ||}tj |r8tj || tjj d}||jkrq8|dr|||fq8|||q8q||D]\}}|||qdS)Nz#creating '%s' and adding '%s' to itrCz .dist-info)loggerinforErwalksortsortedr!normpathjoinisfilerelpathreplacesepr)r%appendwrite) r6Zbase_dirZdeferredrootZdirnames filenamesnamer!arcnamerrr write_filesls      zWheelFile.write_filescCst|d&}t|}|}Wdn1s60Yt|pH|t|jd}t |j t |j Bd>|_ |p||j |_||||dS)NrbZ date_time)r,rfstatfilenoreadrrst_mtimestatS_IMODEst_modeS_IFMT external_attrr compress_typewritestr)r6rErWrefstdatazinforrrrSs & zWheelFile.writecCsrt||||t|tr |jn|}td|||jkrn||}|j t t | f|j |<t||j|<dS)Nz adding '%s')rrfrDrrErGrHr)_default_algorithmrVr r r>r*lenr+)r6Zzinfo_or_arcnamebytesrefnamehash_rrrrfs   zWheelFile.writestrcsjdurjdkrjrt}tj|dddd}|fddjD|t j ddft t j t d }j|_d |_|t|tdS) Nwr" )Z delimiterZ quotecharZlineterminatorc3s.|]&\}\}}||d|j|fVqdS)rN)r+).0rnr<ror6rr s   z"WheelFile.close..rZi)fpr8r*rcsvwriterZ writerowsitemsZwriterowr&r)rr rrrerdrfr getvaluerclose)r6riryrjrrtrr|szWheelFile.close)rN)NN)N)__name__ __module__ __qualname____doc__r1Zsha256rkrr'r,rXrSrfr|rrrrrs+  r)N) Z __future__rrxr1os.pathrrer`r collectionsrZ distutilsrrGZzipfilerrrZ wheel.clirZ wheel.utilr r r r r rcompileVERBOSEr#rrrrrrs"