o
    YÄ_%  ã                   @   sª  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
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ZejdksVejdk r`ejdkr`d dlmZmZmZ ejdk rkeZeZeZdZe
 d	¡Ze  d
¡Z!G dd„ de"ƒZ#G dd„ de"ƒZ$G dd„ de%ƒZ&dd„ Z'dd„ Z(ejdkr£g fdd„Z)ng fdd„Z)dd„ Z*dd„ Z+dd„ Z,d,d d!„Z-d"d#„ Z.d$d%„ Z/d&d'„ Z0g d(¢dfd)d*„Z1d+d
„ Z2dS )-é    )Úprint_functionNz0.0.3)é   é   ©r   )é   é   )ÚAnyÚDictÚList)é   r   zu(?P<distribution>.+)-(?P<version>.+)(-(?P<build_tag>.+))?-(?P<python_tag>.+)-(?P<abi_tag>.+)-(?P<platform_tag>.+).whlÚinstallc                   @   s   e Zd ZdZdS )ÚIncompleteInstallationWarningzh
    Some installation step was not handled, potentially resulting in an
    incomplete instalation
    N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© r   r   ú4usr/lib/python3.10/site-packages/install/__init__.pyr   /   s    r   c                   @   ó   e Zd ZdS )ÚInstallWarningN©r   r   r   r   r   r   r   r   6   ó    r   c                   @   r   )ÚInstallExceptionNr   r   r   r   r   r   :   r   r   c                 C   sB   t  |¡}|std |¡ƒ‚tj | tj | tj¡dd … ¡¡S )NzCouldn't find {}r   )	Ú	sysconfigÚget_pathr   ÚformatÚosÚpathÚjoinÚsepÚsplit)ÚdestdirÚlibr   r   r   r   Ú_destdir_path>   s   
&r#   c                 C   st   i }t tj | d¡ƒ%}|D ]}| d¡}t|ƒdkr'|d  ¡ ||d  ¡ < qW d   ƒ |S 1 s3w   Y  |S )NZWHEELú:r   r   r   )Úopenr   r   r   r    ÚlenÚstrip)Zdist_info_pathÚmetadataÚfÚlineÚentryr   r   r   Ú_read_wheel_metadataE   s   
€ý
ÿûr,   ©r   é   c                    s   t j| |d‡ fdd„d d S )NTc                     s   ˆ S ©Nr   )Ú_©Úignorer   r   Ú<lambda>R   s    z_copy_dir.<locals>.<lambda>)Údirs_exist_okr2   )ÚshutilÚcopytree)ÚsrcÚdstr2   r   r1   r   Ú	_copy_dirQ   s   r9   c                 C   sj   ddl m} t | ¡D ]'}||v rqtj | |¡}tj ||¡}tj |¡r,|||ƒ qt ||¡ qd S )Nr   )Ú	copy_tree)	Zdistutils.dir_utilr:   r   Úlistdirr   r   Úisdirr5   Úcopy2)r7   r8   r2   r:   Únoder   Úrootr   r   r   r9   V   s   øc              	   C   sÊ   t  ¡ }| | ¡ d|v ratj |¡st |¡ dd l}|d  ¡ D ]@\}}| 	d¡\}}|j
j|||dd}|jtjdd\}}	ttj ||¡dƒ}
|
 |	¡ W d   ƒ n1 s[w   Y  q"d S d S )	NÚconsole_scriptsr   r$   Zconsole)ÚsectionÚposix)ÚkindÚwb)ÚconfigparserÚConfigParserÚreadr   r   ÚexistsÚmkdirZinstaller.scriptsÚitemsr    ÚscriptsZScriptZgenerateÚsysÚ
executabler%   r   Úwrite)ÚfileÚdirZentrypointsÚ	installerÚnameZbackendÚpackageÚcallÚscriptÚdatar)   r   r   r   Ú_generate_entrypoint_scriptsc   s    

ÿ€ôrW   c                    sˆ   ‡ fdd„t  ˆ ¡D ƒ}|D ]}t j |¡std |¡ƒ‚qtj|dd}|D ]}| ¡ r7t	 
dd |¡|¡}t|dd	 q'| ¡  d S )
Nc                    s   g | ]	}t j ˆ |¡‘qS r   )r   r   r   )Ú.0rU   ©rP   r   r   Ú
<listcomp>w   s    z$_replace_shebang.<locals>.<listcomp>zScript is not a file: {}T)Zinplacez	^#!pythonz#!{}Ú )Úend)r   r;   r   Úisfiler   r   Ú	fileinputÚinputZisfirstlineÚreÚsubÚprintÚclose)rP   ÚinterpreterrK   rU   r)   r*   r   rY   r   Ú_replace_shebangv   s   ÿre   c                 C   sº   dd l }tjdkrddlm} ndd l}|j | ¡}|jr$|j 	¡ s$dS z| 
|j¡}| |j¡}W n |jy=   Y dS w | d¡pDg }|jD ]	}||vrQ dS qH|jr[|j |¡S dS )Nr   r-   ©r(   TFzProvides-Extra)Zpackaging.requirementsrL   Úversion_infoÚ	importlibr(   Úimportlib_metadataÚrequirementsÚRequirementÚmarkerÚevaluateÚversionrR   ÚPackageNotFoundErrorÚget_allÚextrasÚ	specifierÚcontains)Úrequirement_stringÚ	packagingri   Úreqrn   r(   Zmetadata_extrasÚextrar   r   r   Ú_check_requirement†   s*   
ÿ
ÿrx   Fc              
   C   sò   z\dd l }tjdkrddlm} ndd l}|j | ¡}|jd }|r?| d¡}|D ]}|j	 
