3

g                 @   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j!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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-v59g9nu1/pip/_internal/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   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 }| j|}t||}tj||}|j||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 }||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.
    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   sV  | sd S |d kr&t dd | D d }dd tjD }x| D ]}|d }|d pVd}t|jdd	g}|d k	r|| d
 }|dkrtj||}dd|d   j|}d|d||f |f }	yxt|	 ||kr4tj	|}
t
 L |
j|krtd|
j n.td|
j t|jr td| n
td| W d Q R X W q> tk
rL   Y q>X q>W d S )Nc             S   s.   g | ]&}t |d  t t|j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	%-*s - %sz%s (%s)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joinr   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   sB    


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   Zpip._vendor.packaging.versionr   r]   Z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*   
-
)