a
    ñ»j–  ã                   @  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œdd„Z+ddddœdd„Z,ddd œd!d"„Z-d+dd#d#dd$œd%d&„Z.d'dd(œd)d*„Z/dS ),é    )Ú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   úCE:\soccer\ml_env\Lib\site-packages\pip/_internal/commands/search.pyr      s   
r   c                   @  sJ   e Zd ZdZdZdZddœdd„Zdd	d
dœdd„Zd	dddœdd„ZdS )ÚSearchCommandz@Search for PyPI packages whose name or summary contains <query>.z
      %prog [options] <query>TÚNone)Úreturnc                 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_optionsr   r   Úint)ÚoptionsÚargsr    c                 C  sV   |st dƒ‚|}|  ||¡}t|ƒ}d }tj ¡ r>t ¡ d }t||d� |rRt	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/   r0   ÚqueryZ	pypi_hitsÚhitsr1   r   r   r   Úrun6   s    
zSearchCommand.runúlist[dict[str, str]])r:   r/   r    c           
   
   C  s–   |j }|  |¡}t||ƒ}tj ||¡}z| ||dœd¡}W nD tjjy‚ } z(d|j› d|j	› �}	t
|	ƒ‚W Y d }~n
d }~0 0 t|tƒs’J ‚|S )N)r   r   ÚorzXMLRPC request failed [code: z]
)r!   Úget_default_sessionr   ÚxmlrpcÚclientÚServerProxyr2   ÚFaultÚ	faultCodeÚfaultStringr   Ú
isinstanceÚlist)
r,   r:   r/   Ú	index_urlÚsessionÚ	transportÚpypir;   ÚfaultÚmessager   r   r   r2   F   s    

ÿzSearchCommand.searchN)	r   r   r   Ú__doc__ÚusageÚignore_require_venvr-   r<   r2   r   r   r   r   r   #   s   r   r=   zlist[TransformedHit])r;   r    c                 C  s†   t ƒ }| D ]n}|d }|d }|d }|| ¡ v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   r   r   )r   ÚkeysÚappendÚhighest_versionrG   Úvalues)r;   ÚpackagesÚhitr   r   rQ   r   r   r   r3   X   s    ýr3   r   zBaseDistribution | Noner   )ÚlatestÚdistr    c                 C  sv   |d urrt ƒ �T |j| kr(td|jƒ n,td|jƒ t| ƒjrJtd| ƒ n
td| ƒ W d   ƒ n1 sh0    Y  d S )NzINSTALLED: %s (latest)zINSTALLED: %sz=LATEST:    %s (pre-release; install with `pip install --pre`)zLATEST:    %s)r   rQ   r   Úparse_versionÚpre)rX   rY   r   r   r   Úprint_dist_installation_infot   s    

ýr\   )r   r    c                 C  s   t ƒ }| | ¡S )N)r   Úget_distribution)r   Úenvr   r   r   Úget_installed_distribution…   s    r_   z
int | None)r;   Úname_column_widthr1   r    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r’|| d	 }|d
kr’t ||¡}dd|d    |¡}|› d|› d�}	|	|› ›d|› �}
zt|
ƒ t|ƒ}t||ƒ W q* t	yä   Y q*0 q*d S )Nc              	   S  s.   g | ]&}t |d  ƒt t| ddg¡ƒƒ ‘qS )r   r   ú-)ÚlenrT   Úget)Ú.0rW   r   r   r   Ú
<listcomp>”   s   ÿz!print_results.<locals>.<listcomp>é   r   r   Ú r   ra   é   é
   Ú
ú é   z (ú)z - )
ÚmaxrT   rc   ÚtextwrapÚwrapÚjoinr   r_   r\   ÚUnicodeEncodeError)r;   r`   r1   rW   r   r   rX   Ztarget_widthZsummary_linesZname_latestÚlinerY   r   r   r   r9   Š   s8    þÿúÿ
r9   r   )r   r    c                 C  s   t | td�S )N)Úkey)rn   rZ   )r   r   r   r   rT   ±   s    rT   )NN)0Ú
__future__r   Úloggingr7   r4   ro   Úxmlrpc.clientr@   Úcollectionsr   Úoptparser   Útypingr   Zpip._vendor.packaging.versionr   rZ   Úpip._internal.cli.base_commandr   Úpip._internal.cli.req_commandr   Úpip._internal.cli.status_codesr	   r
   Úpip._internal.exceptionsr   Úpip._internal.metadatar   Zpip._internal.metadata.baser   Úpip._internal.models.indexr   Zpip._internal.network.xmlrpcr   Úpip._internal.utils.loggingr   Úpip._internal.utils.miscr   r   Ú	getLoggerr   Úloggerr   r3   r\   r_   r9   rT   r   r   r   r   Ú<module>   s:   
5  ý'