o
    i{                     @  s  d dl mZ 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
 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mZ d dl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& e'e(Z)G dd deZ*dS )    )annotationsN)Iterable)Values)AnyCallable)Version)
cmdoptions)IndexGroupCommand)ERRORSUCCESS)get_installed_distributionprint_dist_installation_info)CommandErrorDistributionNotFoundPipError)LinkCollector)PackageFinder)SelectionPreferences)TargetPython)
PipSession)write_outputc                   @  sP   e Zd ZdZdZdZdddZd d	d
Zd!ddZ		d"d#ddZ	d$ddZ
dS )%IndexCommandz=
    Inspect information available from package indexes.
    Tz&
        %prog versions <package>
    returnNonec                 C  s   t | j | jt   | jt   | jt   | jt   | jt   t 	t j
| j}| jd| | jd| j d S )Nr   )r   Zadd_target_python_optionsZcmd_optsZ
add_optionignore_requires_pythonprejsonZ	no_binaryZonly_binaryZmake_option_groupZindex_groupparserZinsert_option_group)selfZ
index_opts r   <lib/python3.10/site-packages/pip/_internal/commands/index.pyadd_options'   s   zIndexCommand.add_options.dict[str, Callable[[Values, list[str]], None]]c                 C  s
   d| j iS )Nversions)get_available_package_versions)r   r   r   r    handler_map8   s   zIndexCommand.handler_mapoptionsr   args	list[str]intc              
   C  s   |   }|r|d |vrtddt| tS |d }z|| ||dd   W tS  tyG } zt|jd  tW  Y d }~S d }~ww )Nr   zNeed an action (%s) to perform.,    )	r%   loggererrorjoinsortedr
   r   r'   r   )r   r&   r'   r%   actioner   r   r    run=   s    zIndexCommand.runNsessionr   target_pythonTargetPython | Noner   bool | Noner   c                 C  s.   t j||d}td|j|d}tj|||dS )zK
        Create a package finder appropriate to the index command.
        )r&   F)Zallow_yankedZallow_all_prereleasesr   )link_collectorselection_prefsr4   )r   Zcreater   r   r   )r   r&   r3   r4   r   r7   r8   r   r   r    _build_package_finderS   s   
z"IndexCommand._build_package_finder	list[Any]c                 C  s<  t |dkr
tdt|}|d }| |B}| j||||jd}dd ||D }|js7dd |D }t	|}|sDt
d| d	d
 t|ddD }|d }	W d    n1 s]w   Y  t|}
|jr|||	d}|
d urzt|
j|d< tt| d S t| d|	 d tdd| t|	|
 d S )Nr+   z(You need to specify exactly one argumentr   )r&   r3   r4   r   c                 s  s    | ]}|j V  qd S N)version).0	candidater   r   r    	<genexpr>{   s    
z>IndexCommand.get_available_package_versions.<locals>.<genexpr>c                 s  s    | ]}|j s|V  qd S r;   )Zis_prerelease)r=   r<   r   r   r    r?      s    
z#No matching distribution found for c                 S  s   g | ]}t |qS r   )str)r=   Zverr   r   r    
<listcomp>   s    z?IndexCommand.get_available_package_versions.<locals>.<listcomp>T)reverse)namer#   latestZinstalled_versionz ()zAvailable versions: {}r*   )lenr   r   Zmake_target_pythonZ_build_sessionr9   r   Zfind_all_candidatesr   setr   r/   r   r   r@   r<   r   dumpsformatr.   r   )r   r&   r'   r4   queryr3   finderr#   Zformatted_versionsrD   ZdistZstructured_outputr   r   r    r$   l   sL   

z+IndexCommand.get_available_package_versions)r   r   )r   r"   )r&   r   r'   r(   r   r)   )NN)
r&   r   r3   r   r4   r5   r   r6   r   r   )r&   r   r'   r:   r   r   )__name__
__module____qualname____doc__Zignore_require_venvusager!   r%   r2   r9   r$   r   r   r   r    r      s    


r   )+Z
__future__r   r   ZloggingZcollections.abcr   Zoptparser   typingr   r   Zpip._vendor.packaging.versionr   Zpip._internal.clir   Zpip._internal.cli.req_commandr	   Zpip._internal.cli.status_codesr
   r   Zpip._internal.commands.searchr   r   Zpip._internal.exceptionsr   r   r   Zpip._internal.index.collectorr   Z"pip._internal.index.package_finderr   Z$pip._internal.models.selection_prefsr   Z"pip._internal.models.target_pythonr   Zpip._internal.network.sessionr   Zpip._internal.utils.miscr   Z	getLoggerrL   r,   r   r   r   r   r    <module>   s(    
