o
    6‘ðiH$  ã                   @  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   úN/root/parts/websockify/install/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   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ü| j|  ¡ vrj| j ¡ d	 }|  ¡ D ]}| ¡ |kri| dd
¡d | _|| _ nqSd| j| j< d| j| jd < d| j| jd < z|  | j¡}W n ty™   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   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)Úselfr1   r2   r4   rB   ÚloweredÚnameÚrecordÚlinerA   Úhash_sumÚsizeÚ	algorithmr   r   r   rF   A   sn   
ÿýÿÿ
ÿþÿ
ÿþë"ÿé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   )rg   Ú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 'ri   )rg   r   r   rh   )Ú
isinstancer   ÚfilenamerE   rK   r   r   rP   rU   rV   rt   )rY   ra   r2   rd   rt   r`   r   rn   r   rP   †   s   ÿÿ

zWheelFile.openÚbase_dirÚstrrh   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 itru   z
.dist-info)ÚlogÚinforw   r(   ÚwalkÚsortÚsortedrA   ÚnormpathÚjoinÚisfileÚrelpathÚreplaceÚseprJ   rE   ÚappendÚwrite)	rY   rx   ÚdeferredÚrootÚdirnamesÚ	filenamesr[   rA   Úarcnamer   r   r   Úwrite_files¨   s&   

€÷ÿzWheelFile.write_filesrw   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é   )rP   r(   ÚfstatÚfilenoÚreadr   r/   Úst_mtimeÚstatÚS_IMODEÚst_modeÚS_IFMTÚexternal_attrr4   rŽ   Úwritestr)rY   rw   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“   r:   z	adding %rr@   )rv   ry   r   r/   r4   rŽ   r˜   ÚS_IFREGrœ   rX   r   r�   rw   rz   r{   rJ   Ú_default_algorithmr[   r   rl   ÚdecoderK   r   rL   )rY   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)rL   )Ú.0r¦   r`   r§   ©rY   r   r   Ú	<genexpr>ô   s
   € 
ÿ
ÿz"WheelFile.close.<locals>.<genexpr>r9   )Úfpr2   rK   r   rR   ÚwriterÚ	writerowsÚitemsÚwriterowrG   rJ   r�   Úgetvaluer   Úclose)rY   r   r³   r   r°   r   r¸   î   s   
þÿzWheelFile.close)r1   r   r2   r3   r4   r'   )r0   N)ra   rb   r2   rc   rd   re   r   rf   )rx   ry   r   rh   r8   )rw   ry   r‹   r�   rŽ   r�   r   rh   ©N)r¡   rb   r   r¢   rŽ   r�   r   rh   )r   rh   )r   r   r   Ú__doc__rU   Úsha256r¤   r   rF   rP   rŒ   r†   r�   r¸   r   r   r   r   r   :   s     üHü
"üür   )r   r   r   r   r¹   )r"   r#   r   r$   )&Ú
__future__r   Ú__all__r   rR   rU   ÚloggingÚos.pathr(   Úrer˜   r+   Úior   r   Útypingr   r	   r
   Úzipfiler   r   r   Ú	_typeshedr   r   ÚcompileÚVERBOSEr   r-   Ú	getLoggerrz   Ú	Exceptionr   r   r    r/   r   r   r   r   r   Ú<module>   s6    ý


ÿ
