U
    ٲ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	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   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-aqb5epr1/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 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__>   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!   tagsF   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)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    r;   supported_tagsr    r!   r>   Q   s      F)setr   nextr8   r7   r    r?   r!   is_compatibleN   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versionr6   z.egg)pkg_resourcesDistributionrE   rF   r6   r   egg_namer7   r    r    r!   rI   S   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   
startswithrE   r&   )r+   zfmemberrL   r    r    r!   get_dist_infoY   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_eggdirrO   r    r    r!   install_as_eggc   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)	rE   rF   rQ   r
   r   r   _convert_metadata_move_data_entries_fix_namespace_packages)r+   rU   rO   Zdist_basename	dist_info	dist_dataegg_infor    r    r!   rT   h   s    
zWheel._install_as_eggc              	      sL  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 5 t|
 X d S )Nc              
      sT    t | 8}tr&| dn| }tj 	|W  5 Q R  S Q R X d S )Nzutf-8)
openrK   r   r   readdecodeemailparserParserparsestr)namefpvalue)r[   rO   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 r9   )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   | ]}| kr|V  qd S r9   r    )r<   rl   )install_requiresr    r!   r>      s   z5Wheel._convert_metadata.<locals>.<dictcomp>.<genexpr>)sortedmaprequires)r<   extra)distrn   rm   r    r!   
<dictcomp>   s
    z+Wheel._convert_metadata.<locals>.<dictcomp>METADATAzPKG-INFO)rn   extras_require)attrsr]   zrequires.txt)r   getr&   r
   mkdir
extractallr   r   rG   rH   from_locationPathMetadatar   ro   rp   rq   extrasrename
setuptoolsdictr   _global_log	thresholdset_thresholdWARNr   get_command_obj)rO   rU   r[   r]   rh   wheel_metadatawheel_versionZwheel_v1rv   Z
setup_distZlog_thresholdr    )rs   r[   rn   rm   rO   r!   rX   r   sT    

 
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.scriptsrW   z.pycc                 3   s   | ]}t j |V  qd S r9   )r
   r   r   )r<   r   r\   r    r!   r>      s   z+Wheel._move_data_entries.<locals>.<genexpr>)dataheaderspurelibplatlibN)r
   r   r   r   ry   listdirrM   unlinkr~   r   filterr"   )rU   r\   Zdist_data_scriptsZegg_info_scriptsentryr   r    r   r!   rY      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.txtr0   z__init__.pyw)
r
   r   r   r   r^   r_   r4   ry   writeNAMESPACE_PACKAGE_INIT)r]   rU   Znamespace_packagesrf   modZmod_dirZmod_initr    r    r!   rZ      s     

zWheel._fix_namespace_packagesN)__name__
__module____qualname__r/   r8   rC   rI   rQ   rV   rT   staticmethodrX   rY   rZ   r    r    r    r!   r#   <   s   


?
r#   )__doc__distutils.utilr   	distutilsr   ra   r1   r
   rK   rerR   rG   r   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.   