3

g!                 @   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	j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$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    4/tmp/pip-unpacked-wheel-2ahgb425/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!   tagsF   s    

z
Wheel.tagsc                s0   t dd t D  t fdd| j D dS )z5Is the wheel is compatible with the current platform?c             s   s   | ]}|j |j|jfV  qd S )N)interpreterr5   r6   ).0tr    r    r!   	<genexpr>P   s    z&Wheel.is_compatible.<locals>.<genexpr>c             3   s   | ]}| krd V  qdS )TNr    )r9   r:   )supported_tagsr    r!   r;   Q   s    F)setr   nextr7   )r+   r    )r<   r!   is_compatibleN   s    zWheel.is_compatiblec             C   s,   t j| j| j| jdkrd nt dj d S )Nany)project_nameversionr6   z.egg)pkg_resourcesDistributionrA   rB   r6   r   egg_name)r+   r    r    r!   rE   S   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memberrH   r    r    r!   get_dist_infoY   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_eggdirrK   r    r    r!   install_as_eggc   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   rM   r
   r   r   _convert_metadata_move_data_entries_fix_namespace_packages)r+   rQ   rK   Zdist_basename	dist_info	dist_dataegg_infor    r    r!   rP   h   s    
zWheel._install_as_eggc                sL  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	j
|tj|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j	t|dd}	tjj}
tjtj z t|	jdd tjj|d W d tj|
 X 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)
openrG   r   r   readdecodeemailparserParserparsestr)namefpvalue)rV   rK   r    r!   get_metadatat   s    z-Wheel._convert_metadata.<locals>.get_metadataZ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   rg   )install_requiresr    r!   r;      s   z5Wheel._convert_metadata.<locals>.<dictcomp>.<genexpr>)sortedmaprequires)r9   extra)distri   rh   r    r!   
<dictcomp>   s   z+Wheel._convert_metadata.<locals>.<dictcomp>METADATAzPKG-INFO)ri   extras_require)attrsrX   zrequires.txt)r   getr&   r
   mkdir
extractallr   r   rC   rD   from_locationPathMetadatar   rj   rk   rl   extrasrename
setuptoolsdictr   _global_log	thresholdset_thresholdWARNr   get_command_obj)rK   rQ   rV   rX   rc   wheel_metadatawheel_versionZwheel_v1rq   Z
setup_distZlog_thresholdr    )rn   rV   ri   rh   rK   r!   rS   r   sB     



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   )rW   r    r!   r;      s   z+Wheel._move_data_entries.<locals>.<genexpr>dataheaderspurelibplatlibN)r   r   r   r   )r
   r   r   r   rt   listdirrI   unlinkry   r   filterr"   )rQ   rW   Zdist_data_scriptsZegg_info_scriptsentryr   r    )rW   r!   rT      s&    





zWheel._move_data_entriesc             C   s   t jj| d}t jj|rt|}|j j }W d Q R X xt|D ]l}t jj|f|jd }t jj|d}t jj|st j| t jj|s@t|d}|jt	 W d Q R X q@W d S )Nznamespace_packages.txtr0   z__init__.pyw)
r
   r   r   r   rY   rZ   r4   rt   writeNAMESPACE_PACKAGE_INIT)rX   rQ   Znamespace_packagesra   modZmod_dirZmod_initr    r    r!   rU      s    


zWheel._fix_namespace_packagesN)__name__
__module____qualname__r/   r7   r?   rE   rM   rR   rP   staticmethodrS   rT   rU   r    r    r    r!   r#   <   s   

@r#   )__doc__distutils.utilr   	distutilsr   r\   r1   r
   rG   rerN   rC   rz   r   Z setuptools.extern.packaging.tagsr   Z!setuptools.extern.packaging.utilsr   Zsetuptools.extern.sixr   Zsetuptools.command.egg_infor   type__metaclass__compileVERBOSEr,   r$   r   r"   r#   r    r    r    r!   <module>   s,   
