a
    (b                     @   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rd 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   _/Users/vegardjervell/Documents/master/model/venv/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 )	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 u 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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|< qW d    n1 s0    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: {}>   md5sha1z4Weak 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rt| 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rq8|dr|||f q8| || q8q|  |D ]\}}| || qd 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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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,    


