o
    Ëý°jA  ã                	   @   sŽ  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mZmZ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rzd dl
m%Z% G dd„ de%ƒZ&e  'e(¡Z)G dd„ deeƒZ*deee+e+f  ded fdd„Z,de+de+ddfdd„Z-		d#ded dee. dee. ddfdd„Z/d ee+ de+fd!d"„Z0dS )$é    N)ÚOrderedDict)ÚValues)ÚTYPE_CHECKINGÚDictÚListÚOptional)Úparse)ÚCommand)ÚSessionCommandMixin)ÚNO_MATCHES_FOUNDÚSUCCESS)ÚCommandError)Úget_default_environment)ÚPyPI)ÚPipXmlrpcTransport)Ú
indent_log)Úwrite_output)Ú	TypedDictc                   @   s*   e Zd ZU eed< eed< ee ed< dS )ÚTransformedHitÚnameÚsummaryÚversionsN)Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__r   © r   r   ú�/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/pip/_internal/commands/search.pyr      s   
 r   c                	   @   sb   e Zd ZdZdZdZddd„Zded	ee	 de
fd
d„Zdee	 dedeee	e	f  fdd„ZdS )ÚSearchCommandz@Search for PyPI packages whose name or summary contains <query>.z
      %prog [options] <query>TÚreturnNc                 C   s.   | j jddddtjdd� | j d| j ¡ d S )Nz-iz--indexÚindexÚURLz3Base URL of Python Package Index (default %default))ÚdestÚmetavarÚdefaultÚhelpr   )Úcmd_optsÚ
add_optionr   Úpypi_urlÚparserÚinsert_option_group)Úselfr   r   r   Úadd_options)   s   ú	zSearchCommand.add_optionsÚoptionsÚargsc                 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/   ÚqueryÚ	pypi_hitsÚhitsr0   r   r   r   Úrun5   s   
zSearchCommand.runr9   c           
   
   C   sˆ   |j }|  |¡}t||ƒ}tj ||¡}z| ||dœd¡}W n tjjy: } zdj|j	|j
d�}	t|	ƒ‚d }~ww t|tƒsBJ ‚|S )N)r   r   Úorz-XMLRPC request failed [code: {code}]
{string})ÚcodeÚstring)r!   Úget_default_sessionr   ÚxmlrpcÚclientÚServerProxyr1   ÚFaultÚformatÚ	faultCodeÚfaultStringr   Ú
isinstanceÚlist)
r,   r9   r.   Ú	index_urlÚsessionÚ	transportÚpypir;   ÚfaultÚmessager   r   r   r1   E   s    

þ€ûzSearchCommand.search)r    N)r   r   r   Ú__doc__ÚusageÚignore_require_venvr-   r   r   r   Úintr<   r   r1   r   r   r   r   r   "   s    
*r   r;   r    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_versionrI   Úvalues)r;   ÚpackagesÚhitr   r   rT   r   r   r   r2   X   s   ý€r2   r   Úlatestc                 C   s¬   t ƒ }| | ¡}|d urTtƒ �; |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 sMw   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   Úget_distributionr   rT   r   Úparse_versionÚpre)r   r[   ÚenvÚdistr   r   r   Úprint_dist_installation_infot   s&   


ýôþ"úÿra   Úname_column_widthr0   c              	   C   sâ   | sd S |d u rt dd„ | D ƒƒd }| D ]Y}|d }|d p d}t| ddg¡ƒ}|d urI|| d	 }|d
krIt ||¡}dd|d    |¡}|› d|› d�}	|	|› ›d|› �}
zt|
ƒ t||ƒ W q tyn   Y qw d S )Nc              	   S   s.   g | ]}t |d  ƒt t| ddg¡ƒƒ ‘qS )r   r   ú-)ÚlenrW   Úget)Ú.0rZ   r   r   r   Ú
<listcomp>‘   s     ÿÿz!print_results.<locals>.<listcomp>é   r   r   Ú r   rc   é   é
   Ú
ú é   z (ú)z - )	ÚmaxrW   re   ÚtextwrapÚwrapÚjoinr   ra   ÚUnicodeEncodeError)r;   rb   r0   rZ   r   r   r[   Útarget_widthÚsummary_linesÚname_latestÚliner   r   r   r8   ‡   s:   þÿúÿ
ÿðr8   r   c                 C   s   t | td�S )N)Úkey)rp   r]   )r   r   r   r   rW   ­   s   rW   )NN)1Úloggingr6   r3   rq   Úxmlrpc.clientrA   Úcollectionsr   Úoptparser   Útypingr   r   r   r   Úpip._vendor.packaging.versionr   r]   Úpip._internal.cli.base_commandr	   Úpip._internal.cli.req_commandr
   Úpip._internal.cli.status_codesr   r   Úpip._internal.exceptionsr   Úpip._internal.metadatar   Úpip._internal.models.indexr   Úpip._internal.network.xmlrpcr   Úpip._internal.utils.loggingr   Úpip._internal.utils.miscr   r   r   Ú	getLoggerr   Úloggerr   r   r2   ra   rS   r8   rW   r   r   r   r   Ú<module>   sJ    
"6ýÿþý
ü&