
    bi                        d Z ddlmZ ddlmZ ddlmZmZ ddl	m
Z
mZ ddlmZmZ erddladd	lmZ ndadd
Z G d dee
      ZdgZy)zYAML file settings source.    )annotations)Path)TYPE_CHECKINGAny   )ConfigFileSourceMixinInitSettingsSource)DEFAULT_PATHPathTypeN)BaseSettingsc                 V    t         y 	 dd l a y # t        $ r} t        d      | d } ~ ww xY w)Nr   zBPyYAML is not installed, run `pip install pydantic-settings[yaml]`)yamlImportError)es    p/home/jang/Projects/ai-researcher/.venv/lib/python3.12/site-packages/pydantic_settings/sources/providers/yaml.pyimport_yamlr      s5    g g^_effgs    	(#(c                  j     e Zd ZdZedddf	 	 	 	 	 	 	 	 	 d fdZd	dZ	 d
	 	 	 	 	 	 	 ddZddZ xZ	S )YamlConfigSettingsSourcez>
    A source class that loads variables from a yaml file
    NFc                   |t         k7  r|n|j                  j                  d      | _        ||n|j                  j                  d      | _        ||n|j                  j                  d      | _        | j                  | j                  |      | _        | j
                  6| j                  | j                  | j
                  | j
                        | _        t        | )  || j                         y )N	yaml_fileyaml_file_encodingyaml_config_section)
deep_merge)r
   model_configgetyaml_file_pathr   r   _read_files	yaml_data_traverse_nested_sectionsuper__init__)selfsettings_clsr   r   r   r   	__class__s         r   r!   z!YamlConfigSettingsSource.__init__%   s     ,5+Di,JcJcJgJghsJt "- **../CD 	 #.  **../DE 	 
 ))$*=*=*)U##/!:: 8 8$:R:RDN 	t~~6    c                    t                |j                  | j                        5 }t        j                  |      xs i cd d d        S # 1 sw Y   y xY w)N)encoding)r   openr   r   	safe_load)r"   	file_pathr   s      r   
_read_filez#YamlConfigSettingsSource._read_file@   sC    ^^T%<%<^= 	3>>),2	3 	3 	3s   A

Ac           	     D   ||}|st        d      	 ||   S # t        $ r Y n(t        $ r t        d| d| j                   d      w xY wd|vrt        d| d| j                         |j	                  d      }t        t        |      d	z
  d
d      D ]p  }dj                  |d|       }dj                  ||d       }||v s0	 | j                  ||   ||      c S # t        $ r t        d| d| j                   d      w xY w t        d| d| j                         )a  
        Traverse nested YAML sections using dot-notation path.

        This method tries to match the longest possible key first before splitting on dots,
        allowing access to YAML keys that contain literal dot characters.

        For example, with section_path="a.b.c", it will try:
        1. "a.b.c" as a literal key
        2. "a.b" as a key, then traverse to "c"
        3. "a" as a key, then traverse to "b.c"
        4. "a" as a key, then "b" as a key, then "c" as a key
        Nz#yaml_config_section cannot be emptyzyaml_config_section path "z" cannot be traversed in z,. An intermediate value is not a dictionary..zyaml_config_section key "z" not found in    r   )	
ValueErrorKeyError	TypeErrorr   splitrangelenjoinr   )r"   datasection_pathoriginal_pathpartsiprefixsuffixs           r   r   z1YamlConfigSettingsSource._traverse_nested_sectionE   s      (M BCC	%% 	 	,]O;TUYUhUhTi j= > 	 l"6}o_UYUhUhTijkk ""3's5zA~q"- 	AXXeBQi(FXXeABi(F~88fv}]]  #4]OC\]a]p]p\q rE F 	 2=/QUQdQdPefggs    	A%AC&Dc                N    | j                   j                   d| j                   dS )Nz(yaml_file=))r$   __name__r   )r"   s    r   __repr__z!YamlConfigSettingsSource.__repr__~   s'    ..))*+d6I6I5J!LLr%   )
r#   ztype[BaseSettings]r   zPathType | Noner   
str | Noner   rB   r   bool)r*   r   returndict[str, Any])N)r7   rE   r8   strr9   rB   rD   rE   )rD   rF   )
r@   
__module____qualname____doc__r
   r!   r+   r   rA   __classcell__)r$   s   @r   r   r       s     &2)-*. 7(7 #7 '	7
 (7 763 TX7h"7h257hFP7h	7hrMr%   r   )rD   None)rI   
__future__r   _annotationspathlibr   typingr   r   baser   r	   typesr
   r   r   pydantic_settings.mainr   r   r   __all__ r%   r   <module>rU      sN      2 
 = *3Dg_M13H _MD &
&r%   