U
    @{?^!  ã                   @   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 dd	lmZ e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)ÚPY3)Úwrite_requirementsz‚^(?P<project_name>.+?)-(?P<version>\d.*?)
    ((-(?P<build>\d.*?))?-(?P<py_version>.+?)-(?P<abi>.+?)-(?P<platform>.+?)
    )\.whl$zštry:
    __import__('pkg_resources').declare_namespace(__name__)
except ImportError:
    __path__ = __import__('pkgutil').extend_path(__path__, __name__)
c                 C   sÞ   t  | ¡D ]¢\}}}t j || ¡}|D ].}t j ||¡}t j |||¡}t  ||¡ q&ttt|ƒƒƒD ]D\}	}
t j ||
¡}t j |||
¡}t j 	|¡sft  ||¡ ||	= qfq
t j| dd�D ]\}}}|rÎt
‚t  |¡ q¼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ÚsrcZdstÚnÚd© r   ú2/usr/lib/python3/dist-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   sP   t tj |¡ƒ}|d kr$td| ƒ‚|| _| ¡  ¡ D ]\}}t| ||ƒ q6d S )Nzinvalid wheel name: %r)	Ú
WHEEL_NAMEr
   r   ÚbasenameÚ
ValueErrorÚfilenameÚ	groupdictÚitemsÚsetattr)Úselfr$   ÚmatchÚkÚvr   r   r   Ú__init__>   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   ÚtagsF   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>P   s    z&Wheel.is_compatible.<locals>.<genexpr>c                 3   s   | ]}|ˆ krd V  qdS )TNr   r6   ©Zsupported_tagsr   r   r9   R   s      F)Úsetr   Únextr4   r3   r   r:   r   Úis_compatibleN   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_namer3   r   r   r   rC   T   s     þýzWheel.egg_namec                 C   sJ   |  ¡ D ]4}t |¡}| d¡rt|ƒ t| jƒ¡r|  S qtdƒ‚d S )Nz
.dist-infoz.unsupported wheel format. .dist-info not found)ZnamelistÚ	posixpathÚdirnameÚendswithr   Ú
startswithr?   r#   )r(   ÚzfÚmemberrE   r   r   r   Úget_dist_infoZ   s    

ÿÿ
zWheel.get_dist_infoc              	   C   s(   t  | j¡�}|  ||¡ W 5 Q R X dS )z"Install wheel as an egg directory.N)ÚzipfileZZipFiler$   Ú_install_as_egg)r(   Údestination_eggdirrH   r   r   r   Úinstall_as_eggd   s    zWheel.install_as_eggc                 C   s\   d| j | jf }|  |¡}d| }tj |d¡}|  ||||¡ |  ||¡ |  ||¡ d S )Nz%s-%sz%s.dataúEGG-INFO)	r?   r@   rJ   r
   r   r   Ú_convert_metadataÚ_move_data_entriesÚ_fix_namespace_packages)r(   rM   rH   Zdist_basenameÚ	dist_infoÚ	dist_dataÚegg_infor   r   r   rL   i   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 5 t |
¡ X d S )Nc              
      sT   ˆ  t ˆ | ¡¡�8}tr&| ¡  d¡n| ¡ }tj ¡  	|¡W  5 Q R £ S Q R X d S )Nzutf-8)
ÚopenrD   r   r   ÚreadÚdecodeÚemailÚparserZParserZparsestr)ÚnameÚfpÚvalue)rS   rH   r   r   Úget_metadatau   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 r5   )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 r5   r   )r7   r`   )Úinstall_requiresr   r   r9   •   s   þz5Wheel._convert_metadata.<locals>.<dictcomp>.<genexpr>)ÚsortedÚmapÚrequires)r7   Zextra)Údistrb   ra   r   r   Ú
<dictcomp>”   s
   û þz+Wheel._convert_metadata.<locals>.<dictcomp>ZMETADATAzPKG-INFO)rb   Úextras_require)ZattrsrU   zrequires.txt)r   Úgetr#   r
   ÚmkdirZ
extractallr   r   rA   rB   Zfrom_locationZPathMetadatar   rc   rd   re   ZextrasÚrenameÚ
setuptoolsÚdictr   Z_global_logZ	thresholdZset_thresholdZWARNr   Zget_command_obj)rH   rM   rS   rU   r^   Zwheel_metadataZwheel_versionZwheel_v1rh   Z
setup_distZlog_thresholdr   )rf   rS   rb   ra   rH   r   rP   s   sT    ÿÿ

 
þúþþÿýzWheel._convert_metadatac                    sâ   t j | ˆ ¡‰ t j ˆ d¡}t j |¡rœt j | dd¡}t  |¡ t  |¡D ]D}| d¡rpt  t j ||¡¡ qLt  t j ||¡t j ||¡¡ qLt  	|¡ t
t jj‡ fdd„dD ƒƒD ]}t|| ƒ q¸t j ˆ ¡rÞt  	ˆ ¡ dS )z,Move data entries to their correct location.ZscriptsrO   z.pycc                 3   s   | ]}t j ˆ |¡V  qd S r5   )r
   r   r   )r7   r   ©rT   r   r   r9   Ç   s   ÿz+Wheel._move_data_entries.<locals>.<genexpr>)ÚdataZheadersZpurelibZplatlibN)r
   r   r   r   rj   ÚlistdirrF   Úunlinkrk   r   Úfilterr   )rM   rT   Zdist_data_scriptsZegg_info_scriptsÚentryr   r   rn   r   rQ   ³   s.      ÿ

þ
þzWheel._move_data_entriesc              
   C   s°   t j | d¡}t j |¡r¬t|ƒ�}| ¡  ¡ }W 5 Q R X |D ]l}t jj|f| d¡žŽ }t j |d¡}t j |¡s~t  |¡ t j |¡s>t|dƒ�}| t	¡ W 5 Q R X q>d S )Nznamespace_packages.txtr-   z__init__.pyÚw)
r
   r   r   r   rV   rW   r0   rj   ÚwriteÚNAMESPACE_PACKAGE_INIT)rU   rM   Znamespace_packagesr\   ÚmodZmod_dirZmod_initr   r   r   rR   Ï   s     ÿ

zWheel._fix_namespace_packagesN)Ú__name__Ú
__module__Ú__qualname__r,   r4   r=   rC   rJ   rN   rL   ÚstaticmethodrP   rQ   rR   r   r   r   r   r    <   s   


?
r    )Ú__doc__Zdistutils.utilr   Z	distutilsr   rY   r.   r
   rD   ÚrerK   rA   rl   r   Z setuptools.extern.packaging.tagsr   Z!setuptools.extern.packaging.utilsr   Zsetuptools.extern.sixr   Zsetuptools.command.egg_infor   ÚtypeZ__metaclass__ÚcompileÚVERBOSEr)   r!   rv   r   r    r   r   r   r   Ú<module>   s.   ü