a
    ``                      @   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 e	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)write_requirementsz^(?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 ]\}}}|rJ 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rmdir)Zsrc_dirZdst_dirdirpathZdirnames	filenamessubdirfsrcZdstnd r   2/usr/lib/python3/dist-packages/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   sP   t tj|}|d u 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__6   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productZ
py_versionsplitabiplatformr&   r   r   r   tags>   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)Zinterpreterr/   r0   .0tr   r   r   	<genexpr>H   s   z&Wheel.is_compatible.<locals>.<genexpr>c                 3   s   | ]}| v rd V  qdS )TNr   r4   Zsupported_tagsr   r   r7   J       F)setr   nextr2   r1   r   r8   r   is_compatibleF   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versionr0   z.egg)pkg_resourcesDistributionr>   r?   r0   r   egg_namer1   r   r   r   rB   L   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)Znamelist	posixpathdirnameendswithr   
startswithr>   r!   )r&   zfmemberrD   r   r   r   get_dist_infoR   s    


zWheel.get_dist_infoc                 C   s<   t | j}| || W d   n1 s.0    Y  dS )z"Install wheel as an egg directory.N)zipfileZZipFiler"   _install_as_egg)r&   destination_eggdirrG   r   r   r   install_as_egg\   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)	r>   r?   rI   r	   r   r   _convert_metadata_move_data_entries_fix_namespace_packages)r&   rL   rG   Zdist_basename	dist_info	dist_dataegg_infor   r   r   rK   a   s    
zWheel._install_as_eggc              	      sV  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t   fdd jD }t| ttj|dtj|d tj	t|dd}	tjj}
ttj z*t|	dd tj|d W t|
 nt|
 0 d S )Nc                    sT    t | .}| d}tj |W  d    S 1 sF0    Y  d S )Nzutf-8)	openrC   r   readdecodeemailparserZParserZparsestr)namefpvalue)rR   rG   r   r   get_metadatam   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 r3   )Zmarkerstr)reqr   r   r   raw_req   s    z(Wheel._convert_metadata.<locals>.raw_reqc              
      s2   i | ]*}|t fd dt |fD qS )c                 3   s   | ]}| vr|V  qd S r3   r   )r5   r`   )install_requiresr   r   r7      s   z5Wheel._convert_metadata.<locals>.<dictcomp>.<genexpr>)sortedmaprequires)r5   Zextra)distrb   ra   r   r   
<dictcomp>   s   z+Wheel._convert_metadata.<locals>.<dictcomp>ZMETADATAzPKG-INFO)rb   extras_require)attrsrT   zrequires.txt)r   getr!   r	   mkdirZ
extractallr   r   r@   rA   Zfrom_locationZPathMetadatar   rc   rd   re   Zextrasrename
setuptoolsdictr   Z_global_logZ	thresholdZset_thresholdZWARNr   Zget_command_obj)rG   rL   rR   rT   r]   Zwheel_metadataZwheel_versionZwheel_v1rh   Z
setup_distZlog_thresholdr   )rf   rR   rb   ra   rG   r   rO   k   sR    


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.ZscriptsrN   z.pycc                 3   s   | ]}t j |V  qd S r3   )r	   r   r   )r5   r   rS   r   r   r7      s   z+Wheel._move_data_entries.<locals>.<genexpr>)dataZheadersZpurelibZplatlibN)r	   r   r   r   rk   listdirrE   unlinkrl   r   filterr   )rL   rS   Zdist_data_scriptsZegg_info_scriptsentryr   r   ro   r   rP      s*    


zWheel._move_data_entriesc              	   C   s   t j| d}t j|rt|}|  }W d    n1 sD0    Y  |D ]}t jj|g|dR  }t j|d}t j|st | t j|sRt|d}|t	 W d    qR1 s0    Y  qRd S )Nznamespace_packages.txtr+   z__init__.pyw)
r	   r   r   r   rU   rV   r.   rk   writeNAMESPACE_PACKAGE_INIT)rT   rL   Znamespace_packagesr[   modZmod_dirZmod_initr   r   r   rQ      s    
*
zWheel._fix_namespace_packagesN)__name__
__module____qualname__r*   r2   r<   rB   rI   rM   rK   staticmethodrO   rP   rQ   r   r   r   r   r   4   s   


?
r   )__doc__Zdistutils.utilr   Z	distutilsr   rX   r,   r	   rC   rerJ   r@   rm   r   Z setuptools.extern.packaging.tagsr   Z!setuptools.extern.packaging.utilsr   Zsetuptools.command.egg_infor   compileVERBOSEr'   r   rw   r   r   r   r   r   r   <module>   s,   