o
    �PÔa=9  ã                   @   sò  U 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mZmZmZmZ d dlZd dlmZ d dlmZ d dlmZmZ d d	lmZ d d
lmZmZ d dlmZmZ d dl m!Z! d dl"m#Z#m$Z$m%Z%m&Z&m'Z' d dl(m)Z) e  *e+¡Z,G dd„ dƒZ-ddœdedee de.de/ddf
dd„Z0i Z1eee.f e2d< dede.fdd„Z3	dEdedee de/ddfdd„Z4ddœdedee de.de/ddf
dd „Z5	dFd!e)d"ee/ dee-e/f fd#d$„Z6dd%d%d&œd'ed"ee/ d(e.d)e.dee/e-f f
d*d+„Z7	dFd,eded-eee/  dee fd.d/„Z8		dGd0e/d1e/d"e/d(e.d2ee/ d3ee/ d4eee/e!f  de/de/fd5d6„Z9d7e/d8e/d9ee/ d:e.de/f
d;d<„Z:d!e)d"e/ded'ed=e.de.ddfd>d?„Z;deddfd@dA„Z<dBe/de/de/fdCdD„Z=dS )Hé    N)ÚPath)Úwhich)ÚTemporaryDirectory)ÚDictÚListÚOptionalÚSetÚTuple)Úcanonicalize_name)Ú	constants)ÚboldÚred)ÚWINDOWS)ÚhazardÚstars)Úparse_specifier_for_installÚvalid_pypi_name)ÚPackageInfo)Ú	PipxErrorÚmkdirÚ	pipx_wrapÚrmdirÚsafe_unlink)ÚVenvc                   @   sL   e Zd Z				ddededededdf
dd	„Zdefd
d„Zddd„ZdS )ÚVenvProblemsFÚbad_venv_nameÚinvalid_interpreterÚmissing_metadataÚnot_installedÚreturnNc                 C   s   || _ || _|| _|| _d S ©N)r   r   r   r   )Úselfr   r   r   r   © r"   ú6/usr/lib/python3/dist-packages/pipx/commands/common.pyÚ__init__   s   
zVenvProblems.__init__c                 C   s   t | j ¡ ƒS r    )ÚanyÚ__dict__Úvalues)r!   r"   r"   r#   Úany_(   s   zVenvProblems.any_Úvenv_problemsc                 C   s,   | j D ]}t| |t| |ƒpt||ƒƒ qd S r    )r&   ÚsetattrÚgetattr)r!   r)   Ú	attributer"   r"   r#   Úor_+   s   
ýÿzVenvProblems.or_)FFFF)r)   r   r   N)Ú__name__Ú
__module__Ú__qualname__Úboolr$   r(   r-   r"   r"   r"   r#   r      s$    ûþýüû
úr   Ú ©ÚsuffixÚlocal_bin_dirÚ	app_pathsÚforcer4   r   c                C   s.   t | ƒst| ||d� d S t| |||d� d S )Nr3   ©r7   r4   )Úcan_symlinkÚ_copy_package_appsÚ_symlink_package_apps)r5   r6   r7   r4   r"   r"   r#   Úexpose_apps_globally4   s   r<   Ú_can_symlink_cachec              
   C   s²   t sdS | tvrUt| d��@}t|ƒ}|d }| ¡  |d }z| |¡ dt| < W n ttfy8   dt| < Y nw W d   ƒ t|  S W d   ƒ t|  S 1 sPw   Y  t|  S )NT)ÚdirÚaÚbF)r   r=   r   r   ÚtouchÚ
symlink_toÚOSErrorÚNotImplementedError)r5   ÚdÚpÚtargetÚlnkr"   r"   r#   r9   @   s,   
ÿÿ
ùþ
÷õr9   c              	   C   sˆ   |D ]?}|  ¡ }|j}t| t||ƒ ƒ}|j ¡ st|jƒ | ¡ r7t 	t
› dt|ƒ› dt|ƒ› �¡ t|ƒ | ¡ rAt ||¡ qd S )Nz  Overwriting file z with )ÚresolveÚnamer   Ú
add_suffixÚparentÚis_dirr   ÚexistsÚloggerÚwarningr   Ústrr   ÚshutilÚcopy)r5   r6   r4   Úsrc_unresolvedÚsrcÚappÚdestr"   r"   r#   r:   U   s   

"€ör:   c                C   sj  |D ]°}|j }t||ƒ}t| | ƒ}|j ¡ st|jƒ |rEt dt|ƒ› d�¡ z| 	¡  W n t
y8   Y n tyD   t|ƒ Y nw | ¡ }| ¡ }	|r�| |¡rdt dt|ƒ› dt|ƒ› �¡ nt tdt› dt|ƒ› d| ¡ › dt|ƒ› d	�	d
d�¡ q|	r”|s”t dt|ƒ› d�¡ | 	¡  t|ƒ}
| |¡ |
r²t tdt› d|› d|
› d�d
d�¡ qd S )NzForce is true. Removing Ú.z
Same path z and z
                        z  File exists at z' and points
                        to z, not zA. Not
                        modifying.
                        ú    ©Úsubsequent_indentzRemoving existing symlink z' since it pointed non-existent locationz
                    ú  Note: z1 was already on your
                    PATH at )rJ   rK   r   rL   rM   r   rO   ÚinforQ   ÚunlinkÚFileNotFoundErrorÚIsADirectoryErrorr   rN   Ú
is_symlinkÚsamefilerP   r   r   rI   r   rB   )r5   r6   r7   r4   Úapp_pathÚapp_nameÚapp_name_suffixedÚsymlink_pathrN   ra   Úexisting_executable_on_pathr"   r"   r#   r;   e   sr   


ÿ
 ÿÿþþúÿ
ÿ
ÿÿþûÿ€Ôr;   ÚvenvÚpackage_namec              	   C   s   | j }| j ¡ }|d u r| j}| ¡ s*tdd�dtt|jƒƒ› dt	|ƒ› dt
› �fS | js?tdd�dtt|jƒƒ› dt
› �fS |jt|jƒkrYtdd�dtt|jƒƒ› d	t
› �fS | j| jd
kr{tdd�dtt|ƒƒ› dtdƒ› d|j› dt
› �fS tƒ d
fS )NT)r   z   package z has invalid interpreter ú)r   z% has missing internal pipx metadata.)r   z" needs its internal data updated.r2   )r   ú zis not installedz in the venv )ÚrootÚpython_pathrI   Úmain_package_nameÚis_filer   r   r   rJ   rQ   r   Úpackage_metadatar
   Úpackage_version)rh   ri   Úvenv_dirrm   r"   r"   r#   Úvenv_health_checkŸ   sB   
ÿÿþÿþÿþÿÿþ
rs   F)ri   Únew_installÚinclude_injectedrr   rt   ru   c             
      sè   t | ƒ}|d u r|j}t||ƒ\}}| ¡ r||fS |j| ‰ ˆ j}ˆ jr*|ˆ j7 }t|j	t
j‡ fdd„|D ƒƒ}tdd„ |D ƒƒ}	t‡ fdd„ˆ jD ƒt|	ƒ ƒ}
|jjd ur\|jjnd}t|ˆ j|||	|
|rl|jjnd ˆ jd�|fS )	Nc                    s   g | ]}t |ˆ jƒ‘qS r"   ©rK   r4   )Ú.0rV   ©rp   r"   r#   Ú
<listcomp>Û   ó    z$get_venv_summary.<locals>.<listcomp>c                 s   s   � | ]}|j V  qd S r    )rJ   )rw   rF   r"   r"   r#   Ú	<genexpr>Ý   s   € z#get_venv_summary.<locals>.<genexpr>c                    s   h | ]}t |ˆ jƒ’qS r"   rv   )rw   rJ   rx   r"   r#   Ú	<setcomp>ß   rz   z#get_venv_summary.<locals>.<setcomp>r2   r3   )r   rn   rs   r(   rp   ÚappsÚinclude_dependenciesÚapps_of_dependenciesÚ!get_exposed_app_paths_for_packageÚbin_pathr   ÚLOCAL_BIN_DIRÚsortedÚsetÚpipx_metadataÚpython_versionÚ_get_list_outputrq   Úinjected_packagesr4   )rr   ri   rt   ru   rh   r)   Úwarning_messager}   Úexposed_app_pathsÚexposed_binary_namesÚunavailable_binary_namesr†   r"   rx   r#   Úget_venv_summaryÃ   sJ   

ýÿÿÿýø
õr�   Úvenv_bin_pathÚpackage_binary_namesc              	   C   s€   |d u rg }t ƒ }| ¡ D ]0}z%d}t|ƒr#| ¡ r#| ¡ j | ¡}n	t|ƒs,|j|v }|r3| |¡ W q t	y=   Y qw |S )NF)
r„   Úiterdirr9   ra   rI   rL   rb   rJ   Úaddr_   )rŽ   r5   r�   Úbin_symlinksr@   Úis_same_filer"   r"   r#   r€   ø   s"   

€ÿr€   r†   rq   r‹   rŒ   rˆ   c           
      C   sì   g }|rdt t || ¡ƒ› d�nd}| d|rdnd› dt t |¡ƒ› dt |ƒ› |› d| › �	¡ |r:|r:| d	¡ |D ]
}	| d
|	› �¡ q<|D ]}	| d
t|	ƒ› d�¡ qI|rq| d¡ |D ]}	| d|	› d||	 j› �¡ q`d |¡S )Nz (ú)r2   z  Ú	installedz	 package rk   z, installed using z'  These apps are now globally availablez    - z5 (symlink missing or pointing to unexpected location)z    Injected Packages:z      - Ú
)r   ÚshlexÚquoteÚappendr   rq   Újoin)
r†   rq   ri   rt   r‹   rŒ   rˆ   r4   ÚoutputrJ   r"   r"   r#   r‡     s0   
" ÿÿÿÿ
ÿ

r‡   Úpackage_specÚpythonÚpip_argsÚverbosec          	      C   sÐ   t   ¡ }t| ƒ}|d ur&|}t d|› �¡ t dt   ¡ | d›d�¡ |S t| |ƒ\} }t ¡ �}tt|ƒ||d�}|j	g g d� |j
| |d�}W d   ƒ n1 sSw   Y  t dt   ¡ | d›d�¡ |S )NzDetermined package name: zPackage name determined in z.1fÚs)r�   rŸ   )Ú	venv_argsrž   )Úpackage_or_urlrž   )Útimer   rO   r]   r   Útempfiler   r   r   Úcreate_venvÚinstall_package_no_deps)	rœ   r�   rž   rŸ   Ú
start_timeÚ	pypi_nameri   Útemp_venv_dirrh   r"   r"   r#   Úpackage_name_from_spec8  s"   
ÿýrª   r~   c                C   s.  | j | }|› |j› �}|js[|js"|  ¡ r|  ¡  td|› d�ƒ‚|jr[|s[|j ¡ D ]\}}	t	d|› dt
|	ƒ› d�ƒ |	D ]
}
t	d|
j› �ƒ q?q,|  ¡ rS|  ¡  td|› d�ƒ‚t||j||jd� |rz|j ¡ D ]\}}t||||jd� qlt||d	d
�\}}t	|ƒ t|ƒ t	dt› �tjd� d S )Nz1
                No apps associated with package z¹ or its
                dependencies. If you are attempting to install a library, pipx
                should not be used. Consider using pip or a similar tool instead.
                zNote: Dependent package 'z' contains z appsz  - a%  . Try again
                with '--include-deps' to include apps of dependent packages,
                which are listed above. If you are attempting to install a
                library, pipx should not be used. Consider using pip or a
                similar tool instead."
                r8   T)ri   rt   zdone! )Úfile)rp   r4   r}   r   Úsafe_to_removeÚremove_venvr   Úapp_paths_of_dependenciesÚitemsÚprintÚlenrJ   r<   r6   r�   Úwarn_if_not_on_pathr   ÚsysÚstderr)rh   ri   r5   rr   r~   r7   rp   Údisplay_nameÚdepÚdependent_appsrV   Ú_r6   Úpackage_summaryr"   r"   r#   Úrun_post_install_actionsU  s\   
	ÿÿ
ýÿÿÿÿ
ü
ÿ
ÿrº   c                 C   s:   t  t| ƒ¡st tdt› dt| ƒ›d�dd�¡ d S d S )Nz
                r\   a<   is not on your PATH
                environment variable. These apps will not be globally
                accessible until your PATH is updated. Run `pipx ensurepath` to
                automatically add it, or manually modify your PATH in your
                shell's config file (i.e. ~/.bashrc).
                rY   rZ   )ÚuserpathÚin_current_pathrQ   rO   rP   r   r   )r5   r"   r"   r#   r²   ˜  s   ÿÿøÿÿr²   rJ   c                 C   s   t | ƒ}|j› |› |j› �S )zAdd suffix to app.)r   Ústemr4   )rJ   r4   rV   r"   r"   r#   rK   ¨  s   rK   )r2   r    )Nr2   )>Úloggingr—   rR   r³   r¤   r£   Úpathlibr   r   r   Útypingr   r   r   r   r	   r»   Úpackaging.utilsr
   Úpipxr   Úpipx.colorsr   r   Úpipx.constantsr   Úpipx.emojisr   r   Úpipx.package_specifierr   r   Úpipx.pipx_metadata_filer   Ú	pipx.utilr   r   r   r   r   Ú	pipx.venvr   Ú	getLoggerr.   rO   r   r1   rQ   r<   r=   Ú__annotations__r9   r:   r;   rs   r�   r€   r‡   rª   rº   r²   rK   r"   r"   r"   r#   Ú<module>   s  
 
ÿÿÿÿÿ
þ	ÿÿÿÿ
þÿÿÿÿÿ
þ;ÿÿÿ

þ'ûÿýüû

ú8ýÿþ
ý
ü'øÿþýüûúùø	
÷ ÿÿÿÿ
þÿþýüûù
øC