3
e>                 @   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$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    6/tmp/pip-build-argcdawy/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  st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rtjtjj|
| n tjtjj|
|tjj|| qW 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|rt!|}|j" j# }W dQ R X xr|D ]j}tjj|f|j#d! }tjj|d"}tjj|rtjj| rt!|d#}|j$t% W dQ R X qW 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"   
