
    )h              	          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$ d dl%m&Z&  G d de      Z' e jP                  e)      Z* G d dee      Z+deee,e,f      ded   fdZ-de,dee   ddfdZ.de,dee   fdZ/	 	 d!ded   dee0   dee0   ddfdZ1dee,   de,fd Z2y)"    N)OrderedDict)Values)DictListOptional	TypedDict)parse)Command)SessionCommandMixin)NO_MATCHES_FOUNDSUCCESS)CommandError)get_default_environment)BaseDistribution)PyPI)PipXmlrpcTransport)
indent_log)write_outputc                   2    e Zd ZU eed<   eed<   ee   ed<   y)TransformedHitnamesummaryversionsN)__name__
__module____qualname__str__annotations__r        P/var/www/html/venv/lib/python3.12/site-packages/pip/_internal/commands/search.pyr   r      s    
IL3ir    r   c            	       d    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y)SearchCommandz@Search for PyPI packages whose name or summary contains <query>.z
      %prog [options] <query>TreturnNc                     | j                   j                  ddddt        j                  d       | j                  j                  d| j                          y )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(   sI      MMF 	! 	
 	''4==9r    optionsargsc                     |st        d      |}| j                  ||      }t        |      }d }t        j                  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.run4   sp    JKKKKw/	i(::#557:Nd>:Nr    r?   c                    |j                   }| j                  |      }t        ||      }t        j                  j                  ||      }	 |j                  ||dd      }t        |t              sJ |S # t        j                  j                  $ r,}d|j                   d|j                   }	t        |	      d }~ww xY w)N)r   r   orzXMLRPC request failed [code: z]
)r&   get_default_sessionr   xmlrpcclientServerProxyr7   Fault	faultCodefaultStringr   
isinstancelist)
r1   r?   r3   	index_urlsession	transportpypirA   faultmessages
             r!   r7   zSearchCommand.searchD   s    MM	**73&y':	}}((I>	(;;%@$GD $%%% }}"" 	(//@EDUDUCVW  w''		(s   A4 4B='B88B=)r$   N)r   r   r   __doc__usageignore_require_venvr2   r   r   r   intrB   r   r7   r   r    r!   r#   r#   !   s`    J!E
: 6  c  s   DI  4S#X;O r    r#   rA   r$   c                    t               }| D ]b  }|d   }|d   }|d   }||j                         vr|||gd||<   /||   d   j                  |       |t        ||   d         k(  s[|||   d<   d t	        |j                               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_versionrM   values)rA   packageshitr   r   rY   s         r!   r8   r8   V   s     +6-H 46{i.i.x}}&"$IHTN TN:&--g6 /(4.*DEE,3y)!4$ !""r    latestdistc                    |~t               5  |j                  | k(  rt        d|j                         nDt        d|j                         t        |       j                  rt        d|        nt        d|        d d d        y y # 1 sw Y   y xY w)NzINSTALLED: %s (latest)zINSTALLED: %sz=LATEST:    %s (pre-release; install with `pip install --pre`)zLATEST:    %s)r   rY   r   parse_versionpre)r`   ra   s     r!   print_dist_installation_infore   r   s    \ 	:||v%5t||D_dll; (,, 5 !&9	: 	: 	: 	:s   A+BBr   c                 8    t               }|j                  |       S )N)r   get_distribution)r   envs     r!   get_installed_distributionri      s    
!
#C%%r    name_column_widthr6   c                    | sy |Nt        | D cg c]6  }t        |d         t        t        |j                  ddg                  z   8 c}      dz   }| D ]  }|d   }|d   xs d}t        |j                  ddg            }|=||z
  dz
  }|dkD  r0t	        j
                  ||      }d	d
|dz   z  z   j                  |      }| d| d}	|	| dd| }
	 t        |
       t        |      }t        ||        y c c}w # t        $ r Y w xY w)Nr   r   -   r       
   
    z ()z - )maxlenr\   gettextwrapwrapjoinr   ri   re   UnicodeEncodeError)rA   rj   r6   r_   r   r   r`   target_widthsummary_linesname_latestlinera   s               r!   r>   r>      sZ   
    $ F$s?377:PSu;U+V'WW  	  6{i.&B cU!;<%),==ALb  (g| D#):Q)>"??EEmTb*0112#gY?	-d3D(6!2 " 		s   ;C;"D  	DDr   c                 $    t        | t              S )N)key)ru   rc   )r   s    r!   r\   r\      s    x]++r    )NN)3loggingr<   r9   rx   xmlrpc.clientrF   collectionsr   optparser   typingr   r   r   r   pip._vendor.packaging.versionr	   rc   pip._internal.cli.base_commandr
   pip._internal.cli.req_commandr   pip._internal.cli.status_codesr   r   pip._internal.exceptionsr   pip._internal.metadatar   pip._internal.metadata.baser   pip._internal.models.indexr   pip._internal.network.xmlrpcr   pip._internal.utils.loggingr   pip._internal.utils.miscr   r   	getLoggerr   loggerr#   r   r8   re   ri   rW   r>   r\   r   r    r!   <module>r      s(     
   #  2 2 @ 2 = D 1 : 8 + ; 2 1Y  
		8	$2G0 2j#d38n- #$7G2H #8: :H=M4N :SW :"&S &X6F-G & (,$($

 $}$ SM$ 
	$N,d3i ,C ,r    