U
    -c                      @   s   d 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
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d	ejjZd
Zdd Zejdd ZG dd dZdS )zWheels support.    N)get_platform)parse_version)sys_tags)canonicalize_name)write_requirements)_unpack_zipfile_objz^(?P<project_name>.+?)-(?P<version>\d.*?)
    ((-(?P<build>\d.*?))?-(?P<py_version>.+?)-(?P<abi>.+?)-(?P<platform>.+?)
    )\.whl$z8__import__('pkg_resources').declare_namespace(__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   4/tmp/pip-unpacked-wheel-izj_87as/setuptools/wheel.pyunpack    s    
r!   c               	   c   s4   ddl m}  | | j}z
dV  W 5 | | X dS )z*
    Temporarily disable info traces.
    r   )logN)	distutilsr"   set_thresholdWARN)r"   Zsavedr   r   r    disable_info_traces6   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   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__E   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    tagsM   s
    


z
Wheel.tagsc                    s0   t dd t D  t fdd|  D dS )z5Is the wheel is compatible with the current platform?c                 s   s   | ]}|j |j|jfV  qd S N)interpreterr9   r:   .0tr   r   r    	<genexpr>W   s    z&Wheel.is_compatible.<locals>.<genexpr>c                 3   s   | ]}| krd V  qdS )TNr   r?   supported_tagsr   r    rB   Y   s      F)setr   nextr<   r;   r   rC   r    is_compatibleU   s    zWheel.is_compatiblec                 C   s,   t j| j| j| jdkrd nt d d S )Nany)project_nameversionr:   z.egg)pkg_resourcesDistributionrI   rJ   r:   r   egg_namer;   r   r   r    rM   [   s     zWheel.egg_namec                 C   sJ   |  D ]4}t|}|drt|t| jr|  S qtdd S )Nz
.dist-infoz.unsupported wheel format. .dist-info not found)namelist	posixpathdirnameendswithr   
startswithrI   r*   )r/   zfmemberrP   r   r   r    get_dist_infoa   s    


zWheel.get_dist_infoc              	   C   s(   t | j}| || W 5 Q R X dS )z"Install wheel as an egg directory.N)zipfileZipFiler+   _install_as_egg)r/   destination_eggdirrS   r   r   r    install_as_eggk   s    zWheel.install_as_eggc                 C   s\   d| j | jf }| |}d| }tj|d}| |||| | || | || d S )Nz%s-%sz%s.dataEGG-INFO)	rI   rJ   rU   r	   r   r   _convert_metadata_move_data_entries_fix_namespace_packages)r/   rY   rS   Zdist_basename	dist_info	dist_dataegg_infor   r   r    rX   p   s    
zWheel._install_as_eggc           
   	      s*  fdd}|d}t |d}t d|  ko>t dk n  }|sTtd| t| tj|tjj	|t
|d d	d
 tt   fdd jD }t| ttj|dtj|d tjt|dd}	t " t|	dd tj|d W 5 Q R X d S )Nc              
      sH    t | ,}| d}tj |W  5 Q R  S Q R X d S )Nzutf-8)	openrO   r   readdecodeemailparserParserparsestr)namefpvalue)r_   rS   r   r    get_metadata|   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 r=   )markerstr)reqr   r   r    raw_req   s    z(Wheel._convert_metadata.<locals>.raw_reqc              	      s.   i | ]&}|fd dt  |fD qS )c                    s   g | ]}| kr|qS r   r   )r@   rp   )install_requiresr   r    
<listcomp>   s   z6Wheel._convert_metadata.<locals>.<dictcomp>.<listcomp>)maprequires)r@   extra)distrr   rq   r   r    
<dictcomp>   s
    
z+Wheel._convert_metadata.<locals>.<dictcomp>METADATAzPKG-INFO)rr   extras_require)attrsra   zrequires.txt)r   getr*   r   r	   r   r   rK   rL   from_locationPathMetadatar   rt   ru   extrasrename
setuptoolsdictr&   r   get_command_obj)
rS   rY   r_   ra   rl   wheel_metadatawheel_versionZwheel_v1rz   Z
setup_distr   )rw   r_   rr   rq   rS   r    r\   z   sL    
 
zWheel._convert_metadatac                    s   t j|   t j d}t j|rt j| dd}t | t |D ]D}|drpt t j|| qLt t j||t j|| qLt 	| t
t jj fdddD D ]}t||  qt j rt 	  dS )z,Move data entries to their correct location.scriptsr[   z.pycc                 3   s   | ]}t j |V  qd S r=   )r	   r   r   )r@   r   r`   r   r    rB      s   z+Wheel._move_data_entries.<locals>.<genexpr>)dataheaderspurelibplatlibN)r	   r   r   r   mkdirlistdirrQ   unlinkr   r   filterr!   )rY   r`   Zdist_data_scriptsZegg_info_scriptsentryr   r   r   r    r]      s.      


zWheel._move_data_entriesc              
   C   s   t j| d}t j|rt|}|  }W 5 Q R X |D ]l}t jj|f|d }t j|d}t j|s~t | t j|s>t|d}|t	 W 5 Q R X q>d S )Nznamespace_packages.txtr4   z__init__.pyw)
r	   r   r   r   rb   rc   r8   r   writeNAMESPACE_PACKAGE_INIT)ra   rY   Znamespace_packagesrj   modZmod_dirZmod_initr   r   r    r^      s     

zWheel._fix_namespace_packagesN)__name__
__module____qualname__r3   r<   rG   rM   rU   rZ   rX   staticmethodr\   r]   r^   r   r   r   r    r'   C   s   


9
r'   )__doc__re   r5   r	   rO   rerV   
contextlibdistutils.utilr   rK   r   r   Z setuptools.extern.packaging.tagsr   Z!setuptools.extern.packaging.utilsr   Zsetuptools.command.egg_infor   Zsetuptools.archive_utilr   compileVERBOSEr0   r(   r   r!   contextmanagerr&   r'   r   r   r   r    <module>   s2   
