
    iH$                    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__     V/home/ubuntu/.hermes/hermes-agent/venv/lib/python3.11/site-packages/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    r| j        |                                 vru| j                                        d	z   }|                                 D ]D}|                                |k    r*|                    dd
          d         | _        || _         nEd| 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          \  }}
	 t3          j        |           n!# t6          $ r t          d|           d w xY w|                                dv rt          d| d          |t9          |
                    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   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)selfr8   r9   r;   rJ   lowerednamerecordlinerI   hash_sumsize	algorithms                r   rN   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;; t}}66-3355	A MMOO  Dzz||w...2kk)Q.G.G.J++/( / 3=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    F; ;$G$AK-IKI  AKKK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   )rp   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 'rs   )rp   r   r   rq   )
isinstancer   filenamerM   rS   r   r   rX   r]   r^   r}   )ra   ri   r9   rl   r}   rh   rx   ry   rz   r{   r|   s         @@@@@r   rX   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strrq   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 itr~   z
.dist-info)loginfor   r.   walksortsortedrI   normpathjoinisfilerelpathreplaceseprR   rM   appendwrite)	ra   r   deferredrootdirnames	filenamesrc   rI   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   )rX   r.   fstatfilenoreadr   r5   st_mtimestatS_IMODEst_modeS_IFMTexternal_attrr;   r   writestr)ra   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   rB   z	adding %rrH   )r   r   r   r5   r;   r   r   S_IFREGr   r`   r   r   r   r   r   rR   _default_algorithmrc   r   rv   decoderS   r$   rT   )ra   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 )rE   N)rT   ).0r   rh   r   ra   s       r   	<genexpr>z"WheelFile.close.<locals>.<genexpr>   sX        11	5 IOe3T5Ee5LM     r   rA   )fpr9   rS   r   rZ   writer	writerowsitemswriterowrO   rR   r   getvaluer   close)ra   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)ri   rj   r9   rk   rl   rm   r   rn   )r   r   r   rq   r@   )r   r   r   r   r   r   r   rq   N)r   rj   r   r   r   r   r   rq   )r   rq   )r   r   r   __doc__r]   sha256r   r   rN   rX   r   r   r   r   r   r   r   r   r   :   s          !
 -0'	C C C C CP #& 	         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   rZ   r]   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 #' ' ' ' 'B B B B B B B B B Br   