+
    :1j                        R t ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^RI	H
t
HtHt ]'       d   ^ RIHt ^ RIHt ^RI	HtHt  ! R	 R
]
4      tR# )a  
Handles plugin configuration functionality including:
  - Managing plugin-specific settings
  - Processing configuration data from various sources
  - Dynamically adding and removing plugin settings
  - Providing a standardized interface for plugins to access their configurations
)annotations)defaultdict)Mapping)TYPE_CHECKING)ConfigurationEnvRawParameterParameterLoader)Path)Any)	ParameterRawParameterc                     a  ] tR t^t$ RtRtR]R&   RtR]R&   ]RR R ll4       t	]R R l4       t
R	 t]R
 R l4       t]R R l4       tR R ltR V 3R lltRtV ;t# )PluginConfiga  
Class used to hold settings for conda plugins.

The object created by this class should only be accessed via
:class:`conda.base.context.Context.plugins`.

When this class is updated via the :func:`add_plugin_setting` function it adds new setting
properties which can be accessed later via the context object.

We currently call that function in
:meth:`conda.plugins.manager.CondaPluginManager.load_settings`.
because ``CondaPluginManager`` has access to all registered plugin settings via the settings
plugin hook.
tuple[str, ...]parameter_namesparameter_names_and_aliasesc               $    V ^8  d   QhRRRRRR/# )   namestr	parameterr   aliasesr    )formats   "4lib/python3.14/site-packages/conda/plugins/config.py__annotate__PluginConfig.__annotate__2   s$     / //#,/7F/    c                    . V P                   OVN5V n         \        W#R7      pVP                  V4      p\        WV4       V P	                  4        R# )z3
Adds a setting to the :class:`PluginConfig` class
)r   N)r   r   	_set_namesetattr _set_parameter_names_and_aliases)clsr   r   r   loaders   &&&& r   add_plugin_settingPluginConfig.add_plugin_setting1   sN     ; 3 3:T: <%6" 	,,.r   c                   V ^8  d   QhRR/# )r   returnNoner   )r   s   "r   r   r   A   s     
& 
&4 
&r   c                    V P                    F  p \        W4       K  	  \        4       V n         R#   \         d     K2  i ; i)zD
Removes all attached settings from the :class:`PluginConfig` class
N)r   delattrAttributeErrortuple)r"   r   s   & r   remove_all_plugin_settings'PluginConfig.remove_all_plugin_settings@   sA    
 ''D" ( $g " s   1A A c                	     / V n         Wn        R # )N_cache__data)selfdatas   &&r   __init__PluginConfig.__init__M   s    
r   c                   V ^8  d   QhRR/# )r   r'   z#dict[Path, dict[str, RawParameter]]r   )r   s   "r   r   r   R   s      = r   c                   \        \        4      pV P                  P                  4        F  w  r#VP	                  R4      ;p'       dP   VP                  R4      p\        V\        4      '       g   KG  VP                  4        F  w  rgWqV,          V&   K  	  Km  V\        P                  8X  g   K  VP                  4        F<  w  rVP                  R4      '       g   K  VP                  R4      w  rWqV,          V&   K>  	  K  	  V# )z
This is used to move everything under the key "plugins" from the provided dictionary
to the top level of the returned dictionary. The returned dictionary is then passed
to :class:`PluginConfig`.
pluginsNplugins_)r   dictr2   itemsgetvalue
isinstancer   r   source
startswithsplit)
r3   new_datar@   configplugin_dataplugin_data_value
param_name	raw_paramenv_var_s
   &         r   raw_dataPluginConfig.raw_dataQ   s     t$"jj..0NF$jj33{3$/$5$5d$;!!"3W==->-D-D-F)J3<V$Z0 .G ?111*0,,.&G))*55(/j(A7@(4 +9 1  r   c                   V ^8  d   QhRR/# )r   r'   zdict[str, tuple[str, ...]]r   )r   s   "r   r   r   m   s     Q Q8 Qr   c                	    R V P                   /# )z'Additional settings provided by plugins)r   )r3   s   &r   category_mapPluginConfig.category_mapl   s    94;O;OPPr   c                   V ^8  d   QhRR/# )r   r'   zdict[str, str]r   )r   s   "r   r   r   p   s     
 
. 
r   c                	    ^RI Hp VP                  P                  4       P	                  4        UUu/ uF  w  r#W#P
                  bK  	  upp# u uppi )r   )context)base.contextrS   plugin_managerget_settingsr<   description)r3   rS   r   settings   &   r   get_descriptionsPluginConfig.get_descriptionsp   sO    * ")!7!7!D!D!F!L!L!N
!N %%%!N
 	
 
s   Ac                   V ^8  d   QhRR/# )r   r'   zdict[str, Any]r   )r   s   "r   r   r   x   s     
 
N 
r   c                D   < \         SV `  V4      pRVR,           2VR&   V# )z
Returns the description of a parameter.

We add to this method in order to change the "name" key that is returned to prepend "plugins."
to it.
zplugins.r   )superdescribe_parameter)r3   parameter_namerW   	__class__s   && r   r^   PluginConfig.describe_parameterx   s1     g0@ (V)<(=>Fr   r0   r   )r   )__name__
__module____qualname____firstlineno____doc__r   __annotations__r   classmethodr$   r-   r5   propertyrK   rO   rY   r^   __static_attributes____classcell__)r`   s   @r   r   r      s     (*O_)355/ / 
& 
&  4 Q Q

 
r   r   N)rf   
__future__r   collectionsr   collections.abcr   typingr   common.configurationr   r   r   pathlibr	   r
   r   r   r   r   r   r   <module>rr      s>    # # #    >d= dr   