
§|j–  ã               @   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-5c7ija6t/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&   +&