U
    aÊ¹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 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   úa/var/www/html/bwave/python/venv/lib/python3.8/site-packages/setuptools/_vendor/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 )Ú	WheelFilez‚A 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 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)ÚcompressionÚ
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)ÚselfÚfileÚmoder   r'   ÚrecordÚliner&   Zhash_sumÚsizeÚ	algorithmr   r   r   r+   (   sT    
ÿ
ÿ
ÿþ
ÿþzWheelFile.__init__Nc                   s¨   ‡ ‡‡‡‡fdd„}t |tƒr$|jn|‰|dkrTˆ d¡sTˆ| jkrTtdˆ› d�ƒ‚t | |||¡‰ |dkr¤ˆ d¡s¤| jˆ \}‰ˆd k	r¤t 	|¡‰ˆ j
| ‰ˆ _
ˆ S )Nc                   s<   ˆ j }ˆ| ƒ ˆ | ¡ |r8ˆ ¡ ˆkr8tdˆ› d�ƒ‚d S )NzHash mismatch for file 'ú')Ú_eofÚupdateÚdigestr   )ÚnewdataÚeof©ZefZef_nameZexpected_hashZrunning_hashZupdate_crc_origr   r   Ú_update_crc^   s
    
z#WheelFile.open.<locals>._update_crcr   ú/zNo hash found for file 'rB   )Ú
isinstancer   Úfilenamer*   r/   r   r   r1   r6   r7   rI   )r;   Zname_or_infor=   ÚpwdrI   rA   r   rH   r   r1   ]   s"    ÿÿþý
zWheelFile.openc           	      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 itrJ   z
.dist-info)r	   ÚinforL   r   ÚwalkÚsortÚsortedr&   ÚnormpathÚjoinÚisfileÚrelpathÚreplaceÚsepr.   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 5 Q R X t|p4|t|jƒd�}t 	|j
¡t |j
¡B d> |_|ph| j|_|  |||¡ d S )NÚrb©Ú	date_timeé   )r1   r   ÚfstatÚfilenoÚreadr   r   Úst_mtimeÚstatÚS_IMODEÚst_modeÚS_IFMTÚexternal_attrr   Úcompress_typeÚwritestr)r;   rL   r`   ro   ÚfÚstÚdataÚzinfor   r   r   rY   �   s     ÿzWheelFile.writec                 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 )Nrc   i´  re   r   zadding 'rB   r%   )rK   Ústrr   r   r   ro   rj   ÚS_IFREGrn   r:   r   rp   rL   r	   rN   r.   Ú_default_algorithmr_   r   rE   Údecoder/   Úlenr0   )r;   Úzinfo_or_arcnamers   ro   ÚfnameÚhash_r   r   r   rp   œ   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 )r"   N)r0   )Ú.0r{   rA   r|   ©r;   r   r   Ú	<genexpr>¼   s   
ÿz"WheelFile.close.<locals>.<genexpr>r   )Úfpr=   r/   r   r3   ÚwriterÚ	writerowsÚitemsÚwriterowr,   r.   rp   Úgetvaluer   Úclose)r;   rs   rˆ   r   r…   r   r�   ¶   s    
þÿzWheelFile.close)r   N)NN)N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r6   Úsha256rw   r   r+   r1   ra   rY   rp   r�   r   r   r   r   r   !   s   5


r   )N)Ú
__future__r   r3   r6   Úos.pathr   Úrerj   r   Úior   r   Úzipfiler   r   r   Z	wheel.clir   Z
wheel.utilr	   r
   r   ÚcompileÚVERBOSEr(   r   r   r   r   r   r   r   Ú<module>   s"   ý
