a
    !6a                     @   s   d dl Z d dlmZ d dlmZmZmZmZ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 d dl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 )    N)Values)AnyIterableListOptionalUnion)LegacyVersionVersion)
cmdoptions)IndexGroupCommand)ERRORSUCCESS)print_dist_installation_info)CommandErrorDistributionNotFoundPipError)LinkCollector)PackageFinder)SelectionPreferences)TargetPython)
PipSession)write_outputc                   @   sn   e Zd ZdZdZddddZeee e	ddd	Z
deeee ee ed
ddZeee ddddZdS )IndexCommandz=
    Inspect information available from package indexes.
    z&
        %prog versions <package>
    N)returnc                 C   s~   t | j | 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preZ	no_binaryZonly_binaryZmake_option_groupZindex_groupparserZinsert_option_group)selfZ
index_opts r   ;lib/python3.9/site-packages/pip/_internal/commands/index.pyadd_options   s    zIndexCommand.add_options)optionsargsr   c              
   C   s   d| j i}td |r$|d |vr>tddt| tS |d }z|| ||dd   W n8 ty } z t|jd  tW  Y d }~S d }~0 0 t	S )Nversionsztpip index is currently an experimental command. It may be removed/changed in a future release without prior warning.r   zNeed an action (%s) to perform.,    )
get_available_package_versionsloggerZwarningerrorjoinsortedr   r   r"   r   )r   r!   r"   handlersactioner   r   r   run/   s$    zIndexCommand.run)r!   sessiontarget_pythonr   r   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_prefsr0   )r   Zcreater   r   r   )r   r!   r/   r0   r   r1   r2   r   r   r   _build_package_finderM   s    
z"IndexCommand._build_package_finderc           
      C   s   t |dkrtdt|}|d }| |}| j||||jd}dd ||D }|jsndd |D }t	|}|st
d|d	d
 t|ddD }|d }	W d    n1 s0    Y  td||	 tdd| t||	 d S )Nr%   z(You need to specify exactly one argumentr   )r!   r/   r0   r   c                 s   s   | ]}|j V  qd S N)version).0	candidater   r   r   	<genexpr>u   s   z>IndexCommand.get_available_package_versions.<locals>.<genexpr>c                 s   s   | ]}|j s|V  qd S r4   )Zis_prerelease)r6   r5   r   r   r   r8   |   s   z%No matching distribution found for {}c                 S   s   g | ]}t |qS r   )str)r6   Zverr   r   r   
<listcomp>       z?IndexCommand.get_available_package_versions.<locals>.<listcomp>T)reversez{} ({})zAvailable versions: {}r$   )lenr   r
   Zmake_target_pythonZ_build_sessionr3   r   Zfind_all_candidatesr   setr   formatr*   r   r)   r   )
r   r!   r"   r0   Zqueryr/   finderr#   Zformatted_versionsZlatestr   r   r   r&   f   s<    

&z+IndexCommand.get_available_package_versions)NN)__name__
__module____qualname____doc__Zusager    r   r   r   intr.   r   r   r   boolr   r3   r&   r   r   r   r   r      s   "  r   ))ZloggingZoptparser   typingr   r   r   r   r   Zpip._vendor.packaging.versionr   r	   Zpip._internal.clir
   Zpip._internal.cli.req_commandr   Zpip._internal.cli.status_codesr   r   Zpip._internal.commands.searchr   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	getLoggerrA   r'   r   r   r   r   r   <module>   s    
