3
zYði–  ã               @   sä   d dl mZ d dlZd dlZd dlZd dl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 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d„ Z!ddd„Z"dd„ Z#dS )é    )Úabsolute_importN)ÚCommandÚSUCCESS)ÚOrderedDict)ÚPipXmlrpcTransport)ÚPyPI)Úget_terminal_size)Ú
indent_log)ÚCommandError)ÚNO_MATCHES_FOUND)Úparse)Úpkg_resources)Úxmlrpc_clientc                   s<   e Zd ZdZdZdZdZ‡ fdd„Zdd„ Zd	d
„ Z	‡  Z
S )ÚSearchCommandz@Search for PyPI packages whose name or summary contains <query>.Úsearchz
      %prog [options] <query>zSearch PyPI for packages.c                s@   t t| ƒj||Ž | jjddddtjdd� | jjd| jƒ d S )Nz-iz--indexÚindexÚURLz3Base URL of Python Package Index (default %default))ÚdestÚmetavarÚdefaultÚhelpr   )	Úsuperr   Ú__init__Úcmd_optsÚ
add_optionr   Úpypi_urlÚparserÚinsert_option_group)ÚselfÚargsÚkw)Ú	__class__© ú2/tmp/pip-build-ue6tjl93/pip/pip/commands/search.pyr      s    zSearchCommand.__init__c             C   sT   |st dƒ‚|}| j||ƒ}t|ƒ}d }tjjƒ r<tƒ d }t||d� |rPtS t	S )Nz)Missing required argument (search query).r   )Úterminal_width)
r
   r   Útransform_hitsÚsysÚstdoutÚisattyr   Úprint_resultsr   r   )r   Úoptionsr   ÚqueryÚ	pypi_hitsÚhitsr$   r"   r"   r#   Úrun)   s    

zSearchCommand.runc             C   sH   |j }| j|ƒ�.}t||ƒ}tj||ƒ}|j||dœdƒ}|S Q R X d S )N)ÚnameÚsummaryÚor)r   Ú_build_sessionr   r   ÚServerProxyr   )r   r+   r*   Ú	index_urlÚsessionÚ	transportÚpypir-   r"   r"   r#   r   9   s    
zSearchCommand.search)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r/   Úusager0   r   r.   r   Ú__classcell__r"   r"   )r!   r#   r      s   r   c             C   sŠ   t ƒ }xv| D ]n}|d }|d }|d }||jƒ krH|||gdœ||< q|| d j|ƒ |t|| d ƒkr||| d< qW t|jƒ ƒS )z¼
    The list from pypi is really a list of versions. We want a list of
    packages with the list of versions stored inline. This converts the
    list from pypi into one we can use.
    r/   r0   Úversion)r/   r0   Úversionsr?   )r   ÚkeysÚappendÚhighest_versionÚlistÚvalues)r-   ÚpackagesÚhitr/   r0   r>   r"   r"   r#   r%   B   s    
r%   c             C   sT  | sd S |d kr&t dd„ | D ƒƒd }dd„ tjD ƒ}�x| D �]}|d }|d pVd}|jdd	gƒd }|d k	r¨|| d }|dkr¨tj||ƒ}dd|d   j|ƒ}d|d||f |f }	yvtj|	ƒ ||k�r2tj	|ƒ}
t
ƒ �H t|d ƒ}|
j|k�rtjd|
jƒ ntjd|
jƒ tjd|ƒ W d Q R X W q> tk
�rJ   Y q>X q>W d S )Nc             S   s.   g | ]&}t |d  ƒt |jddgƒd ƒ ‘qS )r/   r?   ú-é   éÿÿÿÿ)ÚlenÚget)Ú.0rF   r"   r"   r#   ú
<listcomp>c   s   z!print_results.<locals>.<listcomp>é   c             S   s   g | ]
}|j ‘qS r"   )Úproject_name)rL   Úpr"   r"   r#   rM   g   s    r/   r0   Ú r?   rG   rH   é   é
   Ú
ú é   z	%-*s - %sz%s (%s)zINSTALLED: %s (latest)zINSTALLED: %szLATEST:    %srI   )Úmaxr   Úworking_setrK   ÚtextwrapÚwrapÚjoinÚloggerÚinfoÚget_distributionr	   rB   r>   ÚUnicodeEncodeError)r-   Úname_column_widthr$   Úinstalled_packagesrF   r/   r0   r>   Útarget_widthÚlineÚdistÚlatestr"   r"   r#   r)   ^   s>    


r)   c             C   s   t | td�S )N)Úkey)rW   Úparse_version)r?   r"   r"   r#   rB   „   s    rB   )NN)$Ú
__future__r   Úloggingr&   rY   Úpip.basecommandr   r   Ú
pip.compatr   Úpip.downloadr   Ú
pip.modelsr   Ú	pip.utilsr   Úpip.utils.loggingr	   Úpip.exceptionsr
   Úpip.status_codesr   Zpip._vendor.packaging.versionr   rg   Úpip._vendorr   Zpip._vendor.six.movesr   Ú	getLoggerr8   r\   r   r%   r)   rB   r"   r"   r"   r#   Ú<module>   s&   
+
&