o
    5‘ð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   úa/root/parts/websockify/install/lib/python3.10/site-packages/setuptools/_vendor/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   z‚A 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rÓd	| 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}|\}}}	|sˆq~| d¡\}
}zt |
¡ W n ty¥   td|
› �ƒd ‚w |
 ¡ dv r´td|
› d�ƒ‚|
t| d¡ƒf| j|< q~W d   ƒ d S 1 sÌw   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    ý


ÿ
