
    $TXg)                        d 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 e
rdd	lmZmZmZ d
dlmZ ddZddZddZefddZy)zhCLI implementation for `conda search`.

Query channels for packages matching the provided package spec.
    )annotations)SUPPRESS)defaultdict)datetimetimezone)TYPE_CHECKING   )_ValidatePackages)ArgumentParser	Namespace_SubParsersAction   PackageRecordc                   ddl m} ddlm} ddlm}m}m}m} d} |d| d      }	 |d	      }
 | j                  	 d(||	|
d
|}|j                  ddd       |j                  dddd       |j                  ddddd|       |j                  ddd       |j                  dddt        t               |j                  ddt               |j                  dd dt               |j                  d!dt                ||       |j                  d"d#dt               |j                  d$dt               |j                  d%dt                ||        ||        ||       |j                  d&'       |S ))Nr   )dals)NULLr	   )add_parser_channelsadd_parser_jsonadd_parser_knownadd_parser_networkingzRSearch for packages and display associated information using the MatchSpec format.z	
        zD

        MatchSpec is a query language for conda packages.
        a  
        Examples:

        Search for a specific package named 'scikit-learn'::

            conda search scikit-learn

        Search for packages containing 'scikit' in the package name::

            conda search *scikit*

        Note that your shell may expand '*' before handing the command over to conda.
        Therefore, it is sometimes necessary to use single or double quotes around the query::

            conda search '*scikit'
            conda search "*scikit*"

        Search for packages for 64-bit Linux (by default, packages for your current
        platform are shown)::

            conda search numpy[subdir=linux-64]

        Search for a specific version of a package::

            conda search 'numpy>=1.12'

        Search for a package on a specific channel::

            conda search conda-forge::numpy
            conda search 'numpy[channel=conda-forge, subdir=osx-64]'
        )helpdescriptionepilogz--envs
store_truezSearch all of the current user's environments. If run as Administrator (on Windows) or UID 0 (on unix), search all known environments on the system.)actionr   z-iz--infoz0Provide detailed information about each package.z--subdirz
--platformstoresubdirzSearch the given subdir. Should be formatted like 'osx-64', 'linux-32', 'win-64', and so on. The default is to search the current platform.)r   destr   defaultz--skip-flexible-searchz7Do not perform flexible search if initial search fails.
match_spec*?)r    nargsr   r   z--canonicalz-fz--full-namez--names-onlyz-oz
--outdatedz--specz--reverse-dependencyzconda.cli.main_search.execute)func)search)
auxlib.ishr   common.constantsr   helpersr   r   r   r   
add_parseradd_argumentr
   r   set_defaults)sub_parserskwargsr   r   r   r   r   r   summaryr   r   ps               5lib/python3.12/site-packages/conda/cli/main_search.pyconfigure_parserr2      s   !'  cG			 		K 	 FD 				
 	A NNX   NN?	   NNN   NN F  
 NN    NN  
 NN	   NN  
 QNN	   NN  
 NN    !ANN7N8H    c                .   ddl m} ddlm} ddlm} ddlm} ddlm	} ddl
m} ddlm dd	lm dd
lm}  || j$                        }	|	j'                  d      r|	j'                  d      f}
n|j(                  }
| j*                  r |d|	       5   ||	      }t-        fd|D              }ddd       |j.                  r	 |       y| j0                  rD ]  }|d   D ]  }t3        |         yddz  g}D ]e  }|d   D ][  }|j5                  |j6                  dd|j8                  dd|j:                  dd|j<                  j6                  dd|d   d	       ] g t?        djA                  |             y |d      5  |	j'                  d      }|r|fn|jB                  }tE        |jG                  |	||
      fd      }ddd       ss| jH                  sg|	j'                  d      rV ||	d|	j6                   d       }|j.                  st?        d!|	 d"|        tE        |jG                  ||
      fd#      }|sPt-         ||jB                  | jJ                   |
d   | jL                  $            }dd%l'm(}  |tS        |	      f|      |j.                  r=tU        tV              }|D ]   }||j6                     j5                  |       "  ||       y| j0                  r|D ]  }t3        |        yd&d'z  g}|D ]T  }|j5                  |j6                  dd|j8                  dd|j:                  dd|j<                  j6                  d       V t?        djA                  |             y# 1 sw Y   xY w# 1 sw Y   xY w)(z
    Implements `conda search` commands.

    `conda search <spec>` searches channels for packages.
    `conda search <spec> --envs` searches environments for packages.

    r   )context)stdout_json)query_all_prefixes)calculate_channel_urls)
SubdirData)	MatchSpecr   )VersionOrder)get_spinnerr   zSearching environments for c              3  j   K   | ]*  \  }}|t        t        fd |D        d             d , yw)c              3  B   K   | ]  } j                   |        y wN)from_objects).0
prefix_recr   s     r1   	<genexpr>z$execute.<locals>.<genexpr>.<genexpr>   s&      2=J !; : :: F2=s   c                    | j                   S r?   )_pkey)precs    r1   <lambda>z#execute.<locals>.<genexpr>.<lambda>   s    TZZr3   key)locationpackage_recordsN)tuplesorted)rA   prefixprefix_recsr   s      r1   rC   zexecute.<locals>.<genexpr>   sI      # ,:'FK !'',2= !8( ,:s   03NrK   z# %-13s %15s %15s  %-20s %-20s)NameVersionBuildChannelLocation15 z>15z  20rJ   
r   zLoading channelschannelc                V    | j                    | j                        | j                  fS r?   nameversionbuildrecr;   s    r1   rG   zexecute.<locals>.<lambda>       SXX|CKK'@#))Lr3   rH   r\   r"   )r\   zNo match found for: z
. Search: c                V    | j                    | j                        | j                  fS r?   r[   r_   s    r1   rG   zexecute.<locals>.<lambda>   ra   r3   )channel_urlsprependplatform	use_local)PackagesNotFoundErrorz# %-18s %15s %15s  %-20s)rP   rQ   rR   rS   ),base.contextr5   
cli.commonr6   core.envs_managerr7   
core.indexr8   core.subdir_datar9   models.match_specr:   models.recordsr   models.versionr;   	reportersr<   r!   get_exact_valuesubdirsenvsrL   jsoninfopretty_recordappendr\   r]   r^   rY   printjoinchannelsrM   	query_allskip_flexible_searchoverride_channelsrf   
exceptionsrg   strr   list)argsparserr5   r6   r7   r8   r9   r:   r<   specrr   prefix_matchesordered_result	pkg_grouprF   builderspec_channelrc   matches	flex_specchannels_urlsrg   json_objmatchrecordr   r;   s                            @@r1   executer      sQ    '(63--.-'T__%DH%''13//yy6tf=>/5N" # ,:# N ?" <<': 9 YY+	%&78D!$' 9 ,6 - 1	G ,	%&78DNN !II LL JJ LL--%j1	 9 , $))G$%	'	(++I6*6G<L<L  |W=L
	 
) 4449M9Mf9Ud1TYYKq)9:	||(jDE  L'BL

 "$-- 222 ..	
 	7#SYL-@@||t$EUZZ ''. H6 3 
F&! 0 ' '
 FNN KKNNLLNN''  	dii !] ?>b 
)	(s   M=AN
=N
Nc                P    ddl m} ddlm}  fd}g j	                   j
                   d j                   d j                          j	                  dt        d         z          |dd	        |d
d
        |dd        |dd        |dd       t         dd      }|j	                  ddd ||              |dd        |dd        |dd        |dd        j                  rtt         j                  t        t        f      rTt        j                   j                  t         j"                        j%                  d      }j	                  ddd|        j&                  r'j	                  ddd | j&                                j(                  r'j	                  ddd | j(                               j	                  ddd j*                  r | j*                        nd       j	                  d       dj-                        S )z8
    Format a `PackageRecord` for `pretty_record()`
    r   )dashlist)human_bytesc                T    t        |d       }|j                  | dd|       y y )N12: )getattrrw   )display_name	attr_namevaluer   r   s      r1   	push_linez(_pretty_record_format.<locals>.push_line1  s-    	40NN,>? r3   rV   -r   z	file namefnr\   r]   r^   zbuild numberbuild_numbersizeNr   r   licenser   urlmd5z%Y-%m-%d %H:%M:%S %Z	timestamptrack_featuresconstraintsdependenciesz[]rX   )	common.ior   utilsr   rw   r\   r]   r^   lenr   r   
isinstanceintfloatr   fromtimestampr   utcstrftimer   
constrainsdependsry   )r   r   r   r   r   date_strr   s   `     @r1   _pretty_record_formatr   )  s   
 %#@
 GNNfkk]!FNN#31V\\NCDNN3WQZ()k4 ffi#gwnn-664(Dfk$.?@Ai#h!eUeUJv'7'7#uF))&*:*:HLLIRR"
 	k8<=+Xf6K6K-LM	
 mXf>O>O5PQRNNv~~8FNN34O	Q NN499Wr3   c                &     |t        |              y)zd
    Pretty prints a `PackageRecord`.

    :param record:  The `PackageRecord` object to print.
    N)r   )r   rx   s     r1   rv   rv   Y  s     


'(r3   N)r-   r   returnr   )r   r   r   r   r   r   )r   r   r   r   )r   r   r   None)__doc__
__future__r   argparser   collectionsr   r   r   typingr   r)   r
   r   r   r   rn   r   r2   r   r   rx   rv    r3   r1   <module>r      sH   
 #  # '   &EE.EPGT-` 05 )r3   