
^V                 @   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 e j e  Z Gd d   d e  Z d d   Z d d d d  Z d d   Z d S)    )absolute_importN)CommandSUCCESS)PipXmlrpcTransport)PyPI)get_terminal_size)
indent_log)CommandError)NO_MATCHES_FOUND)pkg_resources)xmlrpc_clientc                   sR   e  Z d  Z d Z d Z d Z d Z   f d d   Z d d   Z d	 d
   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 d d t j d d |  j j d	 |  j  d  S)
Nz--indexdestindexmetavarURLdefaulthelpz3Base URL of Python Package Index (default %default)r   )	superr   __init__cmd_opts
add_optionr   pypi_urlparserinsert_option_group)selfargskw)	__class__ 2/tmp/pip-build-9m6vxulb/pip/pip/commands/search.pyr      s    		zSearchCommand.__init__c             C   s|   | s t  d   n  | } |  j | |  } t |  } d  } t j j   r^ t   d } n  t | d | | rx t St	 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   sj   | j  } |  j |  L } t | |  } t j | |  } | j i | d 6| d 6d  } | SWd  QXd  S)Nnamesummaryor)r   _build_sessionr   r   ServerProxyr   )r   r)   r(   	index_urlsession	transportpypir+   r    r    r!   r   7   s    	 zSearchCommand.search)
__name__
__module____qualname____doc__r-   usager.   r   r,   r   r    r    )r   r!   r      s   r   c             C   s  i  } x |  D] } | d } | d } | d } | d } | d k rP d } n  | | j    k r i | d 6| d 6| g d 6| d 6| | <q | | d j |  | t | | d  k r | | | d <| | | d <q q Wt | j   d	 d
 d   d d } | 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-   r.   version_pypi_orderingNr   versionsscorekeyc             S   s   |  d S)Nr>   r    )xr    r    r!   <lambda>b   s    z transform_hits.<locals>.<lambda>reverseT)keysappendhighest_versionsortedvalues)r+   packageshitr-   r.   r;   r>   package_listr    r    r!   r#   @   s.    



	
	r#   c             C   s  |  s
 d  S| d  k r6 t  d d   |  D  d } n  d d   t j D } xN|  D]F} | d } | d pp d } | j d d	 g  d } | d  k	 r t j | | | d  } d d | d j |  } n  d | d | | f | f } y t j |  | | k rt j	 |  }	 t
   ] t | d  }
 |	 j |
 k rWt j d |	 j  n# t j d |	 j  t j d |
  Wd  QXn  WqS t k
 rYqS XqS Wd  S)Nc             S   s=   g  |  ]3 } t  | d   t  | j d d g  d   q S)r-   r=   -   )lenget).0rI   r    r    r!   
<listcomp>m   s   	z!print_results.<locals>.<listcomp>   c             S   s   g  |  ] } | j   q Sr    )project_name)rP   pr    r    r!   rQ   q   s   	 r-   r.    r=   rK   rL      
    z	%-*s - %sz%s (%s)zINSTALLED: %s (latest)zINSTALLED: %szLATEST:    %srM   )maxr   working_setrO   textwrapwrapjoinloggerinfoget_distributionr   rE   r;   UnicodeEncodeError)r+   name_column_widthr"   installed_packagesrI   r-   r.   r;   linedistlatestr    r    r!   r'   h   s>    	



r'   c             C   s%   t  t t |  d t j d d   S)Nr?   rB   T)nextiterrF   r   parse_version)r=   r    r    r!   rE      s    rE   )
__future__r   loggingr$   r\   pip.basecommandr   r   pip.downloadr   
pip.modelsr   	pip.utilsr   pip.utils.loggingr   pip.exceptionsr	   pip.status_codesr
   pip._vendorr   pip._vendor.six.movesr   	getLoggerr6   r_   r   r#   r'   rE   r    r    r    r!   <module>   s"   +('