a
    G*f!                     @   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ZddlmZ ddlmZmZ dd	lmZ dd
lmZ edejjZdZejdddd Z dd Z!ej"dd Z#G dd dZ$dS )zWheels support.    Nsys_tags)canonicalize_name)Version)_unpack_zipfile_obj)_egg_basenamewrite_requirements   )_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__)
)maxsizec                   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   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dr   r   r   unpack*   s    
r*   c               	   c   s>   ddl m}  | | j}zdV  W | | n| | 0 dS )z*
    Temporarily disable info traces.
    r   )logN)	distutilsr+   Zset_thresholdZWARN)r+   Zsavedr   r   r   disable_info_traces@   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)selfr2   matchkvr   r   r   __init__O   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   r6   r   r   r   tagsW   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>a   r   z&Wheel.is_compatible.<locals>.<genexpr>F)nextr@   r?   r   r   r   is_compatible_   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   r?   r   r   r   egg_namec   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   
startswithrE   r1   )r6   zfmemberrI   r   r   r   get_dist_infom   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ZipFiler2   _install_as_egg)r6   destination_eggdirrL   r   r   r   install_as_eggw   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   rN   r   r   r   _convert_metadata_move_data_entries_fix_namespace_packages)r6   rQ   rL   Zdist_basename	dist_info	dist_dataegg_infor   r   r   rP   |   s    
zWheel._install_as_eggc                    sH  dd l }fdd}|d}t|d}td|  koFtdk n  }|s\td| t| tj||jj	||
|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 d    n1 s:0    Y  d S )Nr   c                    sT    t | .}| d}tj |W  d    S 1 sF0    Y  d S )Nutf-8)	openrH   r   readdecodeemailparserZParserZparsestr)namefpvalue)rW   rL   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 N)Z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 | ]}| vr|qS r   r   )r   rg   )install_requiresr   r   
<listcomp>   s   z6Wheel._convert_metadata.<locals>.<dictcomp>.<listcomp>)maprequires)r   Zextra)distri   rh   r   r   
<dictcomp>   s   z+Wheel._convert_metadata.<locals>.<dictcomp>ZMETADATAzPKG-INFO)ri   extras_require)attrsrY   zrequires.txt)pkg_resourcesparse_versiongetr1   r   r   r   r   ZDistributionZfrom_locationZPathMetadatar   rk   rl   Zextrasrename
setuptoolsdictr-   r   Zget_command_obj)rL   rQ   rW   rY   rq   rc   Zwheel_metadataZwheel_versionZwheel_v1ro   Z
setup_distr   )rm   rW   ri   rh   rL   r   rT      sH     

	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scriptsrS   z.pycc                 3   s   | ]}t j |V  qd S re   )r   r   r   )r   r)   rX   r   r   rA      s   z+Wheel._move_data_entries.<locals>.<genexpr>)dataZheadersZpurelibZplatlibN)r   r   r   r!   mkdirlistdirrJ   unlinkrt   r"   filterr*   )rQ   rX   Zdist_data_scriptsZegg_info_scriptsentryr%   r   rw   r   rU      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.txtr;   z__init__.pywrZ   )encoding)
r   r   r   r!   r
   r>   ry   r[   writeNAMESPACE_PACKAGE_INIT)rY   rQ   Znamespace_packagesmodZmod_dirZmod_initra   r   r   r   rV      s    
zWheel._fix_namespace_packagesN)__name__
__module____qualname__r:   r@   rC   rG   rN   rR   rP   staticmethodrT   rU   rV   r   r   r   r   r.   N   s   



:
r.   )%__doc__
contextlibr^   	functoolsr<   r   rH   rerO   Zpackaging.tagsr   Zpackaging.utilsr   Zpackaging.versionr   rr   ru   Zsetuptools.archive_utilr   Zsetuptools.command.egg_infor   r   Zunicode_utilsr
   Zdistutils.utilr   compileVERBOSEr7   r/   r   	lru_cacher   r*   contextmanagerr-   r.   r   r   r   r   <module>   s6   


