o
    h3                  	   @   s^  d dl Z d dlZd dlmZ d dlmZ d dlmZmZm	Z	m
Z
mZmZ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m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"m#Z# erd dl$m%Z% d dl&m'Z' G dd deZ(ee( Z)e*e+Z,G dd deZ-dddedee	e	e.  e	e. f fddZ/dddede.fddZ0dS )    N)Parser)Values)TYPE_CHECKING	GeneratorListOptionalSequenceTuplecastcanonicalize_name)Version)
cmdoptions)IndexGroupCommand)SUCCESS)CommandError)BaseDistributionget_environment)SelectionPreferences)stdlib_pkgs)tabulatewrite_outputPackageFinder)
PipSessionc                   @   s"   e Zd ZU dZeed< eed< dS )_DistWithLatestInfozGive the distribution object a couple of extra fields.

        These will be populated during ``get_outdated()``. This is dirty but
        makes the rest of the code much cleaner.
        latest_versionlatest_filetypeN)__name__
__module____qualname____doc__r   __annotations__str r$   r$   N/var/www/html/venv/lib/python3.10/site-packages/pip/_internal/commands/list.pyr      s   
 r   c                       s   e Zd ZdZdZdZd$ddZdeddf fd	d
ZdeddddfddZ	dede
e defddZdddeddfddZdddeddfddZdddeddfddZdddeded fddZdddeddfddZd e
e
e  d!e
e ddfd"d#Z  ZS )%ListCommandzt
    List installed packages, including editables.

    Packages are listed in a case-insensitive sorted order.
    Tz
      %prog [options]returnNc                 C   s*  | j jdddddd | j jddddd	d | j jd
ddddd | j jdddddd | j jdddddd | j t  | j jddddd | j jddddddd | j jddddd  | j jd!d"d#d$d  | j jd%dd#d&d'd( | j t  ttj| j}| jd)| | jd)| j  d S )*Nz-oz
--outdated
store_trueFzList outdated packages)actiondefaulthelpz-uz
--uptodatezList uptodate packagesz-ez
--editablezList editable projects.z-lz--localzSIf in a virtualenv that has global access, do not list globally-installed packages.z--useruserz,Only output packages installed in user-site.)destr)   r*   r+   z--prezYInclude pre-release and development versions. By default, pip only finds stable versions.z--formatstorelist_formatcolumns)r0   freezejsonzSelect the output format among: columns (default), freeze, or json. The 'freeze' format cannot be used with the --outdated option.)r)   r-   r*   choicesr+   z--not-requirednot_requiredz>List packages that are not dependencies of installed packages.)r)   r-   r+   z--exclude-editablestore_falseinclude_editablez%Exclude editable package from output.z--include-editablez#Include editable package in output.T)r)   r-   r+   r*   r   )	cmd_opts
add_optionr   	list_pathlist_excludemake_option_groupindex_groupparserinsert_option_group)self
index_optsr$   r$   r%   add_options2   s   

zListCommand.add_optionsoptionsc                    s    |j s|jrt | d S d S N)outdateduptodatesuperhandle_pip_version_check)r?   rB   	__class__r$   r%   rG      s   z$ListCommand.handle_pip_version_checksessionr   r   c                 C   sB   ddl m} ddlm} |j||d}td|jd}|j||dS )zK
        Create a package finder appropriate to this list command.
        r   )LinkCollectorr   )rB   F)allow_yankedallow_all_prereleases)link_collectorselection_prefs)pip._internal.index.collectorrK   "pip._internal.index.package_finderr   creater   pre)r?   rB   rJ   rK   r   rN   rO   r$   r$   r%   _build_package_finder   s   z!ListCommand._build_package_finderargsc                 C   s   |j r
|jr
td|j r|jdkrtdt| tt}|jr-|	dd |jD  dd t
|jj|j|j|j|j|dD }|jrL| ||}|j rV| ||}n	|jr_| ||}| || tS )	Nz5Options --outdated and --uptodate cannot be combined.r1   z?List format 'freeze' cannot be used with the --outdated option.c                 s   s    | ]}t |V  qd S rC   r   ).0nr$   r$   r%   	<genexpr>       z"ListCommand.run.<locals>.<genexpr>c                 S   s   g | ]}t d |qS )r   )r
   )rV   dr$   r$   r%   
<listcomp>   s    z#ListCommand.run.<locals>.<listcomp>)
local_only	user_onlyeditables_onlyinclude_editablesskip)rD   rE   r   r/   r   check_list_path_optionsetr   excludesupdater   pathiter_installed_distributionslocalr,   editabler6   r4   get_not_requiredget_outdatedget_uptodateoutput_package_listingr   )r?   rB   rU   r`   packagesr$   r$   r%   run   s6   

zListCommand.runrm   _ProcessedDistsc                 C      dd |  ||D S )Nc                 S   s   g | ]
}|j |jkr|qS r$   r   versionrV   distr$   r$   r%   r[      
    z,ListCommand.get_outdated.<locals>.<listcomp>iter_packages_latest_infosr?   rm   rB   r$   r$   r%   rj         
zListCommand.get_outdatedc                 C   rp   )Nc                 S   s   g | ]
}|j |jkr|qS r$   rq   rs   r$   r$   r%   r[      ru   z,ListCommand.get_uptodate.<locals>.<listcomp>rv   rx   r$   r$   r%   rk      ry   zListCommand.get_uptodatec                    s$   dd |D  t  fdd|D S )Nc                 S   s(   h | ]}|  p	d D ]}t|jq
qS )r$   )iter_dependenciesr   name)rV   rt   depr$   r$   r%   	<setcomp>   s    
z/ListCommand.get_not_required.<locals>.<setcomp>c                    s   h | ]	}|j  vr|qS r$   canonical_name)rV   pkgZdep_keysr$   r%   r}      s    )listrx   r$   r   r%   ri      s   	zListCommand.get_not_required)r   NNc                 #   sx    |  ,}| | dddtd f fdd}t||D ]	}|d ur)|V  q W d    d S 1 s5w   Y  d S )Nrt   r   r'   c                    sl     | j}jsdd |D } j| jd}||}|d u r"d S |j}|jjr,d}nd}|| _|| _	| S )Nc                 S   s   g | ]}|j js|qS r$   )rr   is_prerelease)rV   	candidater$   r$   r%   r[      s    zOListCommand.iter_packages_latest_infos.<locals>.latest_info.<locals>.<listcomp>)project_namewheelsdist)
find_all_candidatesr   rS   make_candidate_evaluatorsort_best_candidaterr   linkis_wheelr   r   )rt   Zall_candidatesZ	evaluatorbest_candidateremote_versiontypfinderrB   r$   r%   latest_info   s$   
z;ListCommand.iter_packages_latest_infos.<locals>.latest_info)_build_sessionrT   r   map)r?   rm   rB   rJ   r   rt   r$   r   r%   rw      s   "z&ListCommand.iter_packages_latest_infosc                 C   s   t |dd d}|jdkr|rt||\}}| || d S |jdkrB|D ]}|jdkr7td|j|j|j q%td|j|j q%d S |jd	krPtt	|| d S d S )
Nc                 S   s   | j S rC   r~   )rt   r$   r$   r%   <lambda>  s    z4ListCommand.output_package_listing.<locals>.<lambda>)keyr0   r1      z%s==%s (%s)z%s==%sr2   )
sortedr/   format_for_columnsoutput_package_listing_columnsverboser   raw_namerr   locationformat_for_json)r?   rm   rB   dataheaderrt   r$   r$   r%   rl     s$   


z"ListCommand.output_package_listingr   r   c                 C   sb   t |dkr|d| t|\}}t |dkr&|dddd |D  |D ]}t| q(d S )Nr   r    c                 s   s    | ]}d | V  qdS )-Nr$   rV   xr$   r$   r%   rX   4  rY   z=ListCommand.output_package_listing_columns.<locals>.<genexpr>)leninsertr   joinr   )r?   r   r   Zpkg_stringssizesvalr$   r$   r%   r   )  s   
z*ListCommand.output_package_listing_columns)r'   N)r   r   r    r!   ignore_require_venvusagerA   r   rG   rT   r   r#   intrn   rj   rk   ri   r   rw   rl   r   __classcell__r$   r$   rH   r%   r&   '   sp    
X
)
	
	

&

r&   pkgsro   rB   r'   c                    sT  ddg}|j }|r|ddg dtdtt fdd  fd	d
| D }t|}|r/|d |jdkr9|d |jdkrC|d tdd | D }|rS|d g }t| D ]L\}}	|	j	|	j
g}
|rs|
t|	j |
|	j |r~|
|| p|d |r|
|	jpd |jdkr|
|	jpd |jdkr|
|	j ||
 qY||fS )z_
    Convert the package data into something usable
    by output_package_listing_columns.
    Packager   ZLatestTypert   r'   c                 S   s6   z|  d}W n
 ty   Y d S w t |dS )NWHEELBuild)	read_textFileNotFoundErrorr   parsestrget)rt   
wheel_filer$   r$   r%   wheel_build_tagG  s   z+format_for_columns.<locals>.wheel_build_tagc                    s   g | ]} |qS r$   r$   )rV   pr   r$   r%   r[   N  s    z&format_for_columns.<locals>.<listcomp>r   r   ZLocationZ	Installerc                 s   s    | ]}|j V  qd S rC   )rh   r   r$   r$   r%   rX   X  s    z%format_for_columns.<locals>.<genexpr>zEditable project location )rD   extendr   r   r#   anyappendr   	enumerater   Zraw_versionr   r   editable_project_locationr   	installer)r   rB   r   Zrunning_outdatedZ
build_tagsZhas_build_tagsZhas_editablesr   iZprojrowr$   r   r%   r   :  s@   







r   rm   c                 C   s   g }| D ]9}|j t|jd}|jdkr |jpd|d< |j|d< |jr/t|j|d< |j|d< |j	}|r8||d< |
| qt|S )	N)r{   rr   r   r   r   r   r   r   r   )r   r#   rr   r   r   r   rD   r   r   r   r   r2   dumps)rm   rB   r   rt   infor   r$   r$   r%   r   v  s    



r   )1r2   loggingemail.parserr   optparser   typingr   r   r   r   r   r	   r
   Zpip._vendor.packaging.utilsr   Zpip._vendor.packaging.versionr   pip._internal.clir   Zpip._internal.cli.index_commandr   pip._internal.cli.status_codesr   pip._internal.exceptionsr   pip._internal.metadatar   r   $pip._internal.models.selection_prefsr   pip._internal.utils.compatr   pip._internal.utils.miscr   r   rQ   r   pip._internal.network.sessionr   r   ro   	getLoggerr   loggerr&   r#   r   r   r$   r$   r$   r%   <module>   s@    $

  
<