o
    'f                     @  s   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
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dejZdZdd	d
ZG dd deZdS )    )annotationsN)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                 C  s6   t tjd| p
t } t| t} t| dd S )NSOURCE_DATE_EPOCHr      )intosenvirongettimemaxMINIMUM_TIMESTAMPgmtime)	timestamp r   G/home/ubuntu/flask/venv/lib/python3.10/site-packages/wheel/wheelfile.pyget_zipinfo_datetime   s   
r   c                   @  sR   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 )	WheelFilezA ZipFile derivative class that also reads SHA-256 hashes from
    .dist-info/RECORD and checks any read files against those.
    rc              
   C  s  t j|}t|| _|dr| jd u rtd|tj	| |||dd d
| jd| _| jd | _i | _i | _|dkrd	| j| j< d	| j| jd
 < d	| j| jd < z| | j}W n typ   td| j dd w |V tt|dddD ]B}|\}}}	|sq~|d\}
}zt|
 W n ty   td|
 d w |
 dv rtd|
 d|
t|df| j|< q~W d    d S 1 sw   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sha1zWeak hash algorithm (z) 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_path_file_hashes_file_sizesopenKeyErrorcsvreaderr   splithashlibnew
ValueErrorlowerr
   encode)selffilemoder   r)   recordliner(   hash_sumsize	algorithmr   r   r   r.   (   s^   


"zWheelFile.__init__Nc                   s    fdd}t |tr|jn||dkr*ds*| jvr*td dt| ||| |dkrRdsR| j \}d urRt	| j
| _
 S )Nc                   s@    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_origr   r   _update_crc^   s   
z#WheelFile.open.<locals>._update_crcr   /zNo hash found for file 'rG   )
isinstancer   filenamer-   r3   r   r   r5   r:   r;   rS   )r?   name_or_inforA   pwdrS   rF   r   rM   r   r5   ]   s   

zWheelFile.openc           	      C  s   t d| j d| d g }t|D ]G\}}}|  t|D ]9}tjtj	||}tj
|rZtj||tjjd}|| jkrGq!|drT|||f q!| || q!q|  |D ]
\}}| || qbd S )Nz
creating 'z' and adding 'z' to itrT   z
.dist-info)r	   inforV   r   walksortsortedr(   normpathjoinisfilerelpathreplacesepr2   r-   appendwrite)	r?   base_dirdeferredrootdirnames	filenamesnamer(   arcnamer   r   r   write_filesz   s&   

zWheelFile.write_filesc                 C  s   t |d}t| }| }W d    n1 sw   Y  t|p$|t|jd}t	|j
t|j
B d> |_|p>| j|_| ||| d S )Nrb	date_time   )r5   r   fstatfilenoreadr   r   st_mtimestatS_IMODEst_modeS_IFMTexternal_attrr   compress_typewritestr)r?   rV   rk   rz   fstdatazinfor   r   r   rd      s   
zWheelFile.writec                 C  s   t |trt|t d}| j|_dtjB d> |_t |tr"|	d}t
| ||| t |tr2|jn|}td| d || jkr_| |}|jt| df| j|< t|| j|< d S d S )Nrn   i  rp   r!   zadding 'rG   r'   )rU   strr   r   r   rz   ru   S_IFREGry   r>   r   r{   rV   r	   rY   r2   _default_algorithmrj   r   rJ   decoder3   lenr4   )r?   zinfo_or_arcnamer~   rz   fnamehash_r   r   r   r{      s*   





zWheelFile.writestrc                   s    j d ur< jdkr< jr<t }tj|dddd}| fdd j D  |t	 j
ddf   j
|  t  d S )	Nw,"
)	delimiter	quotecharlineterminatorc                 3  s0    | ]\}\}}||d  |  j | fV  qdS )r$   N)r4   ).0r   rF   r   r?   r   r   	<genexpr>   s
    

z"WheelFile.close.<locals>.<genexpr>r    )fprA   r3   r   r7   writer	writerowsitemswriterowr/   r2   r{   getvaluer   close)r?   r~   r   r   r   r   r      s   
zWheelFile.close)r   Nr   N)__name__
__module____qualname____doc__r:   sha256r   r   r.   r5   rl   rd   r{   r   r   r   r   r   r   !   s    
5

r   r   )
__future__r   r7   r:   os.pathr   reru   r   ior   r   zipfiler   r   r   	wheel.clir   
wheel.utilr	   r
   r   compileVERBOSEr*   r   r   r   r   r   r   r   <module>   s$    
