
 Xo                 @   s  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 m Z m Z d  d l m Z d  d l m Z d  d l Z d  d l m Z m Z Gd	 d
   d
 e  Z d d   Z d d d d  Z d d   Z d d   Z d S)    N)CommandSUCCESS)get_terminal_size)logger)	xmlrpclibreducecmp)CommandError)NO_MATCHES_FOUND)StrictVersionLooseVersionc                   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 d d d	 |  j j d
 |  j  d  S)Nz--indexdestindexmetavarURLdefaultzhttps://pypi.python.org/pypihelpz3Base URL of Python Package Index (default %default)r   )superr   __init__cmd_opts
add_optionparserinsert_option_group)selfargskw)	__class__ >/home/ubuntu/projects/ifolica/build/pip/pip/commands/search.pyr      s    	zSearchCommand.__init__c             C   s   | s t  d   n  | } | j } |  j | |  } t |  } d  } t j j   rg t   d } n  t | d | | r t	 St
 S)Nz)Missing required argument (search query).r   terminal_width)r	   r   r   transform_hitssysstdoutisattyr   print_resultsr   r
   )r   optionsr   query	index_url	pypi_hitshitsr!   r   r   r    run"   s    	zSearchCommand.runc             C   s3   t  j |  } | j i | d 6| d 6d  } | S)Nnamesummaryor)r   ServerProxyr   )r   r(   r)   pypir+   r   r   r    r   4   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>T   s    z transform_hits.<locals>.<lambda>reverseT)keysappendhighest_versionsortedvalues)r+   packageshitr-   r.   r7   r:   package_listr   r   r    r"   :   s     



	,$r"      c       
      C   sg  d d   t  j D } xJ|  D]B} | d } | d p: d } | d  k	 r t j | | | d  } d d | d	 j |  } n  d
 | j |  | f } y t j |  | | k rIt  j |  } t j	 d 7_	 z_ t
 | d  }	 | j |	 k rt j d | j  n% t j d | j  t j d |	  Wd  t j	 d 8_	 Xn  Wq t k
 r^Yq Xq Wd  S)Nc             S   s   g  |  ] } | j   q Sr   )project_name).0pr   r   r    
<listcomp>Y   s   	 z!print_results.<locals>.<listcomp>r-   r.       
    z%s - %s   r9   zINSTALLED: %s (latest)zINSTALLED: %szLATEST:    %s)pkg_resourcesworking_settextwrapwrapjoinljustr   notifyget_distributionindentrA   r7   UnicodeEncodeError)
r+   name_column_widthr!   installed_packagesrE   r-   r.   linedistlatestr   r   r    r&   X   s,    
r&   c             C   s   y t  t |   t |   SWn t k
 r1 Yn Xy t  t |   t |   SWnK t k
 r t  d d   t |   j D d d   t |  j D  SYn Xd  S)Nc             S   s   g  |  ] } t  |   q Sr   )str)rI   vr   r   r    rK      s   	 z$compare_versions.<locals>.<listcomp>c             S   s   g  |  ] } t  |   q Sr   )ra   )rI   rb   r   r   r    rK      s   	 )r   r   
ValueErrorr   	TypeErrorr7   )version1version2r   r   r    compare_versionst   s    rg   c             C   s   t  d d   |   S)Nc             S   s   t  |  |  d k r |  p | S)N   )rg   )v1v2r   r   r    r=      s    z!highest_version.<locals>.<lambda>)r   )r9   r   r   r    rA      s    rA   )r#   rT   pip.downloadpippip.basecommandr   r   pip.utilr   pip.logr   Zpip.backwardcompatr   r   r   pip.exceptionsr	   pip.status_codesr
   rR   distutils.versionr   r   r   r"   r&   rg   rA   r   r   r   r    <module>   s   *