
    eA              	          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rd dl
m%Z%  G d de%          Z& e j'        e(          Z) G d dee          Z*deee+e+f                  ded         fdZ,de+de+ddfdZ-	 	 dded         dee.         dee.         ddfdZ/dee+         de+f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                   :    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        T/var/www/html/api/venv/lib/python3.11/site-packages/pip/_internal/commands/search.pyr   r      s4         			s)r    r   c            	       ~    e Zd ZdZdZdZddZdedee	         de
fd	Zd
ee	         dedeee	e	f                  fdZdS )SearchCommandz@Search for PyPI packages whose name or summary contains <query>.z
      %prog [options] <query>TreturnNc                     | j                             ddddt          j        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)selfs    r!   add_optionszSearchCommand.add_options)   sW      MF 	! 	
 	
 	
 	''4=99999r    optionsargsc                 &   |st          d          |}|                     ||          }t          |          }d }t          j                                        rt          j                    d         }t          ||           |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   )r1   r3   r4   query	pypi_hitshitsr6   s          r!   runzSearchCommand.run5   s     	LJKKKKKw//	i((: 	;#577:Nd>:::: 	Nr    r?   c                    |j         }|                     |          }t          ||          }t          j                            ||          }	 |                    ||dd          }nL# t          j        j        $ r5}d                    |j	        |j
                  }	t          |	          d }~ww xY wt          |t                    sJ |S )N)r   r   orz-XMLRPC request failed [code: {code}]
{string})codestring)r&   get_default_sessionr   xmlrpcclientServerProxyr7   Faultformat	faultCodefaultStringr   
isinstancelist)
r1   r?   r3   	index_urlsession	transportpypirA   faultmessages
             r!   r7   zSearchCommand.searchE   s    M	**733&y'::	}((I>>	(;;%@@$GGDD}" 	( 	( 	(FMM_( N  G w'''	( $%%%%%s   A( (B1<0B,,B1)r$   N)r   r   r   __doc__usageignore_require_venvr2   r   r   r   intrB   r   r7   r   r    r!   r#   r#   "   s        JJ!E
: 
: 
: 
: 6  c  s         DI  4S#X;O      r    r#   rA   r$   c                 r   t                      }| D ]}|d         }|d         }|d         }||                                vr|||gd||<   ;||         d                             |           |t          ||         d                   k    r|||         d<   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_versionrP   values)rA   packageshitr   r   r\   s         r!   r8   r8   X   s     -8MMH 4 46{i.i.x}}&&"$I HTNN TN:&--g666 /(4.*DEEEE,3y)!!"""r    r   latestc                 x   t                      }|                    |           }|t                      5  |j        |k    rt	          d|j                   nJt	          d|j                   t          |          j        rt	          d|           nt	          d|           d d d            d S # 1 swxY w 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   r\   r   parse_versionpre)r   rc   envdists       r!   print_dist_installation_inforj   t   s   
!
#
#C%%D\\ 	: 	:|v%%5t|DDDD_dl;;; ((, : 5    !&999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: s   A,B--B14B1name_column_widthr6   c                    | sd S |t          d | D                       dz   }| D ]}|d         }|d         pd}t          |                    ddg                    }|A||z
  dz
  }|d	k    r3t          j        ||          }d
d|dz   z  z                       |          }| d| d}	|	| d| }
	 t          |
           t          ||           # t          $ r Y w xY wd S )Nc                     g | ]I}t          |d                    t          t          |                    ddg                              z   JS )r   r   -)lenr_   get).0rb   s     r!   
<listcomp>z!print_results.<locals>.<listcomp>   sZ        F$$s?377:PSu;U;U+V+V'W'WW  r       r   r    r   rn      
   
    z ()z - )	maxr_   rp   textwrapwrapjoinr   rj   UnicodeEncodeError)rA   rk   r6   rb   r   r   rc   target_widthsummary_linesname_latestlines              r!   r>   r>      sh   
    #     	   6{i.&B cU!;!;<<%),==ALb   (g| D D#):Q)>"??EEmTT*****0???g??	(v6666! 	 	 	D	! s   2C
CCr   c                 .    t          | t                    S )N)key)r{   rf   )r   s    r!   r_   r_      s    x]++++r    )NN)1loggingr<   r9   r|   xmlrpc.clientrH   collectionsr   optparser   typingr   r   r   r   pip._vendor.packaging.versionr	   rf   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   r8   rj   rZ   r>   r_   r   r    r!   <module>r      s     



      # # # # # #       6 6 6 6 6 6 6 6 6 6 6 6 @ @ @ @ @ @ 2 2 2 2 2 2 = = = = = = D D D D D D D D 1 1 1 1 1 1 : : : : : : + + + + + + ; ; ; ; ; ; 2 2 2 2 2 2 1 1 1 1 1 1               
	8	$	$3 3 3 3 3G0 3 3 3l#d38n- #$7G2H # # # #8:s :C :D : : : :* (,$(# #

 #}# SM# 
	# # # #L,d3i ,C , , , , , ,r    