3
yYði>  ã               @   s¬   d 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m	Z	m
Z
mZ ddlmZ ddlm	Z ddlmZ ddlmZ ejd	ejƒjZd
Zdd„ ZG dd„ deƒZdS )zWheels support.é    )Úget_platformN)ÚDistributionÚPathMetadataÚparse_version)ÚPY3)r   )Ú
pep425tags)Ú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ð   x¸t j| ƒD ]ª\}}}t jj|| ƒ}x6|D ].}t jj||ƒ}t jj|||ƒ}t j||ƒ q*W xXttt|ƒƒƒD ]D\}	}
t jj||
ƒ}t jj|||
ƒ}t jj	|ƒsnt j||ƒ ||	= qnW qW x0t j| dd�D ]\}}}| sÞt
‚t j|ƒ 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)Úsrc_dirZdst_dirÚdirpathÚdirnamesÚ	filenamesÚsubdirÚfÚsrcÚdstÚnÚd© r    ú6/tmp/pip-build-ue6tjl93/setuptools/setuptools/wheel.pyÚunpack   s    

r"   c               @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚWheelc             C   sT   t tjj|ƒƒ}|d kr$td| ƒ‚|| _x$|jƒ jƒ 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__7   s    zWheel.__init__c             C   s&   t j| jjdƒ| jjdƒ| jjdƒƒS )z>List tags (py_version, abi, platform) supported by this wheel.Ú.)Ú	itertoolsÚproductÚ
py_versionÚsplitÚabiÚplatform)r+   r    r    r!   Útags?   s    
z
Wheel.tagsc                s$   t jƒ ‰ t‡ fdd„| jƒ D ƒdƒS )z5Is the wheel is compatible with the current platform?c             3   s   | ]}|ˆ krd V  qdS )TNr    )Ú.0Út)Úsupported_tagsr    r!   ú	<genexpr>H   s    z&Wheel.is_compatible.<locals>.<genexpr>F)r   Úget_supportedÚnextr7   )r+   r    )r:   r!   Úis_compatibleE   s    zWheel.is_compatiblec             C   s*   t | j| j| jdkrd ntƒ d�jƒ d S )NÚany)Úproject_nameÚversionr6   z.egg)r   r@   rA   r6   r   Úegg_name)r+   r    r    r!   rB   J   s    zWheel.egg_namec                s  t j| jƒ��ô‰d| j| jf }d| ‰d| ‰‡‡fdd„}|dƒ}|dƒ}t|jdƒƒ}td	ƒ|  kovtd
ƒk n  sˆtd| ƒ‚tj	|ƒ ˆj
|ƒ tjj|ˆƒ‰tj|ˆt|ˆƒd�‰ dd„ ‰tttˆˆ jƒ ƒƒƒ‰‡ ‡‡fdd„ˆ jD ƒ}tjj|dƒ}tjˆ|ƒ tjtjj|dƒtjj|dƒƒ ttˆ|d�d�}	t|	jdƒdtjj|dƒƒ tjj|ˆƒ‰tjjˆdƒ}
tjj|
ƒ�rtjj|ddƒ}tj	|ƒ xVtj|
ƒD ]H}|jdƒ�rÔtjtjj|
|ƒƒ n tjtjj|
|ƒtjj||ƒƒ �q®W tj|
ƒ x0ttjj‡fdd„d$D ƒƒD ]}t ||ƒ �q"W tjjˆƒ�rNtjˆƒ tjj|d ƒ}tjj|ƒ�rþt!|ƒ�}|j"ƒ j#ƒ }W dQ R X xr|D ]j}tjj|f|j#d!ƒžŽ }tjj|d"ƒ}tjj|ƒ�r�tjj|ƒ �r�t!|d#ƒ�}|j$t%ƒ W dQ R X �q�W W dQ R X dS )%z"Install wheel as an egg directory.z%s-%sz%s.dist-infoz%s.datac          	      sH   ˆj dˆ | f ƒ�,}tr&|jƒ jdƒn|jƒ }tjjƒ j|ƒS Q R X d S )Nz%s/%szutf-8)Úopenr   ÚreadÚdecodeÚemailÚparserÚParserÚparsestr)ÚnameÚfpÚvalue)Ú	dist_infoÚzfr    r!   Úget_metadataV   s    z*Wheel.install_as_egg.<locals>.get_metadataÚWHEELÚMETADATAzWheel-Versionz1.0z2.0dev0z$unsupported wheel format version: %s)Úmetadatac             S   s   d | _ t| ƒS )N)ÚmarkerÚstr)Úreqr    r    r!   Úraw_reql   s    z%Wheel.install_as_egg.<locals>.raw_reqc          	      s6   i | ].}t t‡fd d„tˆˆ j|fƒƒD ƒƒƒ|“qS )c             3   s   | ]}|ˆ kr|V  qd S )Nr    )r8   rU   )Úinstall_requiresr    r!   r;   r   s   z2Wheel.install_as_egg.<locals>.<dictcomp>.<genexpr>)r   ÚsortedÚmapÚrequires)r8   Úextra)ÚdistrW   rV   r    r!   ú
<dictcomp>p   s   z(Wheel.install_as_egg.<locals>.<dictcomp>zEGG-INFOzPKG-INFO)rW   Úextras_require)ÚattrsÚegg_infoNzrequires.txtÚscriptsz.pycc             3   s   | ]}t jjˆ |ƒV  qd S )N)r
   r   r   )r8   r   )Ú	dist_datar    r!   r;   “   s   z'Wheel.install_as_egg.<locals>.<genexpr>ÚdataÚheadersÚpurelibÚplatlibznamespace_packages.txtr0   z__init__.pyÚw)rc   rd   re   rf   )&ÚzipfileÚZipFiler'   r@   rA   r   Úgetr&   r
   ÚmkdirÚ
extractallr   r   r   Úfrom_locationr   r   rX   rY   rZ   ÚextrasÚrenameÚSetuptoolsDistributionÚdictr   Úget_command_objr   ÚlistdirÚendswithÚunlinkr   Úfilterr"   rC   rD   r4   ÚwriteÚNAMESPACE_PACKAGE_INIT)r+   Zdestination_eggdirZdist_basenamerO   Zwheel_metadataZdist_metadataÚwheel_versionr^   r`   Z
setup_distZdist_data_scriptsZegg_info_scriptsÚentryr   Znamespace_packagesrK   ÚmodZmod_dirZmod_initr    )r\   rb   rM   rW   rV   rN   r!   Úinstall_as_eggP   sr     










zWheel.install_as_eggN)Ú__name__Ú
__module__Ú__qualname__r/   r7   r>   rB   r|   r    r    r    r!   r#   5   s
   r#   )Ú__doc__Údistutils.utilr   rF   r1   r
   Úrerh   Úpkg_resourcesr   r   r   Zsetuptools.extern.sixr   Ú
setuptoolsrp   r   Zsetuptools.command.egg_infor   ÚcompileÚVERBOSEr,   r$   rx   r"   Úobjectr#   r    r    r    r!   Ú<module>   s"   
