
    Ri"                    J   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	j        de	j                  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%dS )    )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dS )r   N)__name__
__module____qualname__     b/Users/shanyulin/my-agent/.venv/lib/python3.11/site-packages/setuptools/_vendor/wheel/wheelfile.pyr   r   !   s        Dr   r   databytesreturnc                P    t          j        |                               d          S )z!urlsafe_b64encode without padding   =)base64urlsafe_b64encoderstrip)r   s    r   r   r   %   s!    #D))00666r   c                `    ddt          |           dz  z
  z  }t          j        | |z             S )z!urlsafe_b64decode without paddingr         )lenr   urlsafe_b64decode)r   pads     r   r%   r%   *   s0    
!s4yy1}%
&C#D3J///r   	timestampfloat | Nonetuple[int, int, int, int, int]c                    t          t          j                            d| pt	          j                                        } t          | t                    } t	          j        |           dd         S )NSOURCE_DATE_EPOCHr      )intosenvirongettimemaxMINIMUM_TIMESTAMPgmtime)r'   s    r   get_zipinfo_datetimer5   0   sV    
 BJNN#6	8PTY[[QQRRII011I;y!!!A#&&r   c                  f    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d
S )+r   zA ZipFile derivative class that also reads SHA-256 hashes from
    .dist-info/RECORD and checks any read files against those.
    rfiler   modeLiteral['r', 'w', 'x', 'a']compressionr-   c                   t           j                            |          }t                              |          | _        |                    d          r| j        t          d|          t          j	        | |||d           d
                    | j                            d                    | _        | j        dz   | _        i | _        i | _        |dk    rhd	| j        | j        <   d	| j        | j        d
z   <   d	| j        | j        dz   <   	 |                     | j                  }n'# t"          $ r t          d| j         d          d w xY w|5  t%          j        t)          |dd                    D ]}|\  }}}	|s|                    d          \  }
}	 t-          j        |
           n!# t0          $ r t          d|
           d w xY w|
                                dv rt          d|
 d          |
t5          |                    d                    f| j        |<   	 d d d            d S # 1 swxY w Y   d S d S )Nz.whlzBad wheel filename T)r;   
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)selfr8   r9   r;   rI   recordlinerH   hash_sumsize	algorithms              r   rM   zWheelFile.__init__A   s     7##D)),228<<  (( 	AD,@,H?8??@@@tT{tTTTT,33 &&y11
 
  .:NP3;;2<Dd./;EDd.78;EDd.78O4#344 O O O !CD,<!C!C!CDD$NO   J!&"wGGG   D ,0(D(D# ! *2..*=*='Ix$I....% $ $ $(F9FF #$$
 !((O;;('I ' ' '   ")(//'*B*BCC/D%d+++                  ;s8   D+ +$EAH7F21H72GAH77H;>H;Nname_or_infostr | ZipInfoLiteral['r', 'w']pwdbytes | Noner   	IO[bytes]c                  	
 d
	
fd}t          |t                    r|j        n||dk    r1                    d          s| j        vrt          d d	          t          j        | |||          |dk    rJ                    d          s5| j                 \  }#t          j	        |          	j
        |c
_
        S )Nnewdatar   r   Nonec                    j         } |                                |            |r+                                k    rt          d d          d S d S )NzHash mismatch for file '')_eofupdatedigestr   )rk   eofefef_nameexpected_hashrunning_hashupdate_crc_origs     r   _update_crcz#WheelFile.open.<locals>._update_crc   sy    'COG$$$((( H|**,,== !FG!F!F!FGGGH H==r   r7   /zNo hash found for file 'rn   )rk   r   r   rl   )
isinstancer   filenamerL   rR   r   r   rT   rY   rZ   rx   )r^   rd   r9   rg   rx   rc   rs   rt   ru   rv   rw   s         @@@@@r   rT   zWheelFile.open{   s   	H 	H 	H 	H 	H 	H 	H 	H 	H 	H &0g%F%FXL!!L 	 CKK$$S)) t000BBBBCCC\$dC883;;w//44;'+'8'A$I}(  '{95524.+/	r   base_dirstrrl   c                   t                               d| j        |           g }t          j        |          D ]\  }}}|                                 t          |          D ]}t          j                            t          j        	                    ||                    }t          j        
                    |          rt          j                            ||                              t          j        j        d          }|| j        k    r|                    d          r|                    ||f           |                     ||           |                                 |D ]\  }}|                     ||           d S )Nzcreating %r and adding %r to itry   z
.dist-info)loginfor{   r.   walksortsortedrH   normpathjoinisfilerelpathreplaceseprQ   rL   appendwrite)	r^   r|   deferredrootdirnames	filenamesnamerH   arcnames	            r   write_fileszWheelFile.write_files   sf   2DM8LLL*,)+):): 	2 	2%D(I MMOOOy)) 	2 	2w''T4(@(@AA7>>$'' 2 goodH==EEbgkSVWWG$"222|44 2 w8888

4111	2 	% 	& 	&MD'JJtW%%%%	& 	&r   r{   r   
str | Nonecompress_type
int | Nonec                   t          |d          5 }t          j        |                                          }|                                }d d d            n# 1 swxY w Y   t          |p|t          |j                            }t          j	        |j
                  t          j        |j
                  z  dz  |_        |p| j        |_        |                     |||           d S )Nrb	date_time   )rT   r.   fstatfilenoreadr   r5   st_mtimestatS_IMODEst_modeS_IFMTexternal_attrr;   r   writestr)r^   r{   r   r   fstr   zinfos           r   r   zWheelFile.write   s    (D!! 	Q!((**%%B6688D	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 x+?+L+L
 
 
  $|BJ77$+bj:Q:QQVXX+?t/?eT=11111s   ;AAAzinfo_or_arcnamer   SizedBuffer | strc                   t          |t                    r@t          |t                                }| j        |_        dt          j        z  dz  |_        t          |t                    r|	                    d          }t          j        | |||           t          |t                    r|j        n|}t                              d|           || j        k    rq|                     |          }|j        t%          |                                                              d          f| j        |<   t-          |          | j        |<   d S d S )Nr   i  r   rA   z	adding %rrG   )rz   r}   r   r5   r;   r   r   S_IFREGr   r]   r   r   r{   r   r   rQ   _default_algorithmr   r   rq   decoderR   r$   rS   )r^   r   r   r   fnamehash_s         r   r   zWheelFile.writestr   sL    &,, 	J& ,@,B,B      .2-=*.3dl.Br-I*dC   	(;;w''D/}EEE *G44"%%! 	
 	e$$$D$$$++D11E
!%,,..1188AA(De$ '*$iiDU### %$r   c                     j         ǉ j        dk    r j        rt                      }t	          j        |ddd          }|                     fd j                                        D                        |                    t           j
                  ddf                                 j
        |                                           t          j                    d S )Nw,"
)	delimiter	quotecharlineterminatorc              3  P   K   | ] \  }\  }}||d z   |z   j         |         fV  !dS )rD   N)rS   ).0r   rc   r   r^   s       r   	<genexpr>z"WheelFile.close.<locals>.<genexpr>   sX        11	5 IOe3T5Ee5LM     r   r@   )fpr9   rR   r   rV   writer	writerowsitemswriterowrN   rQ   r   getvaluer   close)r^   r   r   s   `  r   r   zWheelFile.close   s    749#3#38I#3::DZsSWXXXF   595F5L5L5N5N     OOVD$455r2>???MM$*DMMOO<<<dr   )r8   r   r9   r:   r;   r-   )r7   N)rd   re   r9   rf   rg   rh   r   ri   )r|   r}   r   rl   r?   )r{   r}   r   r   r   r   r   rl   N)r   re   r   r   r   r   r   rl   )r   rl   )r   r   r   __doc__rY   sha256r   r   rM   rT   r   r   r   r   r   r   r   r   r   :   s          !
 -0'	8 8 8 8 8z #& 	         D& & & &2 #$(	2 2 2 2 2* %)	0 0 0 0 0>     r   r   )r   r   r   r   r   )r'   r(   r   r)   )&
__future__r   __all__r   rV   rY   loggingos.pathr.   rer   r1   ior   r   typingr	   r
   r   zipfiler   r   r   	_typeshedr   r   compileVERBOSEr   r3   	getLoggerr   	Exceptionr   r   r%   r5   r   r   r   r   <module>r      s   " " " " " "
6
6
6  



    				   & & & & & & & & - - - - - - - - - - 2 2 2 2 2 2 2 2 2 2 /........
 
CJ 
  g  	 	 	 	 	 	 	 	7 7 7 7
0 0 0 0 #' ' ' ' 'w w w w w w w w w wr   