
    bi                        d 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 erdd	lma dd
lma ddlma ddlmZ ndadadaddZ G d deeedz  f         Z G d de      ZddgZy)z Azure Key Vault settings source.    )annotations)IteratorMapping)TYPE_CHECKING)to_snake)	FieldInfo   )EnvSettingsSourceTokenCredentialResourceNotFoundErrorSecretClient)BaseSettingsNc                 d    	 ddl ma ddlma ddlma y # t        $ r} t        d      | d } ~ ww xY w)Nr   r   r   r   zdAzure Key Vault dependencies are not installed, run `pip install pydantic-settings[azure-key-vault]`)azure.core.credentialsr   azure.core.exceptionsr   azure.keyvault.secretsr   ImportError)es    q/home/jang/Projects/ai-researcher/.venv/lib/python3.12/site-packages/pydantic_settings/sources/providers/azure.pyimport_azure_key_vaultr      s3    
:?7 r
	s    	/*/c                  h    e Zd ZU ded<   ded<   ded<   	 	 	 	 	 	 	 	 	 	 ddZddZdd	Zdd
ZddZy)AzureKeyVaultMappingzdict[str, str | None]_loaded_secretsr   _secret_clientz	list[str]_secret_namesc                |    i | _         || _        || _        || _        |r|nd| _        | j                         | _        y )N )r   r   _case_sensitive_snake_case_conversion_env_prefix_load_remote_secret_map)selfsecret_clientcase_sensitivesnake_case_conversion
env_prefixs        r   __init__zAzureKeyVaultMapping.__init__-   sA      "+-&;#)3:+/+<+<+>    c           
        d | j                   j                         D        }| j                  rgi }|D ]^  }|j                  | j                        r3||| j                   t        |t        | j                        d         <   Q||t        |      <   ` |S | j                  r|D ci c]  }|| c}S |D ci c]  }|j                         | c}S c c}w c c}w )Nc              3  h   K   | ]*  }|j                   s|j                  s|j                    , y wN)nameenabled).0secrets     r   	<genexpr>z4AzureKeyVaultMapping._load_remote.<locals>.<genexpr><   s+      '
"Z`ZeZejpjxjxFKK'
s   222)	r   list_properties_of_secretsr"   
startswithr#   r   lenr!   lower)r&   secret_namesname_mapr0   s       r   r$   z!AzureKeyVaultMapping._load_remote;   s    '
&*&9&9&T&T&V'
 &&')H$ 4??4#3#34_cH 0 01(4DDTDT@U@W;X2Y1Z[\/3HXd^,	4
 O+784D$J88/;<t

d"<< 9<s   %
C6Cc                   |}| j                   rW|j                  | j                        r0| j                   t        |t	        | j                        d         }n(t        |      }n| j
                  s|j                         }|| j                  vrY|| j                  v r@| j                  j                  | j                  |         j                  | j                  |<   nt        |      | j                  |   S r/   )r"   r6   r#   r   r7   r!   r8   r   r%   r   
get_secretvalueKeyError)r&   keynew_keys      r   __getitem__z AzureKeyVaultMapping.__getitem__N   s    &&~~d../!--.xC@P@P<Q<S8T/U.VW"3-%%iikG$...$***040C0C0N0NtO_O_`gOh0i0o0o$$W-sm###G,,r,   c                ,    t        | j                        S r/   )r7   r%   r&   s    r   __len__zAzureKeyVaultMapping.__len__b   s    4##$$r,   c                H    t        | j                  j                               S r/   )iterr%   keysrC   s    r   __iter__zAzureKeyVaultMapping.__iter__e   s    D$$))+,,r,   N)
r'   r   r(   boolr)   rI   r*   
str | NonereturnNone)rK   zdict[str, str])r?   strrK   rJ   )rK   int)rK   zIterator[str])	__name__
__module____qualname____annotations__r+   r$   rA   rD   rH    r,   r   r   r   (   s]    **  ?#? ?  $	?
 ? 
?=&-(%-r,   r   c                       e Zd ZU ded<   ded<   	 	 	 	 	 	 d		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d
 fdZddZd fdZddZ xZS )AzureKeyVaultSettingsSourcerM   _urlr   _credentialc
           	         t                || _        || _        || _        || _        t
        
|   ||rdn|||rdndd||	       y )NT__z--F)r(   r*   env_nested_delimiterenv_ignore_emptyenv_parse_none_strenv_parse_enums)r   rV   rW   _dash_to_underscorer"   superr+   )r&   settings_clsurl
credentialdash_to_underscorer(   r)   r*   r\   r]   	__class__s             r   r+   z$AzureKeyVaultSettingsSource.__init__m   sY     	 	%#5 &;##84n!)>D"1+ 	 	
r,   c                    t        | j                  | j                        }t        || j                  | j
                  | j                        S )N)	vault_urlrb   )r'   r(   r)   r*   )r   rV   rW   r   r(   r"   r*   )r&   r'   s     r   _load_env_varsz*AzureKeyVaultSettingsSource._load_env_vars   sA    $tyyTEUEUV#'.."&"="=	
 	
r,   c                    | j                   r"t        d t        |   ||      D              }|S | j                  r t        d t        |   ||      D              S t        |   ||      S )Nc              3  8   K   | ]  }|d    |d   |d   f  yw)r   r	      NrS   r2   xs     r   r4   zBAzureKeyVaultSettingsSource._extract_field_info.<locals>.<genexpr>   s#     iQqtQqT1Q40is   c              3  X   K   | ]"  }|d    |d   j                  dd      |d   f $ yw)r   r	   _-rj   N)replacerk   s     r   r4   zBAzureKeyVaultSettingsSource._extract_field_info.<locals>.<genexpr>   s.     u1qt||C5qt<us   (*)r"   listr_   _extract_field_infor^   )r&   field
field_name
field_inford   s       r   rr   z/AzureKeyVaultSettingsSource._extract_field_info   sj    &&i%':UV[]g:hiiJ##uegFabgisFtuuuw*5*==r,   c                h    | j                   j                   d| j                  d| j                  dS )Nz(url=z, env_nested_delimiter=))rd   rO   rV   rZ   rC   s    r   __repr__z$AzureKeyVaultSettingsSource.__repr__   s4    ..))*%		}<STXTmTmSppqrrr,   )FNFNNN)r`   ztype[BaseSettings]ra   rM   rb   r   rc   rI   r(   bool | Noner)   rI   r*   rJ   r\   rJ   r]   ry   rK   rL   )rK   zMapping[str, str | None])rs   r   rt   rM   rK   zlist[tuple[str, str, bool]])rK   rM   )	rO   rP   rQ   rR   r+   rg   rr   rx   __classcell__)rd   s   @r   rU   rU   i   s    
I   $)&*&+!%)-'+
(
 
 $	

 !
 $
  $
 
 '
 %
 

6
>sr,   rU   )rK   rL   )__doc__
__future__r   _annotationscollections.abcr   r   typingr   pydantic.alias_generatorsr   pydantic.fieldsr   envr
   r   r   r   r   r   r   pydantic_settings.mainr   r   rM   r   rU   __all__rS   r,   r   <module>r      su    & 2 -   . % "6;33O L>-73d
?3 >-B3s"3 3sl "#@
Ar,   