U
    ZÊ¹jÛ   ã                   @  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mZmZ d dlmZ d dlmZmZmZ erÞd dlmZmZmZ d d	lmZ eeej e f Z!G d
d„ deeeƒZ"e #dej$¡Z%dZ&dddœdd„Z'G dd„ deƒZ(dS )é    )ÚannotationsN)ÚStringIOÚTextIOWrapper)ÚIOÚTYPE_CHECKINGÚLiteral)ÚZIP_DEFLATEDÚZipFileÚZipInfo)Ú
WheelError)ÚlogÚurlsafe_b64decodeÚurlsafe_b64encode)ÚProtocolÚSizedÚUnion)ÚBufferc                   @  s   e Zd ZdS )ÚSizedBufferN)Ú__name__Ú
__module__Ú__qualname__© r   r   úN/var/www/html/bwave/python/venv/lib/python3.8/site-packages/wheel/wheelfile.pyr      s    r   zŠ^(?P<namever>(?P<name>[^\s-]+?)-(?P<ver>[^\s-]+?))(-(?P<build>\d[^\s-]*))?
     -(?P<pyver>[^\s-]+?)-(?P<abi>[^\s-]+?)-(?P<plat>\S+)\.whl$i ¦Îzfloat | None©Ú	timestampc                 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Úgmtimer   r   r   r   Úget_zipinfo_datetime$   s    
r%   c                   @  s„   e Zd ZdZejZdefddddœdd„Zd!d
ddddœdd„Z	ddœdd„Z
d"dddddœdd„Zd#d
dddœdd„Zdd „ Zd	S )$Ú	WheelFilez‚A ZipFile derivative class that also reads SHA-256 hashes from
    .dist-info/RECORD and checks any read files against those.
    ÚrÚStrPathzLiteral[('r', 'w', 'x', 'a')]r   )ÚfileÚmodeÚcompressionc              
   C  s¨  t j |¡}t |¡| _| d¡r,| jd k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k
rè   td| j› d�ƒd ‚Y nX |�° t t|ddd�¡D ]”}|\}}}	|�s�q| d¡\}
}zt |
¡ W n& tk
�r^   td|
› �ƒd ‚Y nX |
 ¡ dk�r~td|
› d�ƒ‚|
t| d¡ƒf| j|< �qW 5 Q R X d S )Nz.whlzBad wheel filename T)r+   Ú
allowZip64z{}.dist-infoZnameverz/RECORDr'   )NNz.jwsz.p7szMissing z fileÚ úutf-8)ÚnewlineÚencodingú=zUnsupported hash algorithm: >   Úsha1Úmd5zWeak hash algorithm (z) is not permitted by PEP 427Úascii)r   ÚpathÚbasenameÚWHEEL_INFO_REÚmatchZparsed_filenameÚendswithr   r	   Ú__init__ÚformatÚgroupZdist_info_pathÚrecord_pathÚ_file_hashesÚ_file_sizesÚopenÚKeyErrorÚcsvÚreaderr   ÚsplitÚhashlibÚnewÚ
ValueErrorÚlowerr   Úencode)Úselfr)   r*   r+   r6   ÚrecordÚliner5   Zhash_sumÚsizeÚ	algorithmr   r   r   r:   3   sT    
ÿ
ÿ
ÿþ
ÿþzWheelFile.__init__Nzstr | ZipInfozLiteral[('r', 'w')]zbytes | Nonez	IO[bytes])Úname_or_infor*   ÚpwdÚreturnc                   s°   dddœ‡ ‡‡‡‡fdd„}t |tƒr,|jn|‰|dkr\ˆ d¡s\ˆ| jkr\tdˆ› d	�ƒ‚t | |||¡‰ |dkr¬ˆ d¡s¬| jˆ \}‰ˆd k	r¬t 	|¡‰ˆ j
| ‰ˆ _
ˆ S )
NÚbytesÚNone)ÚnewdatarQ   c                   s<   ˆ j }ˆ| ƒ ˆ | ¡ |r8ˆ ¡ ˆkr8tdˆ› d�ƒ‚d S )NzHash mismatch for file 'ú')Ú_eofÚupdateÚdigestr   )rT   Úeof©ZefZef_nameZexpected_hashZrunning_hashZupdate_crc_origr   r   Ú_update_crcs   s
    
z#WheelFile.open.<locals>._update_crcr'   ú/zNo hash found for file 'rU   )Ú
isinstancer
   Úfilenamer9   r>   r   r	   r@   rE   rF   r[   )rJ   rO   r*   rP   r[   rN   r   rZ   r   r@   m   s"    ÿÿþý
zWheelFile.openÚstr)Úbase_dirc           	      C  sÞ   t  d| j› d|› d�¡ g }t |¡D ]Ž\}}}| ¡  t|ƒD ]r}tj tj 	||¡¡}tj 
|¡rBtj ||¡ tjjd¡}|| jkrŽqB| d¡r¨| ||f¡ qB|  ||¡ qBq(| ¡  |D ]\}}|  ||¡ qÄd S )Nz
creating 'z' and adding 'z' to itr\   z
.dist-info)r   Úinfor^   r   ÚwalkÚsortÚsortedr5   ÚnormpathÚjoinÚisfileÚrelpathÚreplaceÚsepr=   r9   ÚappendÚwrite)	rJ   r`   ÚdeferredÚrootÚdirnamesÚ	filenamesÚnamer5   Úarcnamer   r   r   Úwrite_files�   s     

zWheelFile.write_filesz
str | Nonez
int | NonerS   )r^   rr   Úcompress_typerQ   c              	   C  s~   t |dƒ�}t | ¡ ¡}| ¡ }W 5 Q R X t|p4|t|jƒd�}t 	|j
¡t |j
¡B d> |_|ph| j|_|  |||¡ d S )NÚrb©Ú	date_timeé   )r@   r   ÚfstatÚfilenoÚreadr
   r%   Úst_mtimeÚstatÚS_IMODEÚst_modeÚS_IFMTÚexternal_attrr+   rt   Úwritestr)rJ   r^   rr   rt   ÚfÚstÚdataÚzinfor   r   r   rl   ¥   s     ÿzWheelFile.writezSizedBuffer | str)Úzinfo_or_arcnamer…   rt   c                 C  s¾   t |tƒr0t|tƒ d�}| j|_dtjB d> |_t |tƒrD| 	d¡}t
 | |||¡ t |tƒrd|jn|}t d|› d�¡ || jkrº|  |¡}|jt| ¡ ƒ d¡f| j|< t|ƒ| j|< d S )Nrv   i´  rx   r.   zadding 'rU   r4   )r]   r_   r
   r%   r+   rt   r}   ÚS_IFREGr�   rI   r	   r‚   r^   r   ra   r=   Ú_default_algorithmrq   r   rX   Údecoder>   Úlenr?   )rJ   r‡   r…   rt   ÚfnameÚhash_r   r   r   r‚   ¶   s*    
 ÿ

ÿý

þ
zWheelFile.writestrc                   s†   ˆ j d k	rxˆ jdkrxˆ jrxtƒ }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  s.   | ]&\}\}}||d  | ˆ j | fV  qdS )r1   N)r?   )Ú.0rŒ   rN   r�   ©rJ   r   r   Ú	<genexpr>Û   s   
ÿz"WheelFile.close.<locals>.<genexpr>r-   )Úfpr*   r>   r   rB   ÚwriterÚ	writerowsÚitemsÚwriterowr;   r=   r‚   Úgetvaluer	   Úclose)rJ   r…   r™   r   r–   r   rž   Õ   s    
þÿzWheelFile.close)r'   N)NN)N)r   r   r   Ú__doc__rE   Úsha256r‰   r   r:   r@   rs   rl   r‚   rž   r   r   r   r   r&   ,   s   ü=  ü"  ü ür&   )N))Ú
__future__r   rB   rE   Úos.pathr   Úrer}   r!   Úior   r   Útypingr   r   r   Úzipfiler   r	   r
   Z	wheel.clir   Z
wheel.utilr   r   r   r   r   r   Útyping_extensionsr   r_   ÚPathLiker(   r   ÚcompileÚVERBOSEr7   r#   r%   r&   r   r   r   r   Ú<module>   s.   ý