
0c@_|              	   @   s  d  d l  m Z d  d l Z d  d l Z d  d l 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 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  m! Z! d  d l" m# Z# e# rd  d l$ m% Z% d  d l& m' Z' m( Z( m) Z) d  d l* m+ Z+ e+ d d e, d e, d e' e, i  Z- e j. e/  Z0 Gd d   d e e  Z1 d d   Z2 d d d d  Z3 d d   Z4 d S)     )absolute_importN)OrderedDict)pkg_resources)parse)xmlrpc_client)Command)SessionCommandMixin)NO_MATCHES_FOUNDSUCCESS)CommandError)PyPI)PipXmlrpcTransport)get_terminal_size)
indent_log)get_distributionwrite_output)MYPY_CHECK_RUNNING)Values)ListDictOptional)	TypedDictTransformedHitnamesummaryversionsc               @   sF   e  Z d  Z d Z d Z d Z d d   Z d d   Z d d	   Z d
 S)SearchCommandz@Search for PyPI packages whose name or summary contains <query>.z
      %prog [options] <query>Tc             C   sH   |  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   )cmd_opts
add_optionr   pypi_urlparserinsert_option_group)self r)   </tmp/pip-build-jynh7p1z/pip/pip/_internal/commands/search.pyadd_options,   s    			zSearchCommand.add_optionsc             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   searchtransform_hitssysstdoutisattyr   print_resultsr
   r	   )r(   optionsargsquery	pypi_hitshitsr,   r)   r)   r*   run7   s    zSearchCommand.runc             C   s[   | j  } |  j |  } t | |  } t j | |  } | j d | d | i d  } | S)Nr   r   or)r   Zget_default_sessionr   r   ServerProxyr-   )r(   r5   r3   	index_urlsession	transportpypir7   r)   r)   r*   r-   H   s    	zSearchCommand.searchN)	__name__
__module____qualname____doc__usageZignore_require_venvr+   r8   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   r   versionr   )r   keysappendhighest_versionlistvalues)r7   packageshitr   r   rD   r)   r)   r*   r.   T   s    	


r.   c             C   s  |  s
 d  S| d  k r3 t  d d   |  D  d } d d   t j D } xv|  D]n} | d } | d pm d } t | j d d	 g   } | d  k	 r | | d
 } | d k r t j | |  }	 d d | d j |	  } d j d d j t	     t	    }
 y t
 |
  | | k rt |  } | d  k	 s9t  t   c | j | k ret
 d | j  n< t
 d | j  t |  j rt
 d |  n t
 d |  Wd  QRXWqP t k
 rYqP XqP Wd  S)Nc             S   s?   g  |  ]5 } t  | d   t  t | j d d g     q S)r   r   -)lenrG   get).0rK   r)   r)   r*   
<listcomp>w   s   	z!print_results.<locals>.<listcomp>   c             S   s   g  |  ] } | j   q Sr)   )project_name)rO   pr)   r)   r*   rP   {   s   	 r   r    r   rL      
   
    z-{name_latest:{name_column_width}} - {summary}Zname_latestz{name} ({latest})zINSTALLED: %s (latest)zINSTALLED: %sz=LATEST:    %s (pre-release; install with "pip install --pre")zLATEST:    %s)maxr   working_setrG   rN   textwrapwrapjoinformatlocalsr   r   AssertionErrorr   rD   parse_versionpreUnicodeEncodeError)r7   name_column_widthr,   installed_packagesrK   r   r   latestZtarget_widthZsummary_lineslinedistr)   r)   r*   r2   q   sH    	

		


r2   c             C   s   t  |  d t S)Nkey)rZ   rb   )r   r)   r)   r*   rG      s    rG   )5
__future__r   loggingr/   r\   collectionsr   Zpip._vendorr   Zpip._vendor.packaging.versionr   rb   Zpip._vendor.six.movesr   Zpip._internal.cli.base_commandr   Zpip._internal.cli.req_commandr   Zpip._internal.cli.status_codesr	   r
   Zpip._internal.exceptionsr   Zpip._internal.models.indexr   Zpip._internal.network.xmlrpcr   Zpip._internal.utils.compatr   Zpip._internal.utils.loggingr   Zpip._internal.utils.miscr   r   Zpip._internal.utils.typingr   optparser   Ztypingr   r   r   Ztyping_extensionsr   strr   	getLoggerr?   loggerr   r.   r2   rG   r)   r)   r)   r*   <module>   s:   /-