U
    KQh                     @   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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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-tlro1kwj/pip/pip/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
   r   transform_hitssysstdoutisattyr   print_resultsr   r   )r   optionsr   query	pypi_hitshitsr%   r#   r#   r$   run)   s    

zSearchCommand.runc              
   C   sT   |j }| |:}t||}t||}|||dd}|W  5 Q R  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__r0   usager1   r   r/   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.
    r0   r1   version)r0   r1   versionsr@   )r   keysappendhighest_versionlistvalues)r.   packageshitr0   r1   r?   r#   r#   r$   r&   B   s    r&   c              
   C   sN  | sd S |d kr&t dd | D d }dd tjD }| D ]}|d }|d pRd}|dd	gd
 }|d k	r|| d }|dkrt||}dd|d   |}d|d||f |f }	zvt|	 ||kr.t	|}
t
 H t|d }|
j|kr
td|
j ntd|
j td| W 5 Q R X W q: tk
rF   Y q:X q:d S )Nc                 S   s.   g | ]&}t |d  t |ddgd  qS )r0   r@   -)lenget).0rG   r#   r#   r$   
<listcomp>b   s   z!print_results.<locals>.<listcomp>   c                 S   s   g | ]
}|j qS r#   )project_name)rL   pr#   r#   r$   rM   g   s     r0   r1    r@   rH   rI      
   
    z	%-*s - %sz%s (%s)zINSTALLED: %s (latest)zINSTALLED: %szLATEST:    %s)maxr   working_setrK   textwrapwrapjoinloggerinfoget_distributionr	   rC   r?   UnicodeEncodeError)r.   name_column_widthr%   installed_packagesrG   r0   r1   r?   target_widthlinedistlatestr#   r#   r$   r*   ^   sD    

 


r*   c                 C   s   t | tdS )N)key)rW   parse_version)r@   r#   r#   r$   rC      s    rC   )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   	getLoggerr9   r\   r   r&   r*   rC   r#   r#   r#   r$   <module>   s&   
+
&