a
    xÏOc–  ã                   @   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	Z	d dl
mZ d dl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mZmZmZ ejdkr¼d d	lmZ d
d„ Zndd„ Ze  dej!¡Z"ddd„Z#G dd„ deƒZ$dS )é    )Úprint_functionN)ÚOrderedDict)Úlog)ÚZIP_DEFLATEDÚZipInfoÚZipFile)Ú
WheelError)Úurlsafe_b64decodeÚ
as_unicodeÚnativeÚurlsafe_b64encodeÚas_bytesÚStringIO)é   )ÚTextIOWrapperc                 C   s   t  t| ddd�¡S )NÚ úutf-8)ÚnewlineÚencoding)ÚcsvÚreaderr   )Úfp© r   úF/var/www/html/gsl.tools/lib/python3.9/site-packages/wheel/wheelfile.pyÚread_csv   s    r   c                 c   s$   t  | ¡D ]}dd„ |D ƒV  q
d S )Nc                 S   s   g | ]}|  d ¡‘qS )r   )Údecode)Ú.0Úcolumnr   r   r   Ú
<listcomp>   ó    zread_csv.<locals>.<listcomp>)r   r   )r   Úliner   r   r   r      s    zt^(?P<namever>(?P<name>.+?)-(?P<ver>.+?))(-(?P<build>\d[^-]*))?
     -(?P<pyver>.+?)-(?P<abi>.+?)-(?P<plat>.+?)\.whl$c                 C   s,   t tj d| pt ¡ ¡ƒ} t | ¡dd… S )NÚSOURCE_DATE_EPOCHr   é   )ÚintÚosÚenvironÚgetÚtimeÚgmtime)Ú	timestampr   r   r   Ú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 u r:td |¡ƒ‚t	j
| |||dd� d | j d¡¡| _| jd | _tƒ | _i | _|dk�r d	| j| j< d	| j| jd
 < d	| j| jd < z|  | j¡}W n" tyä   td | j¡ƒ‚Y n0 |�¤ t|ƒD ]Š}|\}}}	|�s
qô| d¡\}
}zt |
¡ W n" t�yH   td |
¡ƒ‚Y n0 |
 ¡ dv �rftd |
¡ƒ‚|
t| d¡ƒf| j|< qôW d   ƒ n1 �s–0    Y  d S )Nz.whlzBad wheel filename {!r}T)ÚcompressionÚ
allowZip64z{}.dist-infoZnameverz/RECORDr,   )NNz.jwsz.p7szMissing {} fileú=zUnsupported hash algorithm: {}>   Úsha1Úmd5z4Weak hash algorithm ({}) is not permitted by PEP 427Úascii)r$   ÚpathÚbasenameÚWHEEL_INFO_REÚmatchZparsed_filenameÚendswithr   Úformatr   Ú__init__ÚgroupZdist_info_pathÚrecord_pathr   Ú_file_hashesÚ_file_sizesÚopenÚKeyErrorr   ÚsplitÚhashlibÚnewÚ
ValueErrorÚlowerr	   Úencode)ÚselfÚfileÚmoder-   r4   Úrecordr    r3   Zhash_sumÚsizeÚ	algorithmr   r   r   r9   1   sF    

ÿÿÿzWheelFile.__init__Nc                    s°   d‡ ‡‡‡‡fdd„	}t t|tƒr(|jn|ƒ‰|dkr\ˆ d¡s\ˆ| jvr\td tˆƒ¡ƒ‚t	 
| |||¡‰ |dkr¬ˆ d¡s¬| jˆ \}‰ˆd ur¬t |¡‰ˆ j| ‰ˆ _ˆ S )Nc                    sR   |d u rˆ j }ˆ| ƒ n
ˆ| |ƒ ˆ | ¡ |rNˆ ¡ ˆkrNtd tˆƒ¡ƒ‚d S )NzHash mismatch for file '{}')Ú_eofÚupdateÚdigestr   r8   r   )Ú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 '{}')N)r
   Ú
isinstancer   Úfilenamer7   r<   r   r8   r   r   r>   rA   rB   rR   )rF   Zname_or_inforH   ÚpwdrR   rK   r   rQ   r   r>   ]   s    ÿ
zWheelFile.openc           	      C   sÔ   t  d| j|¡ g }t |¡D ]Ž\}}}| ¡  t|ƒD ]r}tj tj 	||¡¡}tj 
|¡r8tj ||¡ tjjd¡}|| jkr„q8| d¡rž| ||f¡ q8|  ||¡ q8q| ¡  |D ]\}}|  ||¡ qºd S )Nz#creating '%s' and adding '%s' to itrS   z
.dist-info)ÚloggerÚinforU   r$   ÚwalkÚsortÚsortedr3   ÚnormpathÚjoinÚisfileÚrelpathÚreplaceÚsepr;   r7   ÚappendÚwrite)	rF   Úbase_dirÚdeferredÚrootÚdirnamesÚ	filenamesÚnamer3   Úarcnamer   r   r   Úwrite_filesx   s     

zWheelFile.write_filesc                 C   s’   t |dƒ�&}t | ¡ ¡}| ¡ }W d   ƒ n1 s60    Y  t|pH|t|jƒd�}t 	|j
¡t |j
¡B d> |_|p|| j|_|  |||¡ d S )NÚrb©Ú	date_timeé   )r>   r$   ÚfstatÚfilenoÚreadr   r*   Úst_mtimeÚstatÚS_IMODEÚst_modeÚS_IFMTÚexternal_attrr-   Úcompress_typeÚwritestr)rF   rU   rj   ry   ÚfÚstÚdataÚzinfor   r   r   rc   Ž   s    &zWheelFile.writec                 C   sr   t  | |||¡ t|tƒr |jn|}t d|¡ || jkrn|  |¡}|j	t
t| ¡ ƒƒf| j|< t|ƒ| j|< d S )Nzadding '%s')r   rz   rT   r   rU   rW   rX   r;   Ú_default_algorithmri   r   r   rN   r<   Úlenr=   )rF   Úzinfo_or_arcnameÚbytesry   ÚfnameÚhash_r   r   r   rz   ˜   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¡ ttˆ j
ƒtƒ d	�}ˆ j|_d
|_ˆ  |t| ¡ ƒ¡ t ˆ ¡ d S )NÚwú,ú"Ú
)Ú	delimiterÚ	quotecharÚlineterminatorc                 3   s.   | ]&\}\}}||d  | ˆ j | fV  qdS )r/   N)r=   )r   rƒ   rK   r„   ©rF   r   r   Ú	<genexpr>§   s
   
ü
ýz"WheelFile.close.<locals>.<genexpr>r   rm   i  ´)r   rH   r<   r   r   ÚwriterÚ	writerowsÚitemsÚwriterowr8   r;   r   r   r*   r-   ry   rx   rz   r   Úgetvaluer   Úclose)rF   r}   rŽ   r~   r   rŒ   r   r“   ¢   s    úzWheelFile.close)r,   N)NN)N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rA   Úsha256r   r   r9   r>   rk   rc   rz   r“   r   r   r   r   r+   *   s   ,




r+   )N)%Ú
__future__r   r   rA   Úos.pathr$   Úrert   Úsysr'   Úcollectionsr   Ú	distutilsr   rW   Úzipfiler   r   r   Z	wheel.clir   Z
wheel.utilr	   r
   r   r   r   r   Úversion_infoÚior   r   ÚcompileÚVERBOSEr5   r*   r+   r   r   r   r   Ú<module>   s,    

ý