|¡}t ¡ |vr>td |¡ƒ‚q)|rW|j d¡pHg D ]}	t|	ƒsVtd |	¡ƒ‚qIW d S W d S  tyx }
 zt d	 |
¡t¡ W Y d }
~
d S d }
~
ww )
Nr   r-   rf   zRequires-Pythonú,z'Incompatible python version, needed: {}zRequires-DistzMissing dependency: {}z<{}: Platform/Python tags were not verified for compatibility)Zpackaging.specifiersrL   rg   rh   r(   ri   ÚDistributionÚatr    Ú
specifiersÚ	SpecifierÚplatformÚpython_versionr   r   rp   rx   ÚImportErrorÚwarningsÚwarnr   )rP   Úverify_dependenciesru   ri   ÚdistZpy_verZpy_versÚverZpy_specrv   Úer   r   r   Ú_verify_compability¤   s2   


ÿÿþ €ÿr‡   c                 C   sJ   t tj | |d ¡dƒ}t ||¡ W d   ƒ d S 1 sw   Y  d S )Nú.picklerD   )r%   r   r   r   ÚpickleÚdump)rP   rR   rV   r)   r   r   r   Ú_save_pickleÀ   s   "ÿr‹   c                 C   sF   t tj | |d ¡dƒ}t |¡W  d   ƒ S 1 sw   Y  d S )Nrˆ   Úrb)r%   r   r   r   r‰   Úload)rP   rR   r)   r   r   r   Ú_load_pickleÅ   s   $ÿrŽ   c                 C   s$   t  | ¡}|std | ¡ƒ‚| ¡ S )NzInvalid wheel name: {})Ú_WHEEL_NAME_REGEXÚmatchr   r   Ú	groupdict)rR   r   r   r   r   Ú
parse_nameÊ   s   
r’   )r   r   r   c                 C   s˜  t j |d¡}t j |d¡}tt j | ¡ƒ}d |d |d ¡}t j |d |¡¡}t j |d¡}	t j |d |¡d¡}
t | ¡}| |¡ W d   ƒ n1 sQw   Y  t	|ƒ}t
tt|d	  d
¡ƒƒtkrqtd |d	 ¡ƒ‚t||ƒ tjdkr |D ]!}t d |¡¡ tjdkr—tj||tjjd q}tj||d q}n|r§t |¡ t j |	¡r²t|	|ƒ t j |
¡r¾t|
tjƒ t|d|ƒ t|d|ƒ d S )NÚpkgrK   z{}-{}Údistributionrn   z{}.dist-infozentry_points.txtz{}.datazWheel-VersionÚ.zUnsupported wheel version: {}r   zOptimizing for {})r   r   )ÚoptimizeÚinvalidation_mode)r–   ú
wheel-infor(   ) r   r   r   r’   Úbasenamer   ÚzipfileÚZipFileÚ
extractallr,   ÚtupleÚmapÚintr    Ú_SUPPORTED_WHEEL_VERSIONr   r‡   rL   rg   ÚloggerÚdebugÚ
compileallZcompile_dirÚ
py_compileÚPycInvalidationModeÚCHECKED_HASHr]   rW   r<   re   rM   r‹   )ZwheelÚ	cache_dirr–   rƒ   Úpkg_cache_dirÚscripts_cache_dirÚ
wheel_inforS   Z	dist_infoZentrypoints_fileZscripts_dirZ	wheel_zipr(   Úlevelr   r   r   ÚbuildÑ   s>   ÿ


ÿú

r¬   c                    s^  ‡ fdd„}t | dƒ}t | dƒ}tj | d¡}tj | d¡}d |d |d	 ¡}tj | |¡}||d
 dkr8dndƒ}	t||	dd|gd dD ]}
tj ||
¡}tj |¡r]t|||
ƒƒ qGtj |¡ržt |¡D ]4}tj ||¡}|dkr}t||dƒƒ |dkrˆt||dƒƒ |dkr”t||dƒƒ qit 	d |¡t
¡ qitj |¡r­t||dƒƒ d S d S )Nc                    s
   t ˆ | ƒS r/   )r#   )r"   ©r!   r   r   Údestdir_pathü   s   
zinstall.<locals>.destdir_pathr˜   r(   r“   rK   z
{}-{}.datar”   rn   zRoot-Is-PurelibÚtrueÚpurelibÚplatlibr1   )r°   r±   zUnhandled data folder: {})rŽ   r   r   r   r   r9   r<   r;   r   r‚   r   )r§   r!   r®   rª   r(   r¨   r©   Zpkg_data_dir_nameZpkg_data_dirÚpkg_dirr"   Útargetr>   r   r­   r   r   û   s6   

€ÿ)F)3Ú
__future__r   r£   rE   r^   Úloggingr   r‰   r~   r¤   r`   r5   rL   r   r   rš   Zinstall._vendorÚ_vendorÚ__version__rg   Útypingr   r	   r
   ÚIOErrorÚFileNotFoundErrorÚOSErrorÚPermissionErrorÚFileExistsErrorr    Úcompiler   Ú	getLoggerr¡   ÚRuntimeWarningr   r   Ú	Exceptionr   r#   r,   r9   rW   re   rx   r‡   r‹   rŽ   r’   r¬   r   r   r   r   r   Ú<module>   sX   





*