B
    ià¿a`   ã               @   sº   d Z ddlm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mZ ddlmZ ddlmZ ddlmZ e	 d	e	j¡jZd
Zdd„ ZG dd„ dƒZdS )zWheels support.é    )Úget_platform)ÚlogN)Úparse_version)Úsys_tags)Úcanonicalize_name)Úwrite_requirementsz‚^(?P<project_name>.+?)-(?P<version>\d.*?)
    ((-(?P<build>\d.*?))?-(?P<py_version>.+?)-(?P<abi>.+?)-(?P<platform>.+?)
    )\.whl$z8__import__('pkg_resources').declare_namespace(__name__)
c             C   sî   x¸t  | ¡D ]ª\}}}t j || ¡}x6|D ].}t j ||¡}t j |||¡}t  ||¡ q*W xXttt|ƒƒƒD ]D\}	}
t j ||
¡}t j |||
¡}t j 	|¡snt  ||¡ ||	= qnW qW x.t j| ddD ]\}}}|rÜt
‚t  |¡ qÊW dS )zDMove everything under `src_dir` to `dst_dir`, and delete the former.T)ÚtopdownN)ÚosÚwalkÚpathÚrelpathÚjoinÚrenamesÚreversedÚlistÚ	enumerateÚexistsÚAssertionErrorÚrmdir)Zsrc_dirZdst_dirÚdirpathZdirnamesÚ	filenamesÚsubdirÚfÚsrcÚdstÚnÚd© r   ú/lib/python3.7/site-packages/setuptools/wheel.pyÚunpack   s    
r   c               @   sh   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	e
dd„ ƒZe
dd„ ƒZe
dd„ ƒZdS )ÚWheelc             C   sT   t tj |¡ƒ}|d kr$td| ƒ‚|| _x$| ¡  ¡ D ]\}}t| ||ƒ q8W d S )Nzinvalid wheel name: %r)	Ú
WHEEL_NAMEr	   r   ÚbasenameÚ
ValueErrorÚfilenameÚ	groupdictÚitemsÚsetattr)Úselfr$   ÚmatchÚkÚvr   r   r   Ú__init__6   s    zWheel.__init__c             C   s&   t  | j d¡| j d¡| j d¡¡S )z>List tags (py_version, abi, platform) supported by this wheel.Ú.)Ú	itertoolsÚproductZ
py_versionÚsplitÚabiÚplatform)r(   r   r   r   Útags>   s    

z
Wheel.tagsc                s0   t dd„ tƒ D ƒƒ‰ t‡ fdd„|  ¡ D ƒdƒS )z5Is the wheel is compatible with the current platform?c             s   s   | ]}|j |j|jfV  qd S )N)Zinterpreterr1   r2   )Ú.0Útr   r   r   ú	<genexpr>I   s    z&Wheel.is_compatible.<locals>.<genexpr>c             3   s   | ]}|ˆ krd V  qdS )TNr   )r4   r5   )Úsupported_tagsr   r   r6   J   s    F)Úsetr   Únextr3   )r(   r   )r7   r   Úis_compatibleF   s    zWheel.is_compatiblec             C   s,   t j| j| j| jdkrd ntƒ d ¡ d S )NÚany)Úproject_nameÚversionr2   z.egg)Úpkg_resourcesÚDistributionr<   r=   r2   r   Úegg_name)r(   r   r   r   r@   L   s    zWheel.egg_namec             C   sJ   x<|  ¡ D ]0}t |¡}| d¡r
t|ƒ t| jƒ¡r
|S q
W tdƒ‚d S )Nz
.dist-infoz.unsupported wheel format. .dist-info not found)ZnamelistÚ	posixpathÚdirnameÚendswithr   Ú
startswithr<   r#   )r(   ÚzfÚmemberrB   r   r   r   Úget_dist_infoR   s    

zWheel.get_dist_infoc          	   C   s(   t  | j¡}|  ||¡ W dQ R X dS )z"Install wheel as an egg directory.N)ÚzipfileZZipFiler$   Ú_install_as_egg)r(   Údestination_eggdirrE   r   r   r   Úinstall_as_egg\   s    zWheel.install_as_eggc             C   s\   d| j | jf }|  |¡}d| }tj |d¡}|  ||||¡ |  ||¡ |  ||¡ d S )Nz%s-%sz%s.datazEGG-INFO)	r<   r=   rG   r	   r   r   Ú_convert_metadataÚ_move_data_entriesÚ_fix_namespace_packages)r(   rJ   rE   Zdist_basenameÚ	dist_infoÚ	dist_dataÚegg_infor   r   r   rI   a   s    
zWheel._install_as_eggc          	      sL  ‡‡fdd„}|dƒ}t | d¡ƒ}t dƒ|  ko>t dƒk n  }|sTtd| ƒ‚t |¡ ˆ |¡ tj |ˆ¡‰tj	j
|ˆt |ˆ¡d‰ d	d
„ ‰tttˆˆ  ¡ ƒƒƒ‰‡ ‡‡fdd„ˆ jD ƒ}t ˆ|¡ t tj |d¡tj |d¡¡ tj	tˆ|dd}	tjj}
t tj¡ z t|	 d¡d tj |d¡ƒ W d t |
¡ X d S )Nc          	      s<   ˆ  t ˆ | ¡¡ }| ¡  d¡}tj ¡  |¡S Q R X d S )Nzutf-8)	ÚopenrA   r   ÚreadÚdecodeÚemailÚparserZParserZparsestr)ÚnameÚfpÚvalue)rO   rE   r   r   Úget_metadatam   s    z-Wheel._convert_metadata.<locals>.get_metadataZWHEELzWheel-Versionz1.0z2.0dev0z$unsupported wheel format version: %s)Zmetadatac             S   s   d | _ t| ƒS )N)ZmarkerÚstr)Úreqr   r   r   Úraw_reqˆ   s    z(Wheel._convert_metadata.<locals>.raw_reqc          	      s2   i | ]*}t ‡fd d„tˆˆ  |f¡ƒD ƒƒ|“qS )c             3   s   | ]}|ˆ kr|V  qd S )Nr   )r4   r\   )Úinstall_requiresr   r   r6   Ž   s   z5Wheel._convert_metadata.<locals>.<dictcomp>.<genexpr>)ÚsortedÚmapÚrequires)r4   Zextra)Údistr^   r]   r   r   ú
<dictcomp>Œ   s   z+Wheel._convert_metadata.<locals>.<dictcomp>ZMETADATAzPKG-INFO)r^   Úextras_require)ZattrsrQ   zrequires.txt)r   Úgetr#   r	   ÚmkdirZ
extractallr   r   r>   r?   Zfrom_locationZPathMetadatar   r_   r`   ra   ZextrasÚrenameÚ
setuptoolsÚdictr   Z_global_logZ	thresholdZset_thresholdZWARNr   Zget_command_obj)rE   rJ   rO   rQ   rZ   Zwheel_metadataZwheel_versionZwheel_v1rd   Z
setup_distZlog_thresholdr   )rb   rO   r^   r]   rE   r   rL   k   sB     



zWheel._convert_metadatac                sê   t j | ˆ ¡‰ t j ˆ d¡}t j |¡r t j | dd¡}t  |¡ xRt  |¡D ]D}| d¡rrt  t j ||¡¡ qNt  t j ||¡t j ||¡¡ qNW t  	|¡ x.t
t jj‡ fdd„dD ƒƒD ]}t|| ƒ q¾W t j ˆ ¡ræt  	ˆ ¡ dS )z,Move data entries to their correct location.ZscriptszEGG-INFOz.pycc             3   s   | ]}t j ˆ |¡V  qd S )N)r	   r   r   )r4   r   )rP   r   r   r6   À   s   z+Wheel._move_data_entries.<locals>.<genexpr>)ÚdataZheadersZpurelibZplatlibN)r	   r   r   r   rf   ÚlistdirrC   Úunlinkrg   r   Úfilterr   )rJ   rP   Zdist_data_scriptsZegg_info_scriptsÚentryr   r   )rP   r   rM   «   s&    





zWheel._move_data_entriesc          
   C   s´   t j | d¡}t j |¡r°t|ƒ}| ¡  ¡ }W d Q R X xt|D ]l}t jj|f| d¡žŽ }t j |d¡}t j |¡s€t  |¡ t j |¡s@t|dƒ}| t	¡ W d Q R X q@W d S )Nznamespace_packages.txtr-   z__init__.pyÚw)
r	   r   r   r   rR   rS   r0   rf   ÚwriteÚNAMESPACE_PACKAGE_INIT)rQ   rJ   Znamespace_packagesrX   ÚmodZmod_dirZmod_initr   r   r   rN   Ç   s    


zWheel._fix_namespace_packagesN)Ú__name__Ú
__module__Ú__qualname__r,   r3   r:   r@   rG   rK   rI   ÚstaticmethodrL   rM   rN   r   r   r   r   r    4   s   

@r    )Ú__doc__Zdistutils.utilr   Z	distutilsr   rU   r.   r	   rA   ÚrerH   r>   rh   r   Z setuptools.extern.packaging.tagsr   Z!setuptools.extern.packaging.utilsr   Zsetuptools.command.egg_infor   ÚcompileÚVERBOSEr)   r!   rq   r   r    r   r   r   r   Ú<module>   s(   
