o
    5‘ði<%  ã                   @   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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„Z)ej*de
d fdd„ƒZ+G dd„ dƒZ,dS )zWheels support.é    N)ÚIterator)Ú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 © )ÚinterpreterÚabiÚplatform©Ú.0Útr   r   úO/root/parts/websockify/install/lib/python3.10/site-packages/setuptools/wheel.pyÚ	<setcomp>+   s    z&_get_supported_tags.<locals>.<setcomp>r   r   r   r   r   Ú_get_supported_tags&   s   r   Úreturnc                 C   sÞ   t  | ¡D ]Q\}}}t j || ¡}|D ]}t j ||¡}t j |||¡}t  ||¡ qttt|ƒƒƒD ]"\}	}
t j ||
¡}t j |||
¡}t j 	|¡sUt  ||¡ ||	= q3qt j| dd�D ]\}}}|rgJ ‚t  
|¡ q^d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)Úsrc_dirÚdst_dirÚdirpathÚdirnamesÚ	filenamesÚsubdirÚfÚsrcÚdstÚnÚdr   r   r   Úunpack.   s$   €ù	þr2   c               	   c   s>   � ddl m}  |  | j¡}zdV  W |  |¡ dS |  |¡ w )z*
    Temporarily disable info traces.
    r   )ÚlogN)Ú	distutilsr3   Úset_thresholdÚWARN)r3   Úsavedr   r   r   Údisable_info_tracesD   s   €r8   c                   @   sx   e Zd Zddd„Zdd„ Zdd„ Zd	d
„ Zdd„ Z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 )ÚWheelr   Nc                 C   sR   t tj |¡ƒ}|d u rtd|›�ƒ‚|| _| ¡  ¡ D ]
\}}t| ||ƒ qd S )Nzinvalid wheel name: )	Ú
WHEEL_NAMEr   r   ÚbasenameÚ
ValueErrorÚfilenameÚ	groupdictÚitemsÚsetattr)Úselfr=   ÚmatchÚkÚvr   r   r   Ú__init__S   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Úsplitr   r   ©rA   r   r   r   Útags[   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>e   s   € z&Wheel.is_compatible.<locals>.<genexpr>F)ÚnextrL   rK   r   r   r   Úis_compatiblec   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   rK   r   r   r   Úegg_nameg   s   ýûÿzWheel.egg_namec                 C   sF   |  ¡ D ]}t |¡}| d¡rt|ƒ t| jƒ¡r|  S qtdƒ‚)Nz
.dist-infoz.unsupported wheel format. .dist-info not found)ÚnamelistÚ	posixpathÚdirnameÚendswithr   Ú
startswithrQ   r<   )rA   ÚzfÚmemberrV   r   r   r   Úget_dist_infoq   s   
ÿ€zWheel.get_dist_infoc                 C   s>   t  | j¡�}|  ||¡ W d  ƒ dS 1 sw   Y  dS )z"Install wheel as an egg directory.N)ÚzipfileÚZipFiler=   Ú_install_as_egg)rA   Údestination_eggdirrY   r   r   r   Úinstall_as_egg{   s   "ÿzWheel.install_as_eggc                 C   s`   | j › d| j› �}|  |¡}|› d�}tj |d¡}|  ||||¡ |  ||¡ |  ||¡ d S )Nú-z.dataúEGG-INFO)	rQ   rR   r[   r   r   r    Ú_convert_metadataÚ_move_data_entriesÚ_fix_namespace_packages)rA   r_   rY   Údist_basenameÚ	dist_infoÚ	dist_dataÚegg_infor   r   r   r^   €   s   

zWheel._install_as_eggc                    s  ‡ ‡fdd„}|dƒ}t | d¡ƒ}t dƒ|  kot dƒk n  }|s+t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   ƒ d S 1 s|w   Y  d S )Nc                    sT   ˆ  t ˆ | ¡¡�}| ¡  d¡}tj ¡  |¡W  d   ƒ S 1 s#w   Y  d S )Núutf-8)	ÚopenrU   r    ÚreadÚdecodeÚemailÚparserÚParserÚparsestr)ÚnameÚfpÚvalue©rg   rY   r   r   Úget_metadataŒ   s   $þz-Wheel._convert_metadata.<locals>.get_metadataÚWHEELzWheel-Versionz1.0z2.0dev0z"unsupported wheel format version: ÚMETADATAzPKG-INFO)Úinstall_requiresÚextras_require)Úattrsri   zrequires.txt)Úparse_versionÚgetr<   r   r   r   r    r9   Ú_convert_requiresÚrenameÚ
setuptoolsÚDistributionÚdictr8   r
   Úget_command_obj)rY   r_   rg   ri   rv   Úwheel_metadataÚwheel_versionÚwheel_v1ry   rz   Ú
setup_distr   ru   r   rc   Š   s:    
ÿþþÿý"ÿ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 rˆ   )rŠ   Úevaluate)r‹   Úenvr   r   r   Úeval¿   s   z%Wheel._convert_requires.<locals>.evalc                 S   s6   z| j j}W n ty   d}Y nw tdd„ |D ƒƒS )Nr   c                 s   s2   � | ]}t |tƒr|d  jdkr|d jV  qdS )r   Úextraé   N)Ú
isinstanceÚtuplert   )r   rŠ   r   r   r   rM   Ç   s   € ýþýz=Wheel._convert_requires.<locals>.for_extra.<locals>.<genexpr>)rŠ   Ú_markersÚAttributeErrorÚset)r‹   Ú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   r‹   )r�   r�   r˜   r   r   rM   Ô   s   €& z5Wheel._convert_requires.<locals>.<dictcomp>.<genexpr>)r#   Úmap)r   ©r�   r˜   rŒ   Úreqsr™   r   Ú
<dictcomp>Ð   s    úþÿÿz+Wheel._convert_requires.<locals>.<dictcomp>)r   r�   ÚatÚget_allr#   rš   r   r   ÚfilterrG   Úfilterfalse)r_   rg   ÚmdÚdepsÚextrasry   rz   r   r›   r   r~   ¯   s   ÿù	zWheel._convert_requiresc                    sæ   t j | ˆ ¡‰ t j ˆ d¡}t j |¡rNt j | dd¡}t  |¡ t  |¡D ]"}| d¡r8t  t j ||¡¡ q&t  t j ||¡t j ||¡¡ q&t  	|¡ t
t jj‡ fdd„dD ƒƒD ]}t|| ƒ q\t j ˆ ¡rqt  	ˆ ¡ dS dS )z,Move data entries to their correct location.Úscriptsrb   z.pycc                 3   s   � | ]
}t j ˆ |¡V  qd S rˆ   )r   r   r    )r   r1   ©rh   r   r   rM   ð   s
   € ÿ
ÿz+Wheel._move_data_entries.<locals>.<genexpr>)ÚdataÚheadersÚpurelibÚplatlibN)r   r   r    r%   ÚmkdirÚlistdirrW   Úunlinkr   r&   r    r2   )r_   rh   Údist_data_scriptsÚegg_info_scriptsÚentryr,   r   r¦   r   rd   Û   s.   

þ

þþÿzWheel._move_data_entriesc              	   C   sº   t j | d¡}t j |¡rYt|ƒ ¡ }|D ]E}t jj|g| d¡¢R Ž }t j |d¡}t j |¡s6t  |¡ t j |¡sXt|ddd��}| t	¡ W d   ƒ n1 sSw   Y  qd S d S )Nznamespace_packages.txtrF   z__init__.pyÚwrj   )Úencoding)
r   r   r    r%   r   rJ   r«   rk   ÚwriteÚNAMESPACE_PACKAGE_INIT)ri   r_   Únamespace_packagesÚmodÚmod_dirÚmod_initrs   r   r   r   re   ù   s   
ÿ€÷zWheel._fix_namespace_packages©r   N)Ú__name__Ú
__module__Ú__qualname__rE   rL   rO   rS   r[   r`   r^   Ústaticmethodrc   r~   rd   re   r   r   r   r   r9   R   s     





$
+
r9   r¹   )-Ú__doc__Ú
contextlibrn   Ú	functoolsrG   r   rU   Úrer\   Úcollections.abcr   Úpackaging.requirementsr   Úpackaging.tagsr   Úpackaging.utilsr   Úpackaging.versionr   r|   r€   Úsetuptools.archive_utilr   Úsetuptools.command.egg_infor	   r
   Ú
_discoveryr   Ú
_importlibr   Úunicode_utilsr   Údistutils.utilr   ÚcompileÚVERBOSErB   r:   r´   Úcacher   r2   Úcontextmanagerr8   r9   r   r   r   r   Ú<module>   sD    üû

