B
    `dG                 @   s   d dl mZ d dlZd dlZd dl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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eZ$dd Z%dddZ&dd Z'dS )    )absolute_importN)OrderedDict)pkg_resources)parse)xmlrpc_client)Command)SessionCommandMixin)NO_MATCHES_FOUNDSUCCESS)CommandError)PyPI)PipXmlrpcTransport)get_terminal_size)
indent_log)write_outputc                   s8   e 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>.z
      %prog [options] <query>Tc                s@   t t| j|| | jjddddtjdd | 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__ A/tmp/pip-unpacked-wheel-hu9qqap1/pip/_internal/commands/search.pyr   %   s    zSearchCommand.__init__c             C   sT   |st d|}| ||}t|}d }tj r<t d }t||d |rPtS t	S )Nz)Missing required argument (search query).r   )terminal_width)
r   searchtransform_hitssysstdoutisattyr   print_resultsr
   r	   )r   optionsr    queryZ	pypi_hitshitsr%   r#   r#   r$   run0   s    

zSearchCommand.runc             C   s<   |j }| |}t||}t||}|||dd}|S )N)namesummaryor)r   get_default_sessionr   r   ServerProxyr&   )r   r-   r,   	index_urlsession	transportpypir.   r#   r#   r$   r&   @   s    

zSearchCommand.search)
__name__
__module____qualname____doc__usageignore_require_venvr   r/   r&   __classcell__r#   r#   )r"   r$   r      s   r   c             C   s   t  }xv| D ]n}|d }|d }|d }|| krH|||gd||< q|| d | |t|| d kr||| d< qW t| 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.
    r0   r1   version)r0   r1   versionsrA   )r   keysappendhighest_versionlistvalues)r.   packageshitr0   r1   r@   r#   r#   r$   r'   K   s    
r'   c          
   C   sb  | sd S |d kr&t dd | D d }dd tjD }x$| D ]}|d }|d pVd}t|dd	g}|d k	r|| d
 }|dkrt||}dd|d   |}djf ddjf t	 it	 }	yzt
|	 ||kr@t|}
t N |
j|krt
d|
j n.t
d|
j t|jr,t
d| n
t
d| W d Q R X W q> tk
rX   Y q>X q>W d S )Nc          	   S   s.   g | ]&}t |d  t t|ddg qS )r0   rA   -)lenrD   get).0rH   r#   r#   r$   
<listcomp>l   s   z!print_results.<locals>.<listcomp>   c             S   s   g | ]
}|j qS r#   )project_name)rL   pr#   r#   r$   rM   p   s    r0   r1    rA   rI      
   
    z-{name_latest:{name_column_width}} - {summary}Zname_latestz{name} ({latest})zINSTALLED: %s (latest)zINSTALLED: %sz=LATEST:    %s (pre-release; install with "pip install --pre")zLATEST:    %s)maxr   working_setrD   rK   textwrapwrapjoinformatlocalsr   get_distributionr   r@   parse_versionpreUnicodeEncodeError)r.   Zname_column_widthr%   Zinstalled_packagesrH   r0   r1   ZlatestZtarget_widthlinedistr#   r#   r$   r+   g   sD    


r+   c             C   s   t | tdS )N)key)rW   r_   )rA   r#   r#   r$   rD      s    rD   )NN)(
__future__r   loggingr(   rY   collectionsr   pip._vendorr   pip._vendor.packaging.versionr   r_   pip._vendor.six.movesr   pip._internal.cli.base_commandr   pip._internal.cli.req_commandr   pip._internal.cli.status_codesr	   r
   pip._internal.exceptionsr   pip._internal.models.indexr   Zpip._internal.network.xmlrpcr   pip._internal.utils.compatr   pip._internal.utils.loggingr   pip._internal.utils.miscr   	getLoggerr9   loggerr   r'   r+   rD   r#   r#   r#   r$   <module>   s*   
-
*