U
    „~$h{  ã                   @   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%   ú@/tmp/pip-unpacked-wheel-g27rp152/pip/_internal/commands/index.pyÚadd_options    s    þzIndexCommand.add_options)ÚoptionsÚargsr   c              
   C   s    d| j i}t d¡ |r$|d |kr>t dd t|ƒ¡¡ tS |d }z|| ||dd … ƒ W n: tk
rš } zt |jd ¡ t W Y ¢S d }~X Y nX 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 }|  |¡�z}| j||||jd�}dd„ | |¡D ƒ}|jsndd„ |D ƒ}t	|ƒ}|sˆt
d|› �ƒ‚d	d
„ t|dd�D ƒ}|d }	W 5 Q R X 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>†   s     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   Z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   Ú	getLoggerrR   r.   r   r%   r%   r%   r&   Ú<module>   s    
