
}_                 @   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 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)OrderedDict)PipXmlrpcTransport)PyPI)get_terminal_size)
indent_log)CommandError)NO_MATCHES_FOUND)parse)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                sa   t  t |   j | |   |  j j d d d d d d d t j d d	 |  j j d
 |  j  d  S)Nz-iz--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-3_sjtvrs/pip/pip/commands/search.pyr      s    			zSearchCommand.__init__c             C   sv   | s t  d   | } |  j | |  } t |  } d  } t j j   rX t   d } t | d | | rr 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   si   | j  } |  j |  J } t | |  } t j | |  } | j d | d | i d  } | SWd  QRXd  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__r/   usager0   r   r.   r   r"   r"   )r!   r#   r      s   r   c             C   s   t    } x |  D] } | d } | d } | d } | | j   k rh d | d | d | g i | | <q | | d j |  | t | | d  k r | | | d <q Wt | 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.
    r/   r0   versionversions)r   keysappendhighest_versionlistvalues)r-   packageshitr/   r0   r=   r"   r"   r#   r%   B   s    	


r%   c             C   s  |  s
 d  S| d  k r3 t  d d   |  D  d } d d   t j D } x[|  D]S} | d } | d pm d } | j d d	 g  d } | d  k	 r | | d } | d k r t j | |  } d d | d j |  } d | d | | f | f }	 y t j |	  | | k rt j	 |  }
 t
   ] t | d  } |
 j | k rct j d |
 j  n# t j d |
 j  t j d |  Wd  QRXWqP t k
 rYqP XqP Wd  S)Nc             S   s=   g  |  ]3 } t  | d   t  | j d d g  d   q S)r/   r>   -   )lenget).0rE   r"   r"   r#   
<listcomp>c   s   	z!print_results.<locals>.<listcomp>   c             S   s   g  |  ] } | j   q Sr"   )project_name)rK   pr"   r"   r#   rL   g   s   	 r/   r0    r>   rF   rG      
   
    z	%-*s - %sz%s (%s)zINSTALLED: %s (latest)zINSTALLED: %szLATEST:    %srH   )maxr   working_setrJ   textwrapwrapjoinloggerinfoget_distributionr	   rA   r=   UnicodeEncodeError)r-   name_column_widthr$   installed_packagesrE   r/   r0   r=   target_widthlinedistlatestr"   r"   r#   r)   ^   s>    	


r)   c             C   s   t  |  d t S)Nkey)rV   parse_version)r>   r"   r"   r#   rA      s    rA   )$
__future__r   loggingr&   rX   pip.basecommandr   r   
pip.compatr   pip.downloadr   
pip.modelsr   	pip.utilsr   pip.utils.loggingr	   pip.exceptionsr
   pip.status_codesr   Zpip._vendor.packaging.versionr   rf   pip._vendorr   Zpip._vendor.six.movesr   	getLoggerr8   r[   r   r%   r)   rA   r"   r"   r"   r#   <module>   s&   +&