3
o(h                 @   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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 dd	lmZ eZejd
ejjZdZdd ZG dd dZdS )zWheels support.    )get_platformN)DistributionPathMetadataparse_version)canonicalize_name)PY3)r   )
pep425tags)write_requirementsz^(?P<project_name>.+?)-(?P<version>\d.*?)
    ((-(?P<build>\d.*?))?-(?P<py_version>.+?)-(?P<abi>.+?)-(?P<platform>.+?)
    )\.whl$ztry:
    __import__('pkg_resources').declare_namespace(__name__)
except ImportError:
    __path__ = __import__('pkgutil').extend_path(__path__, __name__)
c             C   s   xt 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 ]\}}}| st
t j| qW 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!   8/tmp/pip-install-kzfa9vnx/setuptools/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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__<   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"   tagsD   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>O   s    z&Wheel.is_compatible.<locals>.<genexpr>F)r   get_supportednextr8   )r,   r!   )r;   r"   is_compatibleL   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versionr7   z.egg)r   rA   rB   r7   r   egg_name)r,   r!   r!   r"   rC   Q   s    zWheel.egg_namec             C   sJ   x<|j  D ]0}tj|}|jdr
t|jt| jr
|S q
W tdd S )Nz
.dist-infoz.unsupported wheel format. .dist-info not found)namelist	posixpathdirnameendswithr   
startswithrA   r'   )r,   zfmemberrF   r!   r!   r"   get_dist_infoW   s    

zWheel.get_dist_infoc          
   C   s(   t j| j}| j|| W dQ R X dS )z"Install wheel as an egg directory.N)zipfileZipFiler(   _install_as_egg)r,   destination_eggdirrI   r!   r!   r"   install_as_egga   s    zWheel.install_as_eggc             C   s\   d| j | jf }| j|}d| }tjj|d}| j|||| | j|| | j|| d S )Nz%s-%sz%s.datazEGG-INFO)	rA   rB   rK   r   r   r   _convert_metadata_move_data_entries_fix_namespace_packages)r,   rO   rI   Zdist_basename	dist_info	dist_dataegg_infor!   r!   r"   rN   f   s    
zWheel._install_as_eggc       
         s   fdd}|d}t |jd}t d|  ko>t dk n  }|sTtd| tj| j| tjj|tj	|t
|d d	d
 ttt j  fdd 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 d S )Nc          	      sH   j tj | ,}tr&|j jdn|j }tjj j	|S Q R X d S )Nzutf-8)
openrE   r   r   readdecodeemailparserParserparsestr)namefpvalue)rT   rI   r!   r"   get_metadatar   s    z-Wheel._convert_metadata.<locals>.get_metadataWHEELzWheel-Versionz1.0z2.0dev0z$unsupported wheel format version: %s)metadatac             S   s   d | _ t| S )N)markerstr)reqr!   r!   r"   raw_req   s    z(Wheel._convert_metadata.<locals>.raw_reqc                s2   i | ]*}t fd dt j|fD |qS )c             3   s   | ]}| kr|V  qd S )Nr!   )r9   rf   )install_requiresr!   r"   r<      s   z5Wheel._convert_metadata.<locals>.<dictcomp>.<genexpr>)sortedmaprequires)r9   extra)distrh   rg   r!   r"   
<dictcomp>   s   z+Wheel._convert_metadata.<locals>.<dictcomp>METADATAzPKG-INFO)rh   extras_require)attrsrV   zrequires.txt)r   getr'   r   mkdir
extractallr   r   r   from_locationr   r   ri   rj   rk   extrasrenameSetuptoolsDistributiondictr	   get_command_obj)
rI   rO   rT   rV   ra   Zwheel_metadatawheel_versionZwheel_v1rp   Z
setup_distr!   )rm   rT   rh   rg   rI   r"   rQ   p   s:     



zWheel._convert_metadatac                s   t jj|   t jj d}t jj|rt jj| dd}t j| xRt j|D ]D}|jdrrt jt jj|| qNt jt jj||t jj|| qNW t j	| x.t
t jj fdddD D ]}t||  qW t jj rt j	  d
S )z,Move data entries to their correct location.scriptszEGG-INFOz.pycc             3   s   | ]}t jj |V  qd S )N)r   r   r   )r9   r    )rU   r!   r"   r<      s   z+Wheel._move_data_entries.<locals>.<genexpr>dataheaderspurelibplatlibN)r}   r~   r   r   )r   r   r   r   rs   listdirrG   unlinkrw   r   filterr#   )rO   rU   Zdist_data_scriptsZegg_info_scriptsentryr   r!   )rU   r"   rR      s&    





zWheel._move_data_entriesc             C   s   t jj| d}t jj|rt|}|j j }W d Q R X xl|D ]d}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 d S )Nznamespace_packages.txtr1   z__init__.pyw)	r   r   r   r   rW   rX   r5   writeNAMESPACE_PACKAGE_INIT)rV   rO   Znamespace_packagesr_   modZmod_dirZmod_initr!   r!   r"   rS      s    

zWheel._fix_namespace_packagesN)__name__
__module____qualname__r0   r8   r?   rC   rK   rP   rN   staticmethodrQ   rR   rS   r!   r!   r!   r"   r$   :   s   

:r$   )__doc__distutils.utilr   rZ   r2   r   rE   rerL   pkg_resourcesr   r   r   Z!setuptools.extern.packaging.utilsr   Zsetuptools.extern.sixr   
setuptoolsrx   r   Zsetuptools.command.egg_infor	   type__metaclass__compileVERBOSEr-   r%   r   r#   r$   r!   r!   r!   r"   <module>   s(   
