U
    c                     @   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
 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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StringIOz^(?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 )NZSOURCE_DATE_EPOCHr      )intosenvirongettimegmtime)	timestamp r   M/var/www/html/TransitoApp/venv/lib/python3.8/site-packages/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 )	WheelFilezA 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 | _t | _i | _|dkrd	| j| j< d	| j| jd
 < d	| j| jd < z| | j}W n$ tk
r   td| jY nX | |D ]}|d}|dd\}}}	|r|d\}
}zt|
 W n$ tk
rV   td|
Y nX |
 dkrttd|
|
t|df| j|< qW 5 Q R X d S )Nz.whlzBad wheel filename {!r}T)compression
allowZip64z{}.dist-infoZnameverz/RECORDr   )NNz.jwsz.p7szMissing {} filezutf-8,   =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KeyErrordecodersplitsplithashlibnew
ValueErrorlowerr	   encode)selffilemoder   r%   recordliner$   Zhash_sumsize	algorithmr   r   r   r*   &   sH    

 zWheelFile.__init__Nc                    s   d fdd	}t | ||| tt|tr8|jn||dkrds| jkrltd	t
| j \}d k	rt| j|  _ S )Nc                    sR   |d kr j }|  n
| | |  |rN krNtdtd S )NzHash mismatch for file '{}')_eofupdatedigestr   r)   r   )newdataeofZefZef_nameZexpected_hashZrunning_hashZupdate_crc_origr   r   _update_crcR   s    


z#WheelFile.open.<locals>._update_crcr   /zNo hash found for file '{}')N)r   r/   r
   
isinstancer   filenamer(   r-   r   r)   r   r4   r5   rF   )r9   Zname_or_infor;   pwdrF   r?   r   rE   r   r/   Q   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rq8|dr|||f q8| || q8q|  |D ]\}}| || qd S )Nz#creating '%s' and adding '%s' to itrG   z
.dist-info)loggerinforI   r   walksortsortedr$   normpathjoinisfilerelpathreplacesepr,   r(   appendwrite)	r9   base_dirZdeferredrootdirnames	filenamesnamer$   arcnamer   r   r   write_filesl   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   )r/   r   fstatfilenoreadr   r   st_mtimestatS_IMODEst_modeS_IFMTexternal_attrr   compress_typewritestr)r9   rI   r]   rl   fstdatazinfor   r   r   rW      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   rm   rH   r   rI   rK   rL   r,   _default_algorithmr\   r   r   rB   r-   lenr.   )r9   zinfo_or_arcnamebytesrl   fnamehash_r   r   r   rm      s    

zWheelFile.writestrc                    s    j d k	r jdkr jrt }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wr   "
)	delimiterZ	quotecharZlineterminatorc                 3   s.   | ]&\}\}}||d  |  j | fV  qdS )r    N)r.   ).0rv   r?   rw   r9   r   r   	<genexpr>   s
   

z"WheelFile.close.<locals>.<genexpr> r`   i  )fpr;   r-   r   csvwriterZ	writerowsitemsZwriterowr)   r,   r   r   r   r   rl   rk   rm   r   getvaluer   close)r9   rp   r   rq   r   r}   r   r      s    zWheelFile.close)r   N)NN)N)__name__
__module____qualname____doc__r4   Zsha256rr   r   r*   r/   r^   rW   rm   r   r   r   r   r   r      s   +




r   )N) 
__future__r   r   r4   os.pathr   rerg   r   collectionsr   	distutilsr   rK   zipfiler   r   r   Z	wheel.clir   Z
wheel.utilr	   r
   r   r   r   r   compileVERBOSEr&   r   r   r   r   r   r   <module>   s"    
