3
ûâdeš  ã               @   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 j%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ƒ | jjt jƒ ƒ | jjt jƒ ƒ | jjt jƒ ƒ | jjt jƒ ƒ t jt j	| j
ƒ}| j
jd|ƒ | j
jd| jƒ d S )Nr   )r
   Z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-build-red6nood/pip/pip/_internal/commands/index.pyÚadd_options   s    zIndexCommand.add_options)ÚoptionsÚargsr   c             C   s˜   d| j i}tjdƒ | s&|d |kr@tjddjt|ƒƒƒ tS |d }y|| ||dd … ƒ W n0 tk
r’ } ztj|jd ƒ tS d }~X 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.z, é   )
Úget_available_package_versionsÚloggerÚ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_yankedÚallow_all_prereleasesr   )Úlink_collectorÚselection_prefsr8   )r   Úcreater   r   r   )r$   r)   r7   r8   r   r:   r;   r&   r&   r'   Ú_build_package_finderM   s    
z"IndexCommand._build_package_finderc       
      C   sâ   t |ƒdkrtdƒ‚tj|ƒ}|d }| j|ƒ�z}| j||||jd�}dd„ |j|ƒD ƒ}|jsndd„ |D ƒ}t	|ƒ}|sˆt
dj|ƒƒ‚d	d
„ t|dd�D ƒ}|d }	W d Q R X tdj||	ƒƒ tdjdj|ƒƒƒ 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 )N)Úis_prerelease)r?   r>   r&   r&   r'   rA   |   s    z%No matching distribution found for {}c             S   s   g | ]}t |ƒ‘qS r&   )Ústr)r?   Úverr&   r&   r'   ú
<listcomp>…   s    z?IndexCommand.get_available_package_versions.<locals>.<listcomp>T)Úreversez{} ({})zAvailable versions: {}z, )Úlenr   r
   Zmake_target_pythonÚ_build_sessionr=   r   Úfind_all_candidatesr   Úsetr   Úformatr2   r   r1   r   )
r$   r)   r*   r8   Úqueryr7   Úfinderr+   Zformatted_versionsÚlatestr&   r&   r'   r-   f   s,    

z+IndexCommand.get_available_package_versions)NN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úusager(   r   r   rC   Úintr6   r   r   r   Úboolr   r=   r   r-   r&   r&   r&   r'   r      s   " r   ))ÚloggingÚ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   Ú	getLoggerrO   r.   r   r&   r&   r&   r'   Ú<module>   s    
