U
    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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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   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 ]\}}}|rt
t | qd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-2aersu7t/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   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__7   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product
py_versionsplitabiplatformr+   r    r    r!   tags?   s    

z
Wheel.tagsc                    s$   t   t fdd|  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nextr8   r7   r    r;   r!   is_compatibleE   s    zWheel.is_compatiblec                 C   s*   t | j| j| jdkrd nt d d S )Nany)project_nameversionr6   z.egg)r   rB   rC   r6   r   egg_namer7   r    r    r!   rD   J   s     zWheel.egg_namec                    s  t | jd| j| jf }d| d| fdd}|d}|d}t|d}td	|  krxtd
k sn td| t	| 
| tj|tj|t|d dd ttt   fdd jD }tj|d}t| ttj|dtj|d tt|dd}	t|	ddtj|d tj|tjd}
tj|
rtj|dd}t	| t|
D ]H}|drttj|
| n ttj|
|tj|| qt|
 ttjjfdddD D ]}t || qtjrDt tj|d}tj|rt!|}|" # }W 5 Q R X |D ]h}tjj|f|#d }tj|d}tj|rtj|st!|d }|$t% W 5 Q R X qW 5 Q R X dS )!z"Install wheel as an egg directory.z%s-%sz%s.dist-infoz%s.datac              
      sT    d | f 8}tr&| dn| }tj |W  5 Q R  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 |fD qS )c                 3   s   | ]}| kr|V  qd S rU   r    )r9   rX   )install_requiresr    r!   r=   q   s   z2Wheel.install_as_egg.<locals>.<dictcomp>.<genexpr>)r   sortedmaprequires)r9   extra)distrZ   rY   r    r!   
<dictcomp>p   s
    z(Wheel.install_as_egg.<locals>.<dictcomp>zEGG-INFOzPKG-INFO)rZ   extras_require)attrsegg_infoNzrequires.txtscriptsz.pycc                 3   s   | ]}t j |V  qd S rU   )r
   r   r   )r9   r   )	dist_datar    r!   r=      s   z'Wheel.install_as_egg.<locals>.<genexpr>)dataheaderspurelibplatlibznamespace_packages.txtr0   z__init__.pyw)&zipfileZipFiler'   rB   rC   r   getr&   r
   mkdir
extractallr   r   r   from_locationr   r   r[   r\   r]   extrasrenameSetuptoolsDistributiondictr   get_command_objr   listdirendswithunlinkr   filterr"   rE   rF   r4   writeNAMESPACE_PACKAGE_INIT)r+   Zdestination_eggdirZdist_basenamerQ   Zwheel_metadataZdist_metadatawheel_versionra   rc   Z
setup_distZdist_data_scriptsZegg_info_scriptsentryr   Znamespace_packagesrM   modZmod_dirZmod_initr    )r_   re   rO   rZ   rY   rP   r!   install_as_eggP   s    

 

  



zWheel.install_as_eggN)__name__
__module____qualname__r/   r8   r@   rD   r   r    r    r    r!   r#   5   s
   r#   )__doc__distutils.utilr   rH   r1   r
   rerk   pkg_resourcesr   r   r   Zsetuptools.extern.sixr   
setuptoolsrs   r   Zsetuptools.command.egg_infor   compileVERBOSEr,   r$   r{   r"   objectr#   r    r    r    r!   <module>   s$   