U
    7c                     @   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-xvghy_sv/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   r0   r'   __classcell__r$   r$   r"   r%   r      s   r   c                 C   s   t  }| D ]n}|d }|d }|d }|| krF|||gd||< q
|| d | |t|| d kr
||| d< q
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.
    r1   r2   version)r1   r2   versionsrB   )r   keysappendhighest_versionlistvalues)r/   packageshitr1   r2   rA   r$   r$   r%   r(   K   s    r(   c              
   C   sP  | sd S |d kr&t dd | D d }dd tjD }| D ]}|d }|d pRd}t|dd	g}|d k	r|| d
 }|dkrt||}dd|d   |}d|d||f |f }	zxt|	 ||kr0t	|}
t
 L |
j|krtd|
j n.td|
j t|jrtd| n
td| W 5 Q R X W q: tk
rH   Y q:X q:d S )Nc              	   S   s.   g | ]&}t |d  t t|ddg qS )r1   rB   -)lenrE   get).0rI   r$   r$   r%   
<listcomp>k   s   z!print_results.<locals>.<listcomp>   c                 S   s   g | ]
}|j qS r$   )project_name)rM   pr$   r$   r%   rN   p   s     r1   r2    rB   rJ      
   
    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_setrE   rL   textwrapwrapjoinr   get_distributionr   rA   parse_versionpreUnicodeEncodeError)r/   Zname_column_widthr&   Zinstalled_packagesrI   r1   r2   ZlatestZtarget_widthlinedistr$   r$   r%   r,   g   sJ    

 


r,   c                 C   s   t | tdS )N)key)rX   r^   )rB   r$   r$   r%   rE      s    rE   )NN)(
__future__r   loggingr)   rZ   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   	getLoggerr:   loggerr   r(   r,   rE   r$   r$   r$   r%   <module>   s*   
-
)