ó
“àfac           @@  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 i e, d 6e, d 6e( e, d 6ƒ Z- n  e j. e/ ƒ Z0 d e e f d „  ƒ  YZ1 d „  Z2 d d d „ Z4 d „  Z5 d S(   i    (   t   absolute_importN(   t   OrderedDict(   t   pkg_resources(   t   parse(   t   xmlrpc_client(   t   Command(   t   SessionCommandMixin(   t   NO_MATCHES_FOUNDt   SUCCESS(   t   CommandError(   t   PyPI(   t   PipXmlrpcTransport(   t   get_terminal_size(   t
   indent_log(   t   get_distributiont   write_output(   t   MYPY_CHECK_RUNNING(   t   Values(   t   Dictt   Listt   Optional(   t	   TypedDictt   TransformedHitt   namet   summaryt   versionst   SearchCommandc           B@  s5   e  Z d  Z d Z e Z d „  Z d „  Z d „  Z RS(   s@   Search for PyPI packages whose name or summary contains <query>.s   
      %prog [options] <query>c         C@  sH   |  j  j d d d d d d d t j d d	 ƒ|  j j d
 |  j  ƒ d  S(   Ns   -is   --indext   destt   indext   metavart   URLt   defaultt   helps3   Base URL of Python Package Index (default %default)i    (   t   cmd_optst
   add_optionR
   t   pypi_urlt   parsert   insert_option_group(   t   self(    (    s<   /tmp/pip-install-YjPQSb/pip/pip/_internal/commands/search.pyt   add_options.   s    			c         C@  s|   | s t  d ƒ ‚ n  | } |  j | | ƒ } t | ƒ } d  } t j j ƒ  r^ t ƒ  d } n  t | d | ƒ| rx t	 St
 S(   Ns)   Missing required argument (search query).i    t   terminal_width(   R	   t   searcht   transform_hitst   Nonet   syst   stdoutt   isattyR   t   print_resultsR   R   (   R&   t   optionst   argst   queryt	   pypi_hitst   hitsR(   (    (    s<   /tmp/pip-install-YjPQSb/pip/pip/_internal/commands/search.pyt   run9   s    c   
      C@  s¤   | j  } |  j | ƒ } t | | ƒ } t j | | ƒ } y$ | j i | d 6| d 6d ƒ } Wn@ t j k
 rŸ } d j d | j d | j	 ƒ }	 t
 |	 ƒ ‚ n X| S(   NR   R   t   ors-   XMLRPC request failed [code: {code}]
{string}t   codet   string(   R   t   get_default_sessionR   R   t   ServerProxyR)   t   Faultt   formatt	   faultCodet   faultStringR	   (
   R&   R2   R0   t	   index_urlt   sessiont	   transportt   pypiR4   t   faultt   message(    (    s<   /tmp/pip-install-YjPQSb/pip/pip/_internal/commands/search.pyR)   J   s    	$		(	   t   __name__t
   __module__t   __doc__t   usaget   Truet   ignore_require_venvR'   R5   R)   (    (    (    s<   /tmp/pip-install-YjPQSb/pip/pip/_internal/commands/search.pyR   '   s   		c         C@  s¿   t  ƒ  } x£ |  D]› } | d } | d } | d } | | j ƒ  k rk i | d 6| d 6| g d 6| | <q | | d j | ƒ | t | | d ƒ k r | | | d <q q Wt | j ƒ  ƒ S(   s¼   
    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   t   versionR   (   R   t   keyst   appendt   highest_versiont   listt   values(   R4   t   packagest   hitR   R   RK   (    (    s<   /tmp/pip-install-YjPQSb/pip/pip/_internal/commands/search.pyR*   ]   s    	


c      	   C@  s  |  s
 d  S| d  k re t g  |  D]5 } t | d ƒ t t | j d d g ƒ ƒ ƒ ^ q  ƒ d } n  g  t j D] } | j ^ qo } x}|  D]u} | d } | d p¨ d } t | j d d g ƒ ƒ } | d  k	 r| | d }	 |	 d k rt j	 | |	 ƒ }
 d	 d
 | d j
 |
 ƒ } qn  d j d d j t ƒ    t ƒ   } y© t | ƒ | | k rët | ƒ } | d  k	 szt ‚ t ƒ  c | j | k r¦t d | j ƒ n< t d | j ƒ t | ƒ j rÕt d | ƒ n t d | ƒ Wd  QXn  Wq‹ t k
 rÿq‹ Xq‹ Wd  S(   NR   R   t   -i   R   t    i   i
   s   
t    i   s-   {name_latest:{name_column_width}} - {summary}t   name_latests   {name} ({latest})s   INSTALLED: %s (latest)s   INSTALLED: %ss=   LATEST:    %s (pre-release; install with "pip install --pre")s   LATEST:    %s(   R+   t   maxt   lenRN   t   getR   t   working_sett   project_namet   textwrapt   wrapt   joinR<   t   localsR   R   t   AssertionErrorR   RK   t   parse_versiont   pret   UnicodeEncodeError(   R4   t   name_column_widthR(   RR   t   pt   installed_packagesR   R   t   latestt   target_widtht   summary_linest   linet   dist(    (    s<   /tmp/pip-install-YjPQSb/pip/pip/_internal/commands/search.pyR/   z   sH    ?

	


c         C@  s   t  |  d t ƒS(   Nt   key(   RW   Ra   (   R   (    (    s<   /tmp/pip-install-YjPQSb/pip/pip/_internal/commands/search.pyRN   §   s    (6   t
   __future__R    t   loggingR,   R\   t   collectionsR   t   pip._vendorR   t   pip._vendor.packaging.versionR   Ra   t   pip._vendor.six.movesR   t   pip._internal.cli.base_commandR   t   pip._internal.cli.req_commandR   t   pip._internal.cli.status_codesR   R   t   pip._internal.exceptionsR	   t   pip._internal.models.indexR
   t   pip._internal.network.xmlrpcR   t   pip._internal.utils.compatR   t   pip._internal.utils.loggingR   t   pip._internal.utils.miscR   R   t   pip._internal.utils.typingR   t   optparseR   t   typingR   R   R   t   typing_extensionsR   t   strR   t	   getLoggerRE   t   loggerR   R*   R+   R/   RN   (    (    (    s<   /tmp/pip-install-YjPQSb/pip/pip/_internal/commands/search.pyt   <module>   s:   %6	-