o
    i"                     @  s  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rPd dlmZmZ e	de	jZd	Zed
ZG dd de Z!dddZ"dddZ#	ddddZ$G d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                   @  s   e Zd ZdS )r   N)__name__
__module____qualname__ r   r   L/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/wheel/wheelfile.pyr   !   s    r   databytesreturnc                 C  s   t | dS )z!urlsafe_b64encode without padding   =)base64urlsafe_b64encoderstrip)r   r   r   r   r   %   s   r   c                 C  s"   ddt | d@   }t| | S )z!urlsafe_b64decode without paddingr         )lenr   urlsafe_b64decode)r   padr   r   r   r    *   s   r    	timestampfloat | Nonetuple[int, int, int, int, int]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)r"   r   r   r   get_zipinfo_datetime0   s   
r/   c                   @  sh   e Zd ZdZejZdefd(d	d
Z		d)d*ddZ	d+ddZ
		d,d-dd Z	d.d/d$d%Zd0d&d'ZdS )1r   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              
   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)r4   
allowZip64z{}.dist-infonameverz/RECORDr0   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)selfr1   r2   r4   rA   recordliner@   hash_sumsize	algorithmr   r   r   rE   A   s^   


"zWheelFile.__init__Nname_or_infostr | ZipInfoLiteral['r', 'w']pwdbytes | Noner   	IO[bytes]c                   s   d fdd}t |tr|jn||dkr+ds+| jvr+td	 d
t| ||| |dkrSdsS| j \}d urSt	| j
| _
 S )Nnewdatar   r   Nonec                   s@    j }|  |  |r krtd dd S d S )NzHash mismatch for file '')_eofupdatedigestr   )rb   eofefef_nameexpected_hashrunning_hashupdate_crc_origr   r   _update_crc   s   
z#WheelFile.open.<locals>._update_crcr0   /zNo hash found for file 'rd   )rb   r   r   rc   )
isinstancer   filenamerD   rJ   r   r   rL   rQ   rR   ro   )rV   r\   r2   r_   ro   r[   r   ri   r   rL   {   s   

zWheelFile.openbase_dirstrrc   c           	      C  s   t d| j| g }t|D ]G\}}}|  t|D ]9}tjtj	||}tj
|rUtj||tjjd}|| jkrBq|drO|||f q| || qq|  |D ]
\}}| || q]d S )Nzcreating %r and adding %r to itrp   z
.dist-info)loginforr   r(   walksortsortedr@   normpathjoinisfilerelpathreplaceseprI   rD   appendwrite)	rV   rs   deferredrootdirnames	filenamesnamer@   arcnamer   r   r   write_files   s&   

zWheelFile.write_filesrr   r   
str | Nonecompress_type
int | Nonec                 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   )rL   r(   fstatfilenoreadr   r/   st_mtimestatS_IMODEst_modeS_IFMTexternal_attrr4   r   writestr)rV   rr   r   r   fstr   zinfor   r   r   r      s   
zWheelFile.writezinfo_or_arcnamer   SizedBuffer | strc                 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| || jkr\| |}|jt| df| j|< t|| j|< d S d S )Nr   i  r   r9   z	adding %rr?   )rq   rt   r   r/   r4   r   r   S_IFREGr   rU   r   r   rr   ru   rv   rI   _default_algorithmr   r   rg   decoderJ   r   rK   )rV   r   r   r   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)rK   ).0r   r[   r   rV   r   r   	<genexpr>   s
    

z"WheelFile.close.<locals>.<genexpr>r8   )fpr2   rJ   r   rN   writer	writerowsitemswriterowrF   rI   r   getvaluer   close)rV   r   r   r   r   r   r      s   
zWheelFile.close)r1   r   r2   r3   r4   r'   )r0   N)r\   r]   r2   r^   r_   r`   r   ra   )rs   rt   r   rc   r7   )rr   rt   r   r   r   r   r   rc   N)r   r]   r   r   r   r   r   rc   )r   rc   )r   r   r   __doc__rQ   sha256r   r   rE   rL   r   r   r   r   r   r   r   r   r   :   s     =
"r   )r   r   r   r   r   )r"   r#   r   r$   )&
__future__r   __all__r   rN   rQ   loggingos.pathr(   rer   r+   ior   r   typingr   r	   r
   zipfiler   r   r   	_typeshedr   r   compileVERBOSEr   r-   	getLoggerru   	Exceptionr   r   r    r/   r   r   r   r   r   <module>   s6    



