U
    Eh                     @   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  e!e"Z#G dd deeZ$dd Z%dddZ&dd Z'dS )    )absolute_importN)OrderedDict)pkg_resources)parse)xmlrpc_client)Command)SessionCommandMixin)NO_MATCHES_FOUNDSUCCESS)CommandError)PyPI)PipXmlrpcTransport)get_terminal_size)
indent_log)write_outputc                       s8   e Zd ZdZdZdZ fddZdd Zdd	 Z  Z	S )
SearchCommandz@Search for PyPI packages whose name or summary contains <query>.z
      %prog [options] <query>Tc                    s@   t t| j|| | jjddddtjdd | jd| j d S )Nz-iz--indexindexZURLz3Base URL of Python Package Index (default %default))destmetavardefaulthelpr   )	superr   __init__Zcmd_optsZ
add_optionr   Zpypi_urlparserZinsert_option_group)selfargskw	__class__ C./venv/lib/python3.8/site-packages/pip/_internal/commands/search.pyr   %   s     zSearchCommand.__init__c                 C   sT   |st d|}| ||}t|}d }tj r<t d }t||d |rPtS t	S )Nz)Missing required argument (search query).r   )terminal_width)
r   searchtransform_hitssysstdoutisattyr   print_resultsr
   r	   )r   optionsr   queryZ	pypi_hitshitsr!   r   r   r    run0   s    

zSearchCommand.runc                 C   s<   |j }| |}t||}t||}|||dd}|S )N)namesummaryor)r   Zget_default_sessionr   r   ZServerProxyr"   )r   r)   r(   Z	index_urlZsessionZ	transportZpypir*   r   r   r    r"   @   s    

zSearchCommand.search)
__name__
__module____qualname____doc__usageZignore_require_venvr   r+   r"   __classcell__r   r   r   r    r      s   r   c                 C   s   t  }| D ]n}|d }|d }|d }|| krF|||gd||< q
|| d | |t|| d kr
||| d< q
t| 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)r,   r-   versionsr6   )r   keysappendhighest_versionlistvalues)r*   Zpackageshitr,   r-   r5   r   r   r    r#   K   s    r#   c              
   C   sP  | sd S |d kr&t dd | D d }dd tjD }| D ]}|d }|d pRd}t|dd	g}|d k	r|| d
 }|dkrt||}dd|d   |}d|d||f |f }	zxt|	 ||kr0t	|}
t
 L |
j|krtd|
j n.td|
j t|jrtd| n
td| W 5 Q R X W q: tk
rH   Y q:X q:d S )Nc              	   S   s.   g | ]&}t |d  t t|ddg qS )r,   r6   -)lenr9   get).0r<   r   r   r    
<listcomp>k   s   z!print_results.<locals>.<listcomp>   c                 S   s   g | ]
}|j qS r   )Zproject_name)r@   pr   r   r    rA   p   s     r,   r-    r6   r=      
   
    z	%-*s - %sz%s (%s)zINSTALLED: %s (latest)zINSTALLED: %sz=LATEST:    %s (pre-release; install with "pip install --pre")zLATEST:    %s)maxr   Zworking_setr9   r?   textwrapwrapjoinr   Zget_distributionr   r5   parse_versionZpreUnicodeEncodeError)r*   Zname_column_widthr!   Zinstalled_packagesr<   r,   r-   ZlatestZtarget_widthlineZdistr   r   r    r'   g   sJ    

 


r'   c                 C   s   t | tdS )N)key)rJ   rN   )r6   r   r   r    r9      s    r9   )NN)(Z
__future__r   Zloggingr$   rK   collectionsr   Zpip._vendorr   Zpip._vendor.packaging.versionr   rN   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   Z	getLoggerr/   loggerr   r#   r'   r9   r   r   r   r    <module>   s*   
-
)