
    lcp                        d dl m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
 d dlmZmZ d dlmZmZmZ d dlmZ d dlmZmZmZ  ej        dej                  Zd	Zdd
Z G d de          ZdS )    )annotationsN)OrderedDict)StringIOTextIOWrapper)ZIP_DEFLATEDZipFileZipInfo)
WheelError)logurlsafe_b64decodeurlsafe_b64encodez^(?P<namever>(?P<name>[^\s-]+?)-(?P<ver>[^\s-]+?))(-(?P<build>\d[^\s-]*))?
     -(?P<pyver>[^\s-]+?)-(?P<abi>[^\s-]+?)-(?P<plat>\S+)\.whl$i 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)	timestamps    /lib/python3.11/site-packages/wheel/wheelfile.pyget_zipinfo_datetimer      sV     BJNN#6	8PTY[[QQRRII011I;y!!!A#&&    c                  P    e Zd ZdZej        ZdefdZd
dZ	d Z
ddZddZd	 ZdS )	WheelFilezA ZipFile derivative class that also reads SHA-256 hashes from
    .dist-info/RECORD and checks any read files against those.
    rc                   t           j                            |          }t                              |          | _        |                    d          r| j        t          d|          t          j	        | |||d           d
                    | j                            d                    | _        | j        dz   | _        t                      | _        i | _        |dk    rud	| j        | j        <   d	| j        | j        d
z   <   d	| j        | j        dz   <   	 |                     | j                  }n&# t$          $ r t          d| j         d          w xY w|5  t'          j        t+          |dd                    D ]}|\  }}}	|s|                    d          \  }
}	 t/          j        |
           n # t2          $ r t          d|
           w xY w|
                                dv r"t          d
                    |
                    |
t7          |                    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)compression
allowZip64z{}.dist-infonameverz/RECORDr   NNz.jwsz.p7szMissing z file utf-8)newlineencoding=zUnsupported hash algorithm: >   md5sha1z4Weak hash algorithm ({}) is not permitted by PEP 427ascii)r   pathbasenameWHEEL_INFO_REmatchparsed_filenameendswithr
   r   __init__formatgroupdist_info_pathrecord_pathr   _file_hashes_file_sizesopenKeyErrorcsvreaderr   splithashlibnew
ValueErrorlowerr   encode)selffilemoder!   r.   recordliner-   hash_sumsize	algorithms              r   r3   zWheelFile.__init__)   s   7##D)),228<<  (( 	AD,@ 	A?8??@@@tT{tTTTT,33 &&y11
 
  .:'MM3; #	2<Dd./;EDd.78;EDd.78E4#344 E E E !CD,<!C!C!CDDDE   J!&"wGGG   D ,0(D(D# ! *2..*=*='IxUI....% U U U()S	)S)STTTU !((O; (""(&"3"3   ")(//'*B*BCC/D%d++'                 #	 #	s8   D7 7#EAI(F=<I=GA(IIINc                  	
 	
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 )Nc                    j         } |                                |            |r+                                k    rt          d d          d S d S )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]   s    'COG$$$((( H|**,,= H !FG!F!F!FGGGH H H Hr   r   /zNo hash found for file 'rN   )
isinstancer	   filenamer2   r8   r
   r   r:   r?   r@   rY   )rD   name_or_inforF   pwdrY   rK   rT   rU   rV   rW   rX   s         @@@@@r   r:   zWheelFile.open\   s,   	H 	H 	H 	H 	H 	H 	H 	H 	H &0g%F%FXL!!L 	 CK	D$$S))	D t00	D
 BBBBCCC\$dC883; 	Nw//44 	N'+'8'A$I} N  '{95524.+/	r   c                   t          j        d| j         d| d           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 'z' and adding 'z' to itrZ   z
.dist-info)r   infor\   r   walksortsortedr-   normpathjoinisfilerelpathreplacesepr7   r2   appendwrite)	rD   base_dirdeferredrootdirnames	filenamesnamer-   arcnames	            r   write_fileszWheelFile.write_filesy   su   LdmLL8LLLMMM)+):): 	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   c                   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   )r:   r   fstatfilenoreadr	   r   st_mtimestatS_IMODEst_modeS_IFMTexternal_attrr!   compress_typewritestr)rD   r\   rr   r   fstdatazinfos           r   rk   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c                   t          |t                    r|                    d          }t          j        | |||           t          |t
                    r|j        n|}t          j        d| d           || j	        k    rq| 
                    |          }|j        t          |                                                              d          f| j        |<   t!          |          | j        |<   d S d S )Nr&   zadding 'rN   r,   )r[   strrC   r   r   r	   r\   r   r`   r7   _default_algorithmrq   r   rQ   decoder8   lenr9   )rD   zinfo_or_arcnamer   r   fnamehash_s         r   r   zWheelFile.writestr   s    dC   	(;;w''D/}EEE *G44"%%! 	
 	$E$$$%%%D$$ 	0++D11E
!%,,..1188AA(De$ '*$iiDU###	0 	0r   c                ,     j          j        dk    r j        rt                      }t	          j        |ddd          }|                     fd j                                        D                        |                    t           j
                  ddf           t           j
        t                                } j        |_        d	|_                             ||                                           t%          j                    d S )
Nw,"
)	delimiter	quotecharlineterminatorc              3  P   K   | ] \  }\  }}||d z   |z   j         |         fV  !dS )r)   N)r9   ).0r   rK   r   rD   s       r   	<genexpr>z"WheelFile.close.<locals>.<genexpr>   sX        11	5 IOe3T5Ee5LM     r   r%   rv   i  )fprF   r8   r   r<   writer	writerowsitemswriterowr4   r7   r	   r   r!   r   r   r   getvaluer   close)rD   r   r   r   s   `   r   r   zWheelFile.close   s   7 	249#3 	28I 	2::DZsSWXXXF   595F5L5L5N5N     OOVD$455r2>???D,8L8N8NOOOE"&"2E"-EMM%111dr   )r   Nr$   N)__name__
__module____qualname____doc__r?   sha256r   r   r3   r:   rs   rk   r   r    r   r   r   r   "   s          !"%< 1 1 1 1f   :& & &,
2 
2 
2 
20 0 0 0&    r   r   r   )
__future__r   r<   r?   os.pathr   rer}   r   collectionsr   ior   r   zipfiler   r   r	   	wheel.clir
   
wheel.utilr   r   r   compileVERBOSEr/   r   r   r   r   r   r   <module>r      s?   " " " " " " 



   				   # # # # # # & & & & & & & & 2 2 2 2 2 2 2 2 2 2             @ @ @ @ @ @ @ @ @ @ 
CJ 
  ' ' ' '] ] ] ] ] ] ] ] ] ]r   