U
    &%ez«  ã                   @   sÒ  d dl mZ d dlZd dlZd dlZ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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mZmZ ddlmZ ddlmZmZmZm Z  dd	l!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+ dd
l,m-Z-m.Z. e	 /e0¡Z1da2e3edƒr0dZ4n*ej5 6d¡rDdZ4nej5dkrVdZ4ndZ4e 7d¡Z8e8s|dej9dd…  Z8de8 Z:e4e8 Z;e+ƒ  <dd¡ <dd¡Z=e 7d¡Z>e>rÖe> 6d¡rÖe> <dd¡ ?d¡d  Z>ndd„ Z@e@ƒ Z>[@e AdejBejCB ¡ZDe AdejBejCB ¡ZEe Ad¡ZFe Ad ¡ZGd!ZHd"ZIe
jJd#kr@d$d%„ ZKnd&d%„ ZKej9d  d'k rbd dlLZLndZLd dlMZNd dlOZNd(d)„ ZPd*d+„ ZQG d,d-„ d-eRƒZSeSƒ ZTG d.d/„ d/eRƒZUd0d1„ ZVd2d3„ ZWeWƒ ZX[Wd6d4d5„ZYdS )7é    )Úunicode_literalsN)Úmessage_from_fileé   )Ú__version__ÚDistlibException)Ú	sysconfigÚZipFileÚfsdecodeÚ	text_typeÚfilter)ÚInstalledDistribution)ÚMetadataÚMETADATA_FILENAMEÚWHEEL_METADATA_FILENAMEÚLEGACY_METADATA_FILENAME)
ÚFileOperatorÚconvert_pathÚ	CSVReaderÚ	CSVWriterÚCacheÚcached_propertyÚget_cache_baseÚread_exportsÚtempdirÚget_platform)ÚNormalizedVersionÚUnsupportedVersionErrorÚpypy_version_infoÚppÚjavaÚjyÚcliÚipÚcpÚpy_version_nodotz%s%sé   Úpyú-Ú_Ú.ÚSOABIzcpython-c                  C   sž   dt g} t d¡r|  d¡ tdkr”tjd d… }|dk r”t d¡}|d krPd}|r^|  d¡ |d	k r”t d
¡}|dksŠ|d kr”tjdkr”|  d¡ d | ¡S )Nr#   ÚPy_DEBUGÚdr%   )é   é   ÚWITH_PYMALLOCTÚm)r-   r-   ÚPy_UNICODE_SIZEé   iÿÿ ÚuÚ )	Ú
VER_SUFFIXr   Úget_config_varÚappendÚ
IMP_PREFIXÚsysÚversion_infoÚ
maxunicodeÚjoin)ÚpartsÚviZwpmÚus© r@   úX/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/pip/_vendor/distlib/wheel.pyÚ_derive_abi;   s     





rB   zz
(?P<nm>[^-]+)
-(?P<vn>\d+[^-]*)
(-(?P<bn>\d+[^-]*))?
-(?P<py>\w+\d+(\.\w+\d+)*)
-(?P<bi>\w+)
-(?P<ar>\w+(\.\w+)*)
\.whl$
z7
(?P<nm>[^-]+)
-(?P<vn>\d+[^-]*)
(-(?P<bn>\d+[^-]*))?$
s   \s*#![^\r\n]*s   ^(\s*#!("[^"]+"|\S+))\s+(.*)$s   #!pythons	   #!pythonwú/c                 C   s   | S ©Nr@   ©Úor@   r@   rA   Ú<lambda>e   ó    rG   c                 C   s   |   tjd¡S )NrC   )ÚreplaceÚosÚseprE   r@   r@   rA   rG   g   rH   r-   c                   C   s"   t rdd„ t  ¡ D ƒS tjjS d S )Nc                 S   s   g | ]}|d  ‘qS )r   r@   ©Ú.0Úsr@   r@   rA   Ú
<listcomp>r   s     z!_get_suffixes.<locals>.<listcomp>)ÚimpZget_suffixesÚ	importlibÚ	machineryÚEXTENSION_SUFFIXESr@   r@   r@   rA   Ú_get_suffixesp   s    rT   c                 C   sH   t rt  | |¡S tj | |¡}tj |¡}|tj| < |j 	|¡ |S d S rD   )
rP   Zload_dynamicrQ   ÚutilÚspec_from_file_locationÚmodule_from_specr9   ÚmodulesÚloaderÚexec_module)ÚnameÚpathÚspecÚmoduler@   r@   rA   Ú_load_dynamicv   s    
r_   c                   @   s6   e Zd Zdd„ Zdd„ Zdd„ Zddd	„Zd
d„ ZdS )ÚMounterc                 C   s   i | _ i | _d S rD   )Úimpure_wheelsÚlibs©Úselfr@   r@   rA   Ú__init__‚   s    zMounter.__init__c                 C   s   || j |< | j |¡ d S rD   )ra   rb   Úupdate)rd   ÚpathnameÚ
extensionsr@   r@   rA   Úadd†   s    
zMounter.addc                 C   s0   | j  |¡}|D ]\}}|| jkr| j|= qd S rD   )ra   Úpoprb   )rd   rg   rh   ÚkÚvr@   r@   rA   ÚremoveŠ   s    
zMounter.removeNc                 C   s   || j kr| }nd }|S rD   )rb   )rd   Úfullnamer\   Úresultr@   r@   rA   Úfind_module   s    
zMounter.find_modulec                 C   sh   |t jkrt j| }nN|| jkr,td| ƒ‚t|| j| ƒ}| |_| dd¡}t|ƒdkrd|d |_|S )Nzunable to find extension for %sr)   r   r   )	r9   rX   rb   ÚImportErrorr_   Ú
__loader__ÚrsplitÚlenÚ__package__)rd   rn   ro   r=   r@   r@   rA   Úload_module—   s    


zMounter.load_module)N)Ú__name__Ú
__module__Ú__qualname__re   ri   rm   rp   rv   r@   r@   r@   rA   r`      s
   
r`   c                   @   sî   e Zd ZdZdZdZd4dd„Zedd	„ ƒZed
d„ ƒZ	edd„ ƒZ
edd„ ƒZdd„ Zedd„ ƒZdd„ Zd5dd„Zdd„ Zdd„ Zdd„ Zd6dd„Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd7d,d-„Zd.d/„ Zd0d1„ Zd8d2d3„ZdS )9ÚWheelz@
    Class to build and install from Wheel files (PEP 427).
    )r   r   Úsha256NFc                 C   s8  || _ || _d| _tg| _dg| _dg| _t ¡ | _	|dkrRd| _
d| _| j| _nât |¡}|rš| d¡}|d | _
|d  d	d
¡| _|d | _| j| _nštj |¡\}}t |¡}|sÄtd| ƒ‚|rÖtj |¡| _	|| _| d¡}|d | _
|d | _|d | _|d  d¡| _|d  d¡| _|d  d¡| _dS )zB
        Initialise an instance using a (valid) filename.
        r4   ÚnoneÚanyNÚdummyz0.1ÚnmZvnr(   r'   ZbnzInvalid name or filename: %rr&   r)   ZbiÚar)ÚsignZshould_verifyÚbuildverÚPYVERÚpyverÚabiÚarchrJ   ÚgetcwdÚdirnamer[   ÚversionÚfilenameÚ	_filenameÚNAME_VERSION_REÚmatchÚ	groupdictrI   r\   ÚsplitÚFILENAME_REr   Úabspath)rd   rŠ   r   Úverifyr0   Úinforˆ   r@   r@   rA   re   ¯   sD    







ÿ



zWheel.__init__c                 C   s^   | j rd| j  }nd}d | j¡}d | j¡}d | j¡}| j dd¡}d| j|||||f S )zJ
        Build and return a filename from the various components.
        r'   r4   r)   r(   z%s-%s%s-%s-%s-%s.whl)r‚   r<   r„   r…   r†   r‰   rI   r[   )rd   r‚   r„   r…   r†   r‰   r@   r@   rA   rŠ   Ø   s    
  ÿzWheel.filenamec                 C   s   t j | j| j¡}t j |¡S rD   )rJ   r\   r<   rˆ   rŠ   Úisfile)rd   r\   r@   r@   rA   Úexistsé   s    zWheel.existsc                 c   s4   | j D ](}| jD ]}| jD ]}|||fV  qqqd S rD   )r„   r…   r†   )rd   r„   r…   r†   r@   r@   rA   Útagsî   s    


z
Wheel.tagsc                 C   s  t j | j| j¡}d| j| jf }d| }t d¡}t	|dƒÀ}|  
|¡}|d  dd¡}tdd	„ |D ƒƒ}ttg}	d }
|	D ]f}zLt ||¡}| |¡,}||ƒ}t|d
}
|
rÀW 5 Q R £ W  qäW 5 Q R X W q| tk
rà   Y q|X q||
sútdd |	¡ ƒ‚W 5 Q R X |
S )Nú%s-%sú%s.dist-infoúutf-8ÚrúWheel-Versionr)   r   c                 S   s   g | ]}t |ƒ‘qS r@   ©Úint©rM   Úir@   r@   rA   rO   þ   s     z"Wheel.metadata.<locals>.<listcomp>)Úfileobjz8Invalid wheel, because metadata is missing: looked in %sz, )rJ   r\   r<   rˆ   rŠ   r[   r‰   ÚcodecsÚ	getreaderr   Úget_wheel_metadatar   Útupler   r   Ú	posixpathÚopenr   ÚKeyErrorÚ
ValueError)rd   rg   Úname_verÚinfo_dirÚwrapperÚzfÚwheel_metadataÚwvÚfile_versionÚfnsro   ÚfnÚmetadata_filenameÚbfÚwfr@   r@   rA   Úmetadataõ   s2    


ÿzWheel.metadatac              	   C   sX   d| j | jf }d| }t |d¡}| |¡}t d¡|ƒ}t|ƒ}W 5 Q R X t|ƒS )Nr—   r˜   ÚWHEELr™   )	r[   r‰   r¥   r<   r¦   r¡   r¢   r   Údict)rd   r¬   r©   rª   r²   r³   r´   Úmessager@   r@   rA   r£     s    zWheel.get_wheel_metadatac              	   C   s6   t j | j| j¡}t|dƒ}|  |¡}W 5 Q R X |S )Nrš   )rJ   r\   r<   rˆ   rŠ   r   r£   )rd   rg   r¬   ro   r@   r@   rA   r“     s    z
Wheel.infoc                 C   sÔ   t  |¡}|r|| ¡ }|d |… ||d …  }}d| ¡ krBt}nt}t |¡}|rfd| ¡ d  }nd}|| }|| }nT| d¡}| d¡}	|dk s ||	kr¦d}
n|||d … d	krÀd	}
nd}
t|
 | }|S )
Ns   pythonwó    éÿÿÿÿrH   ó   ó   
r   r%   s   
)	Ú
SHEBANG_REr   ÚendÚlowerÚSHEBANG_PYTHONWÚSHEBANG_PYTHONÚSHEBANG_DETAIL_REÚgroupsÚfind)rd   Údatar0   r¾   ÚshebangZdata_after_shebangZshebang_pythonÚargsÚcrÚlfÚtermr@   r@   rA   Úprocess_shebang%  s,    




zWheel.process_shebangc                 C   sh   |d kr| j }ztt|ƒ}W n  tk
r<   td| ƒ‚Y nX ||ƒ ¡ }t |¡ d¡ 	d¡}||fS )NzUnsupported hash algorithm: %ró   =Úascii)
Ú	hash_kindÚgetattrÚhashlibÚAttributeErrorr   ÚdigestÚbase64Úurlsafe_b64encodeÚrstripÚdecode)rd   rÅ   rÎ   Úhasherro   r@   r@   rA   Úget_hashC  s    zWheel.get_hashc              	   C   sD   t |ƒ}| |ddf¡ t|ƒ}|D ]}| |¡ q&W 5 Q R X d S )Nr4   )Úlistr7   r   Úwriterow)rd   ÚrecordsÚrecord_pathZarchive_record_pathÚwriterÚrowr@   r@   rA   Úwrite_recordN  s
    
zWheel.write_recordc              
   C   s®   g }|\}}t t| jƒ}|D ]P\}}	t|	dƒ}
|
 ¡ }W 5 Q R X d|  |¡ }tj |	¡}| 	|||f¡ qtj 
|d¡}	ttj 
|d¡ƒ}|  ||	|¡ | 	||	f¡ d S )NÚrbz%s=%sÚRECORD)rÏ   rÐ   rÎ   r¦   ÚreadrØ   rJ   r\   Úgetsizer7   r<   Úto_posixrß   )rd   r“   ÚlibdirÚarchive_pathsrÛ   Údistinforª   r×   ÚapÚpÚfrÅ   rÒ   Úsizer@   r@   rA   Úwrite_recordsU  s    zWheel.write_recordsc              	   C   sF   t |dtjƒ.}|D ]"\}}t d||¡ | ||¡ qW 5 Q R X d S )NÚwzWrote %s to %s in wheel)r   ÚzipfileÚZIP_DEFLATEDÚloggerÚdebugÚwrite)rd   rg   ræ   r¬   rè   ré   r@   r@   rA   Ú	build_zipe  s    zWheel.build_zipc           "         s’  |dkri }t t‡ fdd„dƒƒd }|dkrFd}tg}tg}tg}nd}tg}d	g}d
g}| d|¡| _| d|¡| _| d|¡| _	ˆ | }	d| j
| jf }
d|
 }d|
 }g }dD ]Þ}|ˆ krÄq¶ˆ | }tj |¡r¶t |¡D ]°\}}}|D ] }ttj ||¡ƒ}tj ||¡}ttj |||¡ƒ}| ||f¡ |dkrð| d¡sðt|dƒ}| ¡ }W 5 Q R X |  |¡}t|dƒ}| |¡ W 5 Q R X qðqâq¶|	}d}t |¡D ]´\}}}||krt|ƒD ]8\}}t|ƒ}| d¡rÄtj ||¡}||=  qþqÄ|stdƒ‚|D ]H}t|ƒ d¡r(qtj ||¡}ttj ||¡ƒ}| ||f¡ qq¨t |¡}|D ]B}|dkrlttj ||¡ƒ}ttj ||¡ƒ}| ||f¡ qld|p¼| j dt d| g}| jD ] \}}}| d|||f ¡ qÔtj |d¡}t|dƒ}| d  |¡¡ W 5 Q R X ttj |d¡ƒ}| ||f¡ d!d"„ } t || d#}|  !||f|	|¡ tj | j"| j#¡}!|  $|!|¡ |!S )$z‰
        Build a wheel from files in specified paths, and use any specified tags
        when determining the name of the wheel.
        Nc                    s   | ˆ kS rD   r@   rE   ©Úpathsr@   rA   rG   s  rH   zWheel.build.<locals>.<lambda>)ÚpurelibÚplatlibr   r÷   ÚfalseÚtruer|   r}   r„   r…   r†   r—   ú%s.datar˜   )rÅ   ÚheadersÚscriptsrü   ú.exerà   Úwbú
.dist-infoz(.dist-info directory expected, not found)z.pycz.pyo)rá   Ú	INSTALLERZSHAREDr¶   zWheel-Version: %d.%dzGenerator: distlib %szRoot-Is-Purelib: %szTag: %s-%s-%sr¶   rí   Ú
c                 S   s*   | d }|  d¡}d|kr"|d7 }||fS )Nr   rC   rÿ   i'  )Úcount)Útrè   Únr@   r@   rA   ÚsorterÏ  s
    
zWheel.build.<locals>.sorter)Úkey)%rÙ   r   ÚIMPVERÚABIÚARCHrƒ   Úgetr„   r…   r†   r[   r‰   rJ   r\   ÚisdirÚwalkr	   r<   Úrelpathrä   r7   Úendswithr¦   râ   rË   rò   Ú	enumerateÚAssertionErrorÚlistdirÚwheel_versionr   r–   Úsortedrì   rˆ   rŠ   ró   )"rd   rõ   r–   r  ZlibkeyÚis_pureZdefault_pyverZdefault_abiZdefault_archrå   r©   Údata_dirrª   ræ   r  r\   ÚrootÚdirsÚfilesr±   ré   Úrprè   rê   rÅ   rç   rŸ   Údnr­   r„   r…   r†   r  rg   r@   rô   rA   Úbuildk  sš    




ýzWheel.buildc                 C   s
   |  d¡S )zl
        Determine whether an archive entry should be skipped when verifying
        or installing.
        )rC   z/RECORD.jws)r  )rd   Úarcnamer@   r@   rA   Ú
skip_entryß  s    zWheel.skip_entryc           C      K   sŽ  |j }| d¡}| dd¡}| dd¡}tj | j| j¡}d| j| jf }	d|	 }
d|	 }t	 |t
¡}t	 |d¡}t	 |d	¡}t d
¡}t|dƒð}| |¡}||ƒ}t|ƒ}W 5 Q R X |d  dd¡}tdd„ |D ƒƒ}|| jkrø|rø|| j|ƒ |d dkr|d }n|d }i }| |¡8}t|d"}|D ]}|d }|||< q8W 5 Q R X W 5 Q R X t	 |
d¡}t	 |d¡}t	 |
dd¡}t|d}d|_tj } g }!t ¡ }"|"|_d|_z¶z„| ¡ D ]Ö}#|#j}$t|$t ƒrè|$}%n
|$ !d
¡}%|  "|%¡rqÊ||% }|d r4t#|#j$ƒ|d kr4t%d|% ƒ‚|d r–|d  dd¡\}&}'| |$¡}| &¡ }(W 5 Q R X |  '|(|&¡\})}*|*|'kr–t%d|$ ƒ‚|r¼|% (||f¡r¼t) *d |%¡ qÊ|% (|¡oÒ|% +d!¡ }+|% (|¡r
|% d"d¡\})},}-tj ||, t,|-ƒ¡}.n$|%||fkrqÊtj |t,|%ƒ¡}.|+s,| |$¡}| -||.¡ W 5 Q R X tjd#krxt .|.|#j/d$? d%@ ¡ |! 0|.¡ |sÖ|d rÖt|.d&ƒ4}| &¡ }(|  '|(|&¡\})}/|/|*krÌt%d'|. ƒ‚W 5 Q R X | r |. +d(¡r z|j1|.|d)}0|! 0|0¡ W n$ t2k
r(   t)j3d*dd+ Y nX nttj 4t,|$ƒ¡}1tj |"|1¡}2| |$¡}| -||2¡ W 5 Q R X tj |.¡\}3}1|3|_| 5|1¡}4| 6|4¡ |! 7|4¡ qÊ|r¼t) *d,¡ d}5ntd}6| j8d }|d-kr¢t	 |d.¡}7zž| |7¡}t9|ƒ}8W 5 Q R X i }6d/D ]r}9d0|9 }:|:|8kri  |6d1|9 < };|8|:  :¡ D ]<}<d2|<j;|<j<f }=|<j=rj|=d3d4 |<j=¡ 7 }=|=|;|<j< q:qW n  t2k
rž   t) 3d5¡ Y nX ndzB| |¡.}||ƒ}t> ?|¡ d6¡}6|6rØ|6 d7¡}6W 5 Q R X W n  t2k
r   t) 3d8¡ Y nX |6rÐ|6 d9i ¡}>|6 d:i ¡}?|>s0|?rÐ| dd¡}@tj @|@¡sRtAd;ƒ‚|@|_|> B¡ D ]*\}:}<d<|:|<f }A| 5|A¡}4| 6|4¡ q`|?rÐd=di}B|? B¡ D ],\}:}<d<|:|<f }A| 5|A|B¡}4| 6|4¡ q¢tj ||¡}tC|ƒ}5tD|ƒ}|d= |d= ||d>< |5 E||¡}|r|! 0|¡ |5 F|!|d? |¡ |5W W ¢<W  5 Q R £ S  t2k
rn   t) Gd@¡ | H¡  ‚ Y nX W 5 t |"¡ X W 5 Q R X dS )Aa~  
        Install a wheel to the specified paths. If kwarg ``warner`` is
        specified, it should be a callable, which will be called with two
        tuples indicating the wheel version of this software and the wheel
        version in the file, if there is a discrepancy in the versions.
        This can be used to issue any warnings to raise any exceptions.
        If kwarg ``lib_only`` is True, only the purelib/platlib files are
        installed, and the headers, scripts, data and dist-info metadata are
        not written. If kwarg ``bytecode_hashed_invalidation`` is True, written
        bytecode will try to use file-hash based invalidation (PEP-552) on
        supported interpreter versions (CPython 2.7+).

        The return value is a :class:`InstalledDistribution` instance unless
        ``options.lib_only`` is True, in which case the return value is ``None``.
        ÚwarnerÚlib_onlyFZbytecode_hashed_invalidationr—   rú   r˜   r¶   rá   r™   rš   r›   r)   r   c                 S   s   g | ]}t |ƒ‘qS r@   rœ   rž   r@   r@   rA   rO     s     z!Wheel.install.<locals>.<listcomp>zRoot-Is-Purelibrù   rö   r÷   ©Ústreamr   r4   rü   )Údry_runTNr%   úsize mismatch for %sú=údigest mismatch for %szlib_only: skipping %srý   rC   Úposixé   iÿ  rà   zdigest mismatch on write for %sz.py)Úhashed_invalidationzByte-compilation failed)Úexc_infozlib_only: returning Nonez1.0zentry_points.txt)ÚconsoleÚguiz
%s_scriptszwrap_%sz%s:%sz [%s]ú,zAUnable to read legacy script metadata, so cannot generate scriptsrh   zpython.commandsz8Unable to read JSON metadata, so cannot generate scriptsZwrap_consoleZwrap_guizValid script path not specifiedz%s = %sr+  ÚlibÚprefixzinstallation failed.)Ir"  r
  rJ   r\   r<   rˆ   rŠ   r[   r‰   r¥   r   r¡   r¢   r   r¦   r   r   r¤   r  r   r   Úrecordr9   Údont_write_bytecodeÚtempfileÚmkdtempÚ
source_dirÚ
target_dirÚshutilÚrmtreeÚinfolistÚ
isinstancer
   rÖ   r  ÚstrÚ	file_sizer   râ   rØ   Ú
startswithrð   rñ   r  r   Úcopy_streamÚchmodÚexternal_attrr7   Úbyte_compileÚ	ExceptionÚwarningÚbasenameÚmakeÚset_executable_modeÚextendr“   r   Úvaluesr.  ÚsuffixÚflagsÚjsonÚloadr  r¨   Úitemsr   r·   Zwrite_shared_locationsZwrite_installed_filesÚ	exceptionÚrollback)Crd   rõ   ÚmakerÚkwargsr"  r  r  Zbc_hashed_invalidationrg   r©   r  rª   Úmetadata_nameÚwheel_metadata_nameÚrecord_namer«   r¬   Úbwfr´   r¸   r®   r¯   rå   rÛ   r³   ÚreaderrÞ   ré   Zdata_pfxZinfo_pfxZ
script_pfxÚfileopÚbcZoutfilesÚworkdirÚzinfor  Ú	u_arcnameÚkindÚvaluerÅ   r(   rÒ   Z	is_scriptÚwherer  ÚoutfileZ	newdigestZpycr±   Zworknamer  Ú	filenamesÚdistÚcommandsÚepZepdatar  rk   r,   rl   rN   Úconsole_scriptsÚgui_scriptsZ
script_dirÚscriptÚoptionsr@   r@   rA   Úinstallï  sX   


 

ÿ

ÿ
ÿ

þÿÿ







ÿ
zWheel.installc                 C   s8   t d kr4tj tƒ tdƒdtjd d…  ¡}t|ƒa t S )Nzdylib-cachez%s.%sr%   )	ÚcacherJ   r\   r<   r   r9  r9   r:   r   )rd   Úbaser@   r@   rA   Ú_get_dylib_cacheÜ  s    ÿzWheel._get_dylib_cachec              
   C   sh  t j | j| j¡}d| j| jf }d| }t |d¡}t 	d¡}g }t
|dƒ}zð| |¡Ü}||ƒ}	t |	¡}
|  ¡ }| |¡}t j |j|¡}t j |¡sªt  |¡ |
 ¡ D ]‚\}}t j |t|ƒ¡}t j |¡sÞd}n6t  |¡j}tj |¡}| |¡}tj|jŽ }||k}|r&| ||¡ | ||f¡ q²W 5 Q R X W n tk
rX   Y nX W 5 Q R X |S )Nr—   r˜   Z
EXTENSIONSr™   rš   T)rJ   r\   r<   rˆ   rŠ   r[   r‰   r¥   r¡   r¢   r   r¦   rI  rJ  ri  Úprefix_to_dirrh  r  ÚmakedirsrK  r   r•   ÚstatÚst_mtimeÚdatetimeÚfromtimestampÚgetinfoÚ	date_timeÚextractr7   r§   )rd   rg   r©   rª   r  r«   ro   r¬   r³   r´   rh   rg  r.  Z
cache_baser[   r  Údestrr  Z	file_timer“   Z
wheel_timer@   r@   rA   Ú_get_extensionså  s>    




zWheel._get_extensionsc                 C   s   t | ƒS )zM
        Determine if a wheel is compatible with the running system.
        )Úis_compatiblerc   r@   r@   rA   ru    s    zWheel.is_compatiblec                 C   s   dS )zP
        Determine if a wheel is asserted as mountable by its metadata.
        Tr@   rc   r@   r@   rA   Úis_mountable  s    zWheel.is_mountablec                 C   s´   t j t j | j| j¡¡}|  ¡ s2d| }t|ƒ‚|  ¡ sJd| }t|ƒ‚|t	jkrbt
 d|¡ nN|rtt	j |¡ nt	j d|¡ |  ¡ }|r°tt	jkr¤t	j t¡ t ||¡ d S )Nz)Wheel %s not compatible with this Python.z$Wheel %s is marked as not mountable.z%s already in pathr   )rJ   r\   r‘   r<   rˆ   rŠ   ru  r   rv  r9   rð   rñ   r7   Úinsertrt  Ú_hookÚ	meta_pathri   )rd   r7   rg   Úmsgrh   r@   r@   rA   Úmount  s"    

zWheel.mountc                 C   sr   t j t j | j| j¡¡}|tjkr2t d|¡ n<tj 	|¡ |t
jkrRt
 	|¡ t
jsnt
tjkrntj 	t
¡ d S )Nz%s not in path)rJ   r\   r‘   r<   rˆ   rŠ   r9   rð   rñ   rm   rx  ra   ry  )rd   rg   r@   r@   rA   Úunmount(  s    



zWheel.unmountc                 C   s  t j | j| j¡}d| j| jf }d| }d| }t |t¡}t |d¡}t |d¡}t	 
d¡}t|dƒŽ}	|	 |¡}
||
ƒ}t|ƒ}W 5 Q R X |d  d	d
¡}tdd„ |D ƒƒ}i }|	 |¡6}t|d }|D ]}|d }|||< qÖW 5 Q R X W 5 Q R X |	 ¡ D ]ì}|j}t|tƒr$|}n
| d¡}| d¡}d|krNtd| ƒ‚|  |¡r^q|| }|d rt|jƒ|d krtd| ƒ‚|d
 r|d
  dd
¡\}}|	 |¡}| ¡ }W 5 Q R X |  ||¡\}}||krtd| ƒ‚qW 5 Q R X d S )Nr—   rú   r˜   r¶   rá   r™   rš   r›   r)   r   c                 S   s   g | ]}t |ƒ‘qS r@   rœ   rž   r@   r@   rA   rO   E  s     z Wheel.verify.<locals>.<listcomp>r   r   rC   ú..úinvalid entry in wheel: %rr%   r#  r$  r%  )rJ   r\   r<   rˆ   rŠ   r[   r‰   r¥   r   r¡   r¢   r   r¦   r   r   r¤   r   r7  r8  r
   rÖ   r   r  r9  r:  râ   rØ   )rd   rg   r©   r  rª   rP  rQ  rR  r«   r¬   rS  r´   r¸   r®   r¯   rÛ   r³   rT  rÞ   ré   rX  r  rY  rZ  r[  rÅ   r(   rÒ   r@   r@   rA   r’   4  s\    



ÿÿ

ÿzWheel.verifyc              
   K   sØ  dd„ }dd„ }t j | j| j¡}d| j| jf }d| }t |d¡}	tƒ €}
t	|dƒ|}i }| 
¡ D ]h}|j}t|tƒr‚|}n
| d	¡}||	kr–qhd
|krªtd| ƒ‚| ||
¡ t j |
t|ƒ¡}|||< qhW 5 Q R X |||ƒ\}}||f|Ž}|rÊ|||ƒ\}}|r$||kr$|||ƒ |dkrNtjdd|
d\}}t  |¡ n*t j |¡shtd| ƒ‚t j || j¡}t| ¡ ƒ}t j |
|¡}||f}|  ||
|¡ |  ||¡ |dkrÊt ||¡ W 5 Q R X |S )a‘  
        Update the contents of a wheel in a generic way. The modifier should
        be a callable which expects a dictionary argument: its keys are
        archive-entry paths, and its values are absolute filesystem paths
        where the contents the corresponding archive entries can be found. The
        modifier is free to change the contents of the files pointed to, add
        new entries and remove entries, before returning. This method will
        extract the entire contents of the wheel to a temporary location, call
        the modifier, and then use the passed (and possibly updated)
        dictionary to write a new wheel. If ``dest_dir`` is specified, the new
        wheel is written there -- otherwise, the original wheel is overwritten.

        The modifier should return True if it updated the wheel, else False.
        This method returns the same value the modifier returns.
        c                 S   sH   d  }}d|t f }|| kr$d| }|| kr@| | }t|dj}||fS )Nz%s/%sz%s/PKG-INFO©r\   )r   r   r‰   )Úpath_maprª   r‰   r\   r  r@   r@   rA   Úget_version}  s    z!Wheel.update.<locals>.get_versionc                 S   sà   d }z|t | ƒ}|  d¡}|dk r*d|  }nTdd„ | |d d …  d¡D ƒ}|d  d7  < d	| d |… d d
d„ |D ƒ¡f }W n  tk
r    t d| ¡ Y nX |rÜt|d}||_| 	t
¡}|j||d t d| |¡ d S )Nr'   r   z%s+1c                 S   s   g | ]}t |ƒ‘qS r@   rœ   rL   r@   r@   rA   rO     s     z8Wheel.update.<locals>.update_version.<locals>.<listcomp>r   r)   rº   z%s+%sc                 s   s   | ]}t |ƒV  qd S rD   )r9  rž   r@   r@   rA   Ú	<genexpr>’  s     z7Wheel.update.<locals>.update_version.<locals>.<genexpr>z0Cannot update non-compliant (PEP-440) version %rr  )r\   ÚlegacyzVersion updated from %r to %r)r   rÄ   r   r<   r   rð   rñ   r   r‰   r  r   rò   )r‰   r\   Úupdatedrl   rŸ   r=   Úmdrƒ  r@   r@   rA   Úupdate_version‡  s.    

 ÿ
ÿ


ÿz$Wheel.update.<locals>.update_versionr—   r˜   rá   rš   r™   r}  r~  Nz.whlzwheel-update-)rG  r.  ÚdirzNot a directory: %r)rJ   r\   r<   rˆ   rŠ   r[   r‰   r¥   r   r   r7  r8  r
   rÖ   r   rr  r   r1  ÚmkstempÚcloser  rÙ   rK  rì   ró   r5  Úcopyfile)rd   ÚmodifierÚdest_dirrO  r  r†  rg   r©   rª   rR  rW  r¬   r€  rX  r  rY  r\   Zoriginal_versionr(   ÚmodifiedÚcurrent_versionÚfdÚnewpathræ   rç   r“   r@   r@   rA   rf   l  s\    



ÿ

þ

zWheel.update)NFF)N)NN)F)N)rw   rx   ry   Ú__doc__r  rÎ   re   ÚpropertyrŠ   r•   r–   r   rµ   r£   r“   rË   rØ   rß   rì   ró   r  r  rf  ri  rt  ru  rv  r{  r|  r’   rf   r@   r@   r@   rA   rz   §   s@   
)



	


t n	"
8rz   c                  C   sZ   dd l } |  ¡ }g }|d dkrV|d  d¡D ]}| | ¡ rFt|ƒnd¡ q.t|ƒ}|S )Nr   Úglibcr   r)   )ÚplatformÚlibc_verr   r7   Úisdigitr   r¤   )r”  Úverro   rN   r@   r@   rA   Ú_get_glibc_versionÑ  s    r˜  c               
   C   s`  t g} t d }ttjd d ddƒD ]}|  d |t|ƒg¡¡ q$g }tƒ D ]$}| d¡rL| | 	dd¡d ¡ qL| 
¡  tdkrŽ| dt¡ | d¡ g }tg}tjd	kr†t d
t¡}|r†| ¡ \}}}}	t|ƒ}|	g}
|	dkrð|
 d¡ |	dkr|
 d¡ |	dkr|
 d¡ |	dkr,|
 d¡ |	dkr@|
 d¡ |dkr†|
D ]*}d||||f }|tkrN| |¡ qN|d8 }q@|D ]}|D ]}	| d t| d f¡||	f¡ |dkr”tj d¡r”|	 dd¡}	tƒ }t|ƒdkr”|dkr| d t| d f¡|d|	 f¡ |dkrH| d t| d f¡|d|	 f¡ |dkrt| d t| d f¡|d|	 f¡ | d t| d f¡|d|d |d |	f f¡ q”qŠt| ƒD ]L\}}| d t|f¡ddf¡ |dkr´| d t|d f¡ddf¡ q´t| ƒD ]L\}}| d d |f¡ddf¡ |dkr
| d d |d f¡ddf¡ q
t|ƒS )!zG
    Return (pyver, abi, arch) tuples compatible with this Python.
    r   r   rº   r4   z.abir)   r%   r|   Údarwinz(\w+)_(\d+)_(\d+)_(\w+)$)Úi386ÚppcÚfat)rš  r›  Úx86_64Zfat3)Úppc64r  Úfat64)rš  r  Úintel)rš  r  r   r›  rž  Ú	universalz%s_%s_%s_%sÚlinuxZlinux_)r%   é   zmanylinux1_%s)r%   é   zmanylinux2010_%s)r%   é   zmanylinux2014_%szmanylinux_%s_%s_%sr}   r&   )r5   Úranger9   r:   r7   r<   r9  rT   r;  r   Úsortr  rw  r	  r”  Úrer   rÃ   r   r8   rI   r˜  rt   r  Úset)ÚversionsÚmajorÚminorÚabisrG  ro   Úarchesr0   r[   r†   Úmatchesr   rN   r…   r=   rŸ   r‰   r@   r@   rA   Úcompatible_tagsÛ  sŠ    
















ÿ
ÿ
ÿÿÿ
"
"r°  c                 C   s\   t | tƒst| ƒ} d}|d kr"t}|D ]0\}}}|| jkr&|| jkr&|| jkr&d} qXq&|S )NFT)r8  rz   ÚCOMPATIBLE_TAGSr„   r…   r†   )Úwheelr–   ro   r—  r…   r†   r@   r@   rA   ru  0  s    
ru  )N)ZÚ
__future__r   rÓ   r¡   rn  Úemailr   rÐ   rI  ÚloggingrJ   r¥   r¨  r5  r9   r1  rî   r4   r   r   Úcompatr   r   r	   r
   r   Zdatabaser   rµ   r   r   r   r   rU   r   r   r   r   r   r   r   r   r   r   r‰   r   r   Ú	getLoggerrw   rð   rg  Úhasattrr8   r”  r;  r6   r5   r:   rƒ   r  rI   r	  r  r   rB   ÚcompileÚ
IGNORECASEÚVERBOSEr   rŒ   r½   rÂ   rÁ   rÀ   rK   rä   rP   Zimportlib.machineryrQ   Úimportlib.utilrT   r_   Úobjectr`   rx  rz   r˜  r°  r±  ru  r@   r@   r@   rA   Ú<module>   s–   0



ø

ü



#      0
P