o
    i                     @  sH  d dl mZ d dlZd dl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# d dl$m%Z% G dd deZ&e'e(Z)G dd deeZ*d.ddZ+d/d d!Z,d0d#d$Z-		d1d2d(d)Z.d3d,d-Z/dS )4    )annotationsN)OrderedDict)Values)	TypedDict)parse)Command)SessionCommandMixin)NO_MATCHES_FOUNDSUCCESS)CommandError)get_default_environment)BaseDistribution)PyPI)PipXmlrpcTransport)
indent_log)write_outputc                   @  s&   e Zd ZU ded< ded< ded< dS )TransformedHitstrnamesummary	list[str]versionsN)__name__
__module____qualname____annotations__ r   r   =lib/python3.10/site-packages/pip/_internal/commands/search.pyr      s   
 r   c                   @  s6   e Zd ZdZdZdZdddZdddZdddZdS )SearchCommandz@Search for PyPI packages whose name or summary contains <query>.z
      %prog [options] <query>TreturnNonec                 C  s.   | 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   )Zcmd_optsZ
add_optionr   Zpypi_urlparserZinsert_option_group)selfr   r   r   add_options*   s   	zSearchCommand.add_optionsoptionsr   argsr   intc                 C  sV   |st d|}| ||}t|}d }tj rt d }t||d |r)t	S t
S )Nz)Missing required argument (search query).r   )terminal_width)r   searchtransform_hitssysstdoutisattyshutilget_terminal_sizeprint_resultsr
   r	   )r'   r)   r*   queryZ	pypi_hitshitsr,   r   r   r   run6   s   
zSearchCommand.runr5   list[dict[str, str]]c           
   
   C  s   |j }| |}t||}tj||}z|||dd}W n tjjy; } zd|j d|j	 }	t
|	d }~ww t|tsCJ |S )N)r   r   orzXMLRPC request failed [code: z]
)r!   Zget_default_sessionr   xmlrpcZclientZServerProxyr-   ZFaultZ	faultCodeZfaultStringr   
isinstancelist)
r'   r5   r)   Z	index_urlZsessionZ	transportZpypir6   Zfaultmessager   r   r   r-   F   s   

zSearchCommand.searchN)r   r    )r)   r   r*   r   r   r+   )r5   r   r)   r   r   r8   )	r   r   r   __doc__usageZignore_require_venvr(   r7   r-   r   r   r   r   r   #   s    

r   r6   r8   r   list[TransformedHit]c                 C  s   t  }| D ]7}|d }|d }|d }|| vr#|||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   r   r   )r   keysappendhighest_versionr<   values)r6   Zpackageshitr   r   rA   r   r   r   r.   X   s   r.   latestr   distBaseDistribution | Noner    c                 C  s   |d urLt  ; |j| krtd|j ntd|j t| jr%td|  ntd|  W d    d S W d    d S W d    d S 1 sEw   Y  d S d S )NzINSTALLED: %s (latest)zINSTALLED: %sz=LATEST:    %s (pre-release; install with `pip install --pre`)zLATEST:    %s)r   rA   r   parse_versionZpre)rG   rH   r   r   r   print_dist_installation_infot   s"   

"rK   r   c                 C  s   t  }|| S )N)r   Zget_distribution)r   envr   r   r   get_installed_distribution   s   
rM   name_column_width
int | Noner,   c              	   C  s   | sd S |d u rt dd | D d }| D ]]}|d }|d p d}t|ddg}|d urI|| d	 }|d
krIt||}dd|d   |}| d| d}	|	| d| }
zt|
 t|}t|| W q t	yr   Y qw d S )Nc              	   S  s.   g | ]}t |d  t t|ddg qS )r   r   -)lenrD   get).0rF   r   r   r   
<listcomp>   s     z!print_results.<locals>.<listcomp>   r   r    r   rP      
   
    z ()z - )
maxrD   rR   textwrapwrapjoinr   rM   rK   UnicodeEncodeError)r6   rN   r,   rF   r   r   rG   Ztarget_widthZsummary_linesZname_latestlinerH   r   r   r   r4      s<   
r4   r   r   c                 C  s   t | tdS )N)key)r]   rJ   )r   r   r   r   rD      s   rD   )r6   r8   r   r@   )rG   r   rH   rI   r   r    )r   r   r   rI   )NN)r6   r@   rN   rO   r,   rO   r   r    )r   r   r   r   )0Z
__future__r   Zloggingr2   r/   r^   Zxmlrpc.clientr:   collectionsr   Zoptparser   typingr   Zpip._vendor.packaging.versionr   rJ   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.metadatar   Zpip._internal.metadata.baser   Zpip._internal.models.indexr   Zpip._internal.network.xmlrpcr   Zpip._internal.utils.loggingr   Zpip._internal.utils.miscr   r   Z	getLoggerr   loggerr   r.   rK   rM   r4   rD   r   r   r   r   <module>   s<    

5

'