a
    0f{                     @   s   d dl Z d dlmZ d dl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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)Version)
cmdoptions)IndexGroupCommand)ERRORSUCCESS)print_dist_installation_info)CommandErrorDistributionNotFoundPipError)LinkCollector)PackageFinder)SelectionPreferences)TargetPython)
PipSession)write_outputc                   @   sr   e Zd 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.
    Tz&
        %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   add_target_python_optionscmd_opts
add_optionignore_requires_pythonpre	no_binaryonly_binarymake_option_groupindex_groupparserinsert_option_group)self
index_opts r%   U/var/www/ai-form-bot/venv/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loggerwarningerrorjoinsortedr
   r   r)   r   )r#   r(   r)   handlersactioner%   r%   r&   run0   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)allow_yankedallow_all_prereleasesr   )link_collectorselection_prefsr8   )r   creater   r   r   )r#   r(   r7   r8   r   r;   r<   r%   r%   r&   _build_package_finderN   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|	 d tdd| t||	 d S )Nr,   z(You need to specify exactly one argumentr   )r(   r7   r8   r   c                 s   s   | ]}|j V  qd S N)version).0	candidater%   r%   r&   	<genexpr>v   s   z>IndexCommand.get_available_package_versions.<locals>.<genexpr>c                 s   s   | ]}|j s|V  qd S r?   )is_prerelease)rA   r@   r%   r%   r&   rC   |   s   z#No matching distribution found for c                 S   s   g | ]}t |qS r%   )str)rA   verr%   r%   r&   
<listcomp>       z?IndexCommand.get_available_package_versions.<locals>.<listcomp>T)reversez ()zAvailable versions: {}r+   )lenr   r   make_target_python_build_sessionr>   r   find_all_candidatesr   setr   r2   r   formatr1   r   )
r#   r(   r)   r8   queryr7   finderr*   Zformatted_versionsZlatestr%   r%   r&   r-   g   s8    
&z+IndexCommand.get_available_package_versions)NN)__name__
__module____qualname____doc__ignore_require_venvusager'   r   r   rE   intr6   r   r   r   boolr   r>   r   r-   r%   r%   r%   r&   r      s   "  r   )'loggingoptparser   typingr   r   r   r   Zpip._vendor.packaging.versionr   pip._internal.clir   pip._internal.cli.req_commandr	   pip._internal.cli.status_codesr
   r   Zpip._internal.commands.searchr   pip._internal.exceptionsr   r   r   pip._internal.index.collectorr   "pip._internal.index.package_finderr   $pip._internal.models.selection_prefsr   "pip._internal.models.target_pythonr   pip._internal.network.sessionr   pip._internal.utils.miscr   	getLoggerrS   r.   r   r%   r%   r%   r&   <module>   s    
