3
LY                 @   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__ f/private/var/folders/7d/20zwc49s3kn54d3vgq8bd4640000gn/T/pip-build-an2lx5zf/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rt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   pip._vendor.six.movesr   	getLoggerr8   r\   r   r%   r)   rB   r"   r"   r"   r#   <module>   s&   
+
&