o
    [h                     @   s   d dl Z 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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)get_installed_distributionprint_dist_installation_info)CommandErrorDistributionNotFoundPipError)LinkCollector)PackageFinder)SelectionPreferences)TargetPython)
PipSession)write_outputc                   @   s   e Zd ZdZdZdZdddZded	ee	 de
fd
dZ		ddededee dee def
ddZded	ee ddfddZdS )IndexCommandz=
    Inspect information available from package indexes.
    Tz&
        %prog versions <package>
    returnNc                 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   add_target_python_optionscmd_opts
add_optionignore_requires_pythonprejson	no_binaryonly_binarymake_option_groupindex_groupparserinsert_option_group)self
index_opts r'   /home/ubuntu/experiments/live_experiments/Pythonexperiments/Otree/venv/lib/python3.10/site-packages/pip/_internal/commands/index.pyadd_options$   s   zIndexCommand.add_optionsoptionsargsc              
   C   s   d| j i}|r|d |vrtddt| tS |d }z|| ||dd   W tS  tyH } zt|jd  tW  Y d }~S d }~ww )Nversionsr   zNeed an action (%s) to perform.,    )	get_available_package_versionsloggererrorjoinsortedr
   r   r+   r   )r%   r*   r+   handlersactioner'   r'   r(   run5   s"   zIndexCommand.runsessiontarget_pythonr   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_prefsr9   )r   creater   r   r   )r%   r*   r8   r9   r   r<   r=   r'   r'   r(   _build_package_finderM   s   
z"IndexCommand._build_package_finderc                 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*   r8   r9   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 r@   )is_prerelease)rB   rA   r'   r'   r(   rD   {   s    
z#No matching distribution found for c                 S   s   g | ]}t |qS r'   )str)rB   verr'   r'   r(   
<listcomp>   s    z?IndexCommand.get_available_package_versions.<locals>.<listcomp>T)reverse)namer,   latestinstalled_versionz ()zAvailable versions: {}r-   )lenr   r   make_target_python_build_sessionr?   r   find_all_candidatesr   setr   r3   r   r   rF   rA   r   dumpsformatr2   r   )r%   r*   r+   r9   queryr8   finderr,   Zformatted_versionsrK   distZstructured_outputr'   r'   r(   r/   f   sL   

z+IndexCommand.get_available_package_versions)r   N)NN)__name__
__module____qualname____doc__ignore_require_venvusager)   r   r   rF   intr7   r   r   r   boolr   r?   r   r/   r'   r'   r'   r(   r      s(    

r   ))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   r   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   	getLoggerrX   r0   r   r'   r'   r'   r(   <module>   s$    
