
    iH$                    T   d dl mZ g dZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlmZmZ d dlmZmZmZ d dlmZmZmZ erd dlmZmZ  e	j4                  de	j6                        Zd	Z ej<                  d
      Z G d de       Z!ddZ"ddZ#	 d	 	 	 ddZ$ G d de      Z%y)    )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                      e Zd Zy)r   N)__name__
__module____qualname__     B/root/searxng-venv/lib/python3.12/site-packages/wheel/wheelfile.pyr   r   !   s    r   r   c                J    t        j                  |       j                  d      S )z!urlsafe_b64encode without padding   =)base64urlsafe_b64encoderstrip)datas    r   r   r   %   s    ##D)0066r   c                Z    ddt        |       dz  z
  z  }t        j                  | |z         S )z!urlsafe_b64decode without paddingr         )lenr   urlsafe_b64decode)r   pads     r   r#   r#   *   s.    
!s4y1}%
&C##D3J//r   c                    t        t        j                  j                  d| xs t	        j                                     } t        | t              } t	        j                  |       dd S )NSOURCE_DATE_EPOCHr      )intosenvirongettimemaxMINIMUM_TIMESTAMPgmtime)	timestamps    r   get_zipinfo_datetimer1   0   sL    
 BJJNN#6	8PTYY[QRII01I;;y!!A&&r   c                      e Zd ZdZej
                  Zdef	 	 	 	 	 d
dZ	 	 d	 	 	 	 	 	 	 ddZ	ddZ
	 	 d	 	 	 	 	 	 	 ddZ	 d	 	 	 	 	 	 	 ddZdd	Zy)r   zA ZipFile derivative class that also reads SHA-256 hashes from
    .dist-info/RECORD and checks any read files against those.
    rc                   t         j                  j                  |      }t        j	                  |      | _        |j                  d      r| j
                  t        d|      t        j                  | |||d       dj                  | j
                  j                  d            | _        | j                  dz   | _        i | _        i | _        |dk(  r| j                  | j!                         vrh| j                  j#                         d	z   }| j!                         D ]8  }|j#                         |k(  s|j%                  dd
      d   | _        || _         n d| j                  | j                  <   d| j                  | j                  dz   <   d| j                  | j                  dz   <   	 | j'                  | j                        }|5  t+        j,                  t/        |dd            D ]  }|\  }	}
}|
s|
j1                  d      \  }}
	 t3        j4                  |       |j#                         dv rt        d| d      |t9        |
j;                  d            f| j                  |	<    	 d d d        y y # t(        $ r t        d| j                   d      d w xY w# t6        $ r t        d|       d w xY w# 1 sw Y   y xY w)Nz.whlzBad wheel filename T)compression
allowZip64z{}.dist-infonameverz/RECORDr3   z/record   r   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namelistlowerrsplitopenKeyErrorcsvreaderr   splithashlibnew
ValueErrorr#   encode)selffilemoder5   rC   lowerednamerecordlinerB   hash_sumsize	algorithms                r   rG   zWheelFile.__init__A   s    77##D),228<  (D,@,@,H28,?@@tT{tT,33  &&y1
  ..:NP3; t}}6--335	A MMO Dzz|w..2kk)Q.G.J++/(	 3=Dd../;EDd..78;EDd..78O4#3#34  JJ!&"wG D ,0(D(D# *2..*='Ix$I. !(O;(3I; ?& '  ")(//'*BC/D%%d++ / (  O 8D,<,<+=U!CD$NO & $(:9+F#$$ s2   ,I8 	AJ;J!AJ;8$JJ88J;;KNc                  	
 d	
fd}t        |t              r|j                  n||dk(  r.j                  d      s| j                  vrt        d d      t        j                  | |||      |dk(  rNj                  d      s=| j                     \  })t        j                  |      	j                  |c
_
        S )Nc                    j                   } |        j                  |        |r#j                         k7  rt        d d      y y )NzHash mismatch for file '')_eofupdatedigestr   )newdataeofefef_nameexpected_hashrunning_hashupdate_crc_origs     r   _update_crcz#WheelFile.open.<locals>._update_crc   sQ    ''CG$(|**,= #;G9A!FGG >sr   r3   /zNo hash found for file 'rf   )rj   bytesreturnNone)
isinstancer   filenamerF   rL   r   r   rQ   rV   rW   rq   )rZ   name_or_infor\   pwdrq   rc   rl   rm   rn   ro   rp   s         @@@@@r   rQ   zWheelFile.open   s    	H 	H &0g%FL!!L 	 CK$$S)t0007yBCC\\$dC83;w//4'+'8'8'A$I}(  '{{9524..+/	r   c                   t         j                  d| j                  |       g }t        j                  |      D ]  \  }}}|j                          t        |      D ]  }t        j                  j                  t        j                  j                  ||            }t        j                  j                  |      s`t        j                  j                  ||      j                  t        j                  j                  d      }|| j                  k(  r|j                  d      r|j!                  ||f       | j#                  ||         |j                          |D ]  \  }}| j#                  ||        y )Nzcreating %r and adding %r to itrr   z
.dist-info)loginforw   r)   walksortsortedrB   normpathjoinisfilerelpathreplaceseprK   rF   appendwrite)	rZ   base_dirdeferredrootdirnames	filenamesr^   rB   arcnames	            r   write_fileszWheelFile.write_files   s   2DMM8L*,)+): 	2%D(I MMOy) 	2ww''T4(@A77>>$' ggoodH=EEbggkkSVWG$"2"22|4 w8

41	2		2 	% 	&MD'JJtW%	&r   c                   t        |d      5 }t        j                  |j                               }|j	                         }d d d        t        |xs |t        j                              }t        j                  |j                        t        j                  |j                        z  dz  |_        |xs | j                  |_        | j                  ||       y # 1 sw Y   xY w)Nrb	date_time   )rQ   r)   fstatfilenoreadr   r1   st_mtimestatS_IMODEst_modeS_IFMTexternal_attrr5   compress_typewritestr)rZ   rw   r   r   fstr   zinfos           r   r   zWheelFile.write   s     (D! 	Q!((*%B668D	 x+?+L
  $||BJJ7$++bjj:QQVXX+?t/?/?eT=1	 	s   4CC&c                t   t        |t              rAt        |t                     }| j                  |_        dt        j                  z  dz  |_        t        |t              r|j                  d      }t        j                  | |||       t        |t              r|j                  n|}t        j                  d|       || j                  k7  rk| j!                  |      }|j"                  t%        |j'                               j)                  d      f| j*                  |<   t-        |      | j.                  |<   y y )Nr   i  r   r;   z	adding %rrA   )rv   strr   r1   r5   r   r   S_IFREGr   rY   r   r   rw   r{   r|   rK   _default_algorithmr^   r   ri   decoderL   r"   rM   )rZ   zinfo_or_arcnamer   r   fnamehash_s         r   r   zWheelFile.writestr   s    &,& ,@,B  .2-=-=*.3dll.Br-I*dC ;;w'D/}E *G4 %%! 	
 	e$D$$$++D1E

!%,,.188A(De$ '*$iDU# %r   c                     j                    j                  dk(  r j                  rt               }t	        j
                  |ddd      }|j                   fd j                  j                         D               |j                  t         j                        ddf        j                   j                  |j                                t        j                          y )Nw,"
)	delimiter	quotecharlineterminatorc              3  Z   K   | ]"  \  }\  }}||d z   |z   j                   |   f $ yw)r>   N)rM   ).0r   rc   r   rZ   s       r   	<genexpr>z"WheelFile.close.<locals>.<genexpr>   s=      11	5 IOe3T5E5Ee5LMs   (+r:   )fpr\   rL   r   rS   writer	writerowsitemswriterowrH   rK   r   getvaluer   close)rZ   r   r   s   `  r   r   zWheelFile.close   s    77499#38I8I:DZZsSWXF595F5F5L5L5N OOVD$4$45r2>?MM$**DMMO<dr   )r[   r   r\   zLiteral['r', 'w', 'x', 'a']r5   r(   )r3   N)rx   str | ZipInfor\   zLiteral['r', 'w']ry   zbytes | Nonert   z	IO[bytes])r   r   rt   ru   r9   )rw   r   r   z
str | Noner   
int | Nonert   ru   N)r   r   r   zSizedBuffer | strr   r   rt   ru   )rt   ru   )r   r   r   __doc__rV   sha256r   r   rG   rQ   r   r   r   r   r   r   r   r   r   :   s     !
 -0'	CC *C 	CP #& 	 #     	 
 
 D&2 #$(	22 2 "	2
 
2* %)	0'0  0 "	0
 
0>r   r   )r   rs   rt   rs   r   )r0   zfloat | Nonert   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   r.   	getLoggerr{   	Exceptionr   r   r#   r1   r   r   r   r   <module>r      s    "
6  
    	   & - - 2 2.
 

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