a
    5h%                     @   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Zddl	m
Z
 ddlmZ ddlmZ ddlmZ ddlZddlmZ ddl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$ej%dd Z&ddddZ'ej(dd Z)G dd dZ*dS )zWheels support.    N)Requirementsys_tags)canonicalize_name)Version)_unpack_zipfile_obj)_egg_basenamewrite_requirements   )extras_from_deps)metadata)_read_utf8_with_fallback)get_platformz^(?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   dd t  D S )Nc                 S   s   h | ]}|j |j|jfqS  )Zinterpreterabiplatform.0tr   r   /lib/python3.9/site-packages/setuptools/wheel.py	<setcomp>*       z&_get_supported_tags.<locals>.<setcomp>r   r   r   r   r   _get_supported_tags%   s    r   returnc                 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dirpathdirnames	filenamessubdirfsrcdstndr   r   r   unpack-   s    
r0   c               	   c   s>   ddl m}  | | j}zdV  W | | n| | 0 dS )z*
    Temporarily disable info traces.
    r   )logN)	distutilsr1   Zset_thresholdZWARN)r1   Zsavedr   r   r   disable_info_tracesC   s
    r3   c                   @   s   e Zd ZddddZdd Zdd Zd	d
 Zdd ZddddZdd Z	e
dd Ze
dd Ze
dd Ze
dd ZdS )WheelNr   c                 C   sR   t tj|}|d u r&td||| _|  D ]\}}t| || q8d S )Nzinvalid wheel name: )	
WHEEL_NAMEr   r   basename
ValueErrorfilename	groupdictitemssetattr)selfr8   matchkvr   r   r   __init__R   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splitr   r   r<   r   r   r   tagsZ   s
    


z
Wheel.tagsc                 C   s   t dd |  D dS )z2Is the wheel compatible with the current platform?c                 s   s   | ]}|t  v rd V  qdS )TN)r   r   r   r   r   	<genexpr>d   r   z&Wheel.is_compatible.<locals>.<genexpr>F)nextrF   rE   r   r   r   is_compatibleb   s    zWheel.is_compatiblec                 C   s&   t | j| j| jdkrd nt dd S )Nany)r   z.egg)r   project_nameversionr   r   rE   r   r   r   egg_namef   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   
startswithrK   r7   )r<   zfmemberrO   r   r   r   get_dist_infop   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)zipfileZipFiler8   _install_as_egg)r<   destination_eggdirrR   r   r   r   install_as_eggz   s    zWheel.install_as_eggc                 C   s`   | j  d| j }| |}| d}tj|d}| |||| | || | || d S )N-z.dataEGG-INFO)	rK   rL   rT   r   r   r    _convert_metadata_move_data_entries_fix_namespace_packages)r<   rX   rR   Zdist_basename	dist_info	dist_dataegg_infor   r   r   rW      s    

zWheel._install_as_eggc                    s   fdd}|d}t |d}t d|  ko>t dk n  }|sVtd| t| tj|  t| \}}	t	 | t	tj|dtj|d	 t
jt||	d
d}
t , t|
dd tj|d W d    n1 s0    Y  d S )Nc                    sT    t | .}| d}tj |W  d    S 1 sF0    Y  d S )Nutf-8)	openrN   r    readdecodeemailparserZParserZparsestr)namefpvaluer_   rR   r   r   get_metadata   s    z-Wheel._convert_metadata.<locals>.get_metadataZWHEELzWheel-Versionz1.0z2.0dev0z"unsupported wheel format version: ZMETADATAzPKG-INFO)install_requiresextras_require)attrsra   zrequires.txt)parse_versiongetr7   r   r   r   r    r4   _convert_requiresrename
setuptoolsDistributiondictr3   r	   Zget_command_obj)rR   rX   r_   ra   rl   Zwheel_metadataZwheel_versionZwheel_v1rm   rn   Z
setup_distr   rk   r   r\      s8     
zWheel._convert_metadatac              	      s   t j|j }|dpg }ttt|t|}dd dd  dd ttt t	
} fdd	|D }||fS )
NzRequires-Distc                 S   s   t t| } d | _t| S N)r   strmarker)reqr   r   r   raw_req   s    z(Wheel._convert_requires.<locals>.raw_reqc                 [   s   | j  p| j |S rw   )ry   Zevaluate)rz   envr   r   r   eval   s    z%Wheel._convert_requires.<locals>.evalc                 S   s6   z| j j}W n ty"   d}Y n0 tdd |D S )Nr   c                 s   s0   | ](}t |tr|d  jdkr|d jV  qdS )r   extra   N)
isinstancetuplerj   )r   ry   r   r   r   rG      s   z=Wheel._convert_requires.<locals>.for_extra.<locals>.<genexpr>)ry   Z_markersAttributeErrorset)rz   Zmarkersr   r   r   	for_extra   s    
z*Wheel._convert_requires.<locals>.for_extrac              	      s.   i | ]&  t t fd dD qS )c                 3   s&   | ]}|r |d r|V  qdS )r~   Nr   )r   rz   )r}   r~   r   r   r   rG      r   z5Wheel._convert_requires.<locals>.<dictcomp>.<genexpr>)r#   map)r   r}   r   r{   Zreqsr   r   
<dictcomp>   s   z+Wheel._convert_requires.<locals>.<dictcomp>)r   ru   ZatZget_allr#   r   r   r   filterrB   filterfalse)rX   r_   ZmdZdepsextrasrm   rn   r   r   r   rr      s    	zWheel._convert_requiresc                    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scriptsr[   z.pycc                 3   s   | ]}t j |V  qd S rw   )r   r   r    )r   r/   r`   r   r   rG      s   z+Wheel._move_data_entries.<locals>.<genexpr>)dataZheadersZpurelibZplatlibN)r   r   r    r%   mkdirlistdirrP   unlinkrs   r&   r   r0   )rX   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| }|D ]}t jj|g|dR  }t j|d}t j|slt | t j|s*t|ddd}|t	 W d    q*1 s0    Y  q*d S )Nznamespace_packages.txtrA   z__init__.pywrb   )encoding)
r   r   r    r%   r   rD   r   rc   writeNAMESPACE_PACKAGE_INIT)ra   rX   Znamespace_packagesmodZmod_dirZmod_initri   r   r   r   r^      s    
zWheel._fix_namespace_packages)__name__
__module____qualname__r@   rF   rI   rM   rT   rY   rW   staticmethodr\   rr   r]   r^   r   r   r   r   r4   Q   s   



$
+
r4   )+__doc__
contextlibrf   	functoolsrB   r   rN   rerU   Zpackaging.requirementsr   Zpackaging.tagsr   Zpackaging.utilsr   Zpackaging.versionr   rp   rt   Zsetuptools.archive_utilr   Zsetuptools.command.egg_infor   r	   Z
_discoveryr   Z
_importlibr   Zunicode_utilsr   Zdistutils.utilr   compileVERBOSEr=   r5   r   cacher   r0   contextmanagerr3   r4   r   r   r   r   <module>   s<   

