
    g"                    f   S SK Jr  / SQrS SKrS SKrS SKrS SKrS SKrS SK	r	S SK
r
S SKrS SKJrJr  S SKJrJrJr  S SKJrJrJr  \(       a  S SKJrJr  \	R4                  " S\	R6                  5      rS	r\R<                  " S
5      r " S S\ 5      r!SS jr"SS jr# S   SS jjr$ " S S\5      r%g)    )annotations)WHEEL_INFO_RE	WheelFile
WheelErrorN)StringIOTextIOWrapper)IOTYPE_CHECKINGLiteral)ZIP_DEFLATEDZipFileZipInfo)SizedBufferStrPathz^(?P<namever>(?P<name>[^\s-]+?)-(?P<ver>[^\s-]+?))(-(?P<build>\d[^\s-]*))?
     -(?P<pyver>[^\s-]+?)-(?P<abi>[^\s-]+?)-(?P<plat>\S+)\.whl$i wheelc                      \ rS rSrSrg)r   !    N)__name__
__module____qualname____firstlineno____static_attributes__r       1/usr/lib/python3/dist-packages/wheel/wheelfile.pyr   r   !   s    r   r   c                L    [         R                  " U 5      R                  S5      $ )z!urlsafe_b64encode without padding   =)base64urlsafe_b64encoderstrip)datas    r   r   r   %   s    ##D)0066r   c                Z    SS[        U 5      S-  -
  -  n[        R                  " X-   5      $ )z!urlsafe_b64decode without paddingr         )lenr   urlsafe_b64decode)r!   pads     r   r&   r&   *   s,    
!s4y1}%
&C##DJ//r   c                    [        [        R                  R                  SU =(       d    [        R                  " 5       5      5      n [        U [        5      n [        R                  " U 5      SS $ )NSOURCE_DATE_EPOCHr      )intosenvirongettimemaxMINIMUM_TIMESTAMPgmtime)	timestamps    r   get_zipinfo_datetimer4   0   sL    
 BJJNN#6	8PTYY[QRII01I;;y!!A&&r   c                      \ rS rSrSr\R                  rS\4     SS jjr	  S       SS jjr
SS jr  S       SS jjr S       SS	 jjrSS
 jrSrg)r   :   zzA ZipFile derivative class that also reads SHA-256 hashes from
.dist-info/RECORD and checks any read files against those.
rc           	        [         R                  R                  U5      n[        R	                  U5      U l        UR                  S5      (       a  U R
                  c  [        SU< 35      e[        R                  " XX#SS9  SR                  U R
                  R                  S5      5      U l        U R                  S-   U l        0 U l        0 U l        US:X  Ga#  S	U R                  U R                  '   S	U R                  U R                  S
-   '   S	U R                  U R                  S-   '    U R!                  U R                  5      nU   [$        R&                  " [)        USSS95       H  nUu  pxn	U(       d  M  UR+                  S5      u  p [,        R.                  " U
5        U
R3                  5       S;   a  [        SU
 S35      eU
[5        UR7                  S5      5      4U R                  U'   M     S S S 5        g g ! ["         a    [        SU R                   S35      S ef = f! [0         a    [        SU
 35      S ef = f! , (       d  f       g = f)Nz.whlzBad wheel filename T)compression
allowZip64z{}.dist-infonameverz/RECORDr7   NNz.jwsz.p7szMissing z file utf-8)newlineencoding=zUnsupported hash algorithm: >   md5sha1zWeak hash algorithm (z) is not permitted by PEP 427ascii)r,   pathbasenamer   matchparsed_filenameendswithr   r   __init__formatgroupdist_info_pathrecord_path_file_hashes_file_sizesopenKeyErrorcsvreaderr   splithashlibnew
ValueErrorlowerr&   encode)selffilemoder9   rF   recordlinerE   hash_sumsize	algorithms              r   rJ   WheelFile.__init__A   sB    77##D),228<  ((D,@,@,H28,?@@TtT,33  &&y1
  ..:NP3;2<Dd../;EDd..78;EDd..78O4#3#34 JJ!&"wGD ,0(DD# *2..*='I$I. !(O;(3I; ?& '  ")(//'*BC/D%%d++    O 8D,<,<+=U!CD$NO & $(:9+F#$$ s2   ,G> 	AIH&$AI>%H#&I  I
INc                  ^^^^	^
 SUUUU	U
4S jjn[        U[        5      (       a  UR                  OUmUS:X  a5  TR                  S5      (       d  TU R                  ;  a  [        ST S35      e[        R                  " XX#5      mUS:X  aU  TR                  S5      (       d?  U R                  T   u  nmTb*  [        R                  " U5      m	TR                  Usm
Tl
        T$ )Nc                   > TR                   nT" U 5        TR                  U 5        U(       a$  TR                  5       T:w  a  [        ST S35      eg g )NzHash mismatch for file '')_eofupdatedigestr   )newdataeofefef_nameexpected_hashrunning_hashupdate_crc_origs     r   _update_crc#WheelFile.open.<locals>._update_crc   sQ    ''CG$(|**,= #;G9A!FGG >sr   r7   /zNo hash found for file 'rf   )rj   bytesreturnNone)
isinstancer   filenamerI   rO   r   r   rQ   rV   rW   rq   )r[   name_or_infor]   pwdrq   rb   rl   rm   rn   ro   rp   s         @@@@@r   rQ   WheelFile.open{   s    	H 	H &0g%F%FL!!L 	 CK$$S))t0007yBCC\\$d83;w//44'+'8'8'A$I}(  '{{9524..+/	r   c                   [         R                  SU R                  U5        / n[        R                  " U5       GH  u  p4nUR                  5         [        U5       H  n[        R                  R                  [        R                  R                  X65      5      n[        R                  R                  U5      (       d  Me  [        R                  R                  Xq5      R                  [        R                  R                  S5      nXR                  :X  a  M  UR                  S5      (       a  UR!                  Xx45        M  U R#                  Xx5        M     GM!     UR                  5         U H  u  pxU R#                  Xx5        M     g )Nzcreating %r and adding %r to itrs   z
.dist-info)loginforx   r,   walksortsortedrE   normpathjoinisfilerelpathreplaceseprN   rI   appendwrite)	r[   base_dirdeferredrootdirnames	filenamesnamerE   arcnames	            r   write_filesWheelFile.write_files   s   2DMM8L*,)+):%DI MMOy)ww''T(@A77>>$'' ggood=EEbggkkSVWG"2"22|44 8

41 *	 *; 	%MDJJt% &r   c                   [        US5       n[        R                  " UR                  5       5      nUR	                  5       nS S S 5        [        U=(       d    U[        WR                  5      S9n[        R                  " UR                  5      [        R                  " UR                  5      -  S-  Ul        U=(       d    U R                  Ul        U R                  UWU5        g ! , (       d  f       N= f)Nrb	date_time   )rQ   r,   fstatfilenoreadr   r4   st_mtimestatS_IMODEst_modeS_IFMTexternal_attrr9   compress_typewritestr)r[   rx   r   r   fstr!   zinfos           r   r   WheelFile.write   s     (D!Q!((*%B668D " x+?+L
  $||BJJ7$++bjj:QQVXX+?t/?/?eT=1 "!s   5C''
C5c                   [        U[        5      (       a>  [        U[        5       S9nU R                  Ul        S[        R                  -  S-  Ul        [        U[        5      (       a  UR                  S5      n[        R                  " XX#5        [        U[        5      (       a  UR                  OUn[        R                  SU5        X@R                  :w  ak  U R!                  U5      nUR"                  [%        UR'                  5       5      R)                  S5      4U R*                  U'   [-        U5      U R.                  U'   g g )Nr   i  r   r>   z	adding %rrD   )rw   strr   r4   r9   r   r   S_IFREGr   rZ   r   r   rx   r}   r~   rN   _default_algorithmr   r   ri   decoderO   r%   rP   )r[   zinfo_or_arcnamer!   r   fnamehash_s         r   r   WheelFile.writestr   s    &,,& ,@,B  .2-=-=*.3dll.Br-I*dC  ;;w'DE *G44 %%! 	
 	e$$$$++D1E

!%,,.188A(De$ '*$iDU# %r   c                  ^  T R                   b  T R                  S:X  a  T R                  (       a  [        5       n[        R
                  " USSSS9nUR                  U 4S jT R                  R                  5        5       5        UR                  [        T R                  5      SS45        T R                  T R                  UR                  5       5        [        R                  " T 5        g )Nw,"
)	delimiter	quotecharlineterminatorc              3  \   >#    U  H!  u  nu  p#XS -   U-   TR                   U   4v   M#     g7f)rA   N)rP   ).0r   rb   r   r[   s       r   	<genexpr>"WheelFile.close.<locals>.<genexpr>   s9      5N11	 Oe3T5E5Ee5LM5Ns   ),r=   )fpr]   rO   r   rS   writer	writerowsitemswriterowrK   rN   r   getvaluer   close)r[   r!   r   s   `  r   r   WheelFile.close   s    77499#38I8I:DZZsSWXF595F5F5L5L5N OOVD$4$45r2>?MM$**DMMO<dr   )rO   rP   rM   rH   rN   )r\   r   r]   zLiteral['r', 'w', 'x', 'a']r9   r+   )r7   N)ry   str | ZipInfor]   zLiteral['r', 'w']rz   zbytes | Noneru   z	IO[bytes])r   r   ru   rv   r<   )rx   r   r   z
str | Noner   
int | Noneru   rv   N)r   r   r!   zSizedBuffer | strr   r   ru   rv   )ru   rv   )r   r   r   r   __doc__rV   sha256r   r   rJ   rQ   r   r   r   r   r   r   r   r   r   r   :   s     !
 -0'	88 *8 	8z #& 	 #     	 
 
 D&2 #$(	22 2 "	2
 
2* %)	0'0  0 "	0
 
0>r   r   )r!   rt   ru   rt   r   )r3   zfloat | Noneru   ztuple[int, int, int, int, int])&
__future__r   __all__r   rS   rV   loggingos.pathr,   rer   r/   ior   r   typingr	   r
   r   zipfiler   r   r   	_typeshedr   r   compileVERBOSEr   r1   	getLoggerr}   	Exceptionr   r   r&   r4   r   r   r   r   <module>r      s    "
6  
    	   & - - 2 2.
 

CJJ
   	 	7
0 #''#'w wr   