o
    i                     @  s   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rCd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dZG dd deeedB f ZG dd deZddgZdS )z Azure Key Vault settings source.    )annotations)IteratorMapping)TYPE_CHECKING)to_snake)	FieldInfo   )EnvSettingsSourceTokenCredentialResourceNotFoundErrorSecretClient)BaseSettingsNreturnNonec               
   C  sN   zddl ma ddlma ddlma W d S  ty& }  ztd| d } ~ w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)e r   `/home/app/Keep/.python/lib/python3.10/site-packages/pydantic_settings/sources/providers/azure.pyimport_azure_key_vault   s   r   c                   @  sX   e Zd ZU ded< ded< ded< dddZd ddZd!ddZd"ddZd#ddZdS )$AzureKeyVaultMappingzdict[str, str | None]_loaded_secretsr   _secret_clientz	list[str]Z_secret_namessecret_clientcase_sensitiveboolsnake_case_conversion
env_prefix
str | Noner   r   c                 C  s4   i | _ || _|| _|| _|r|nd| _|  | _d S )N )r   r   _case_sensitive_snake_case_conversion_env_prefix_load_remote_secret_map)selfr   r   r!   r"   r   r   r   __init__-   s   zAzureKeyVaultMapping.__init__dict[str, str]c                 C  s   dd | j  D }| jr5i }|D ]!}|| jr,||| j t|t| jd   < q||t|< q|S | jr?dd |D S dd |D S )Nc                 s  s"    | ]}|j r|jr|j V  qd S N)nameenabled).0secretr   r   r   	<genexpr><   s    
z4AzureKeyVaultMapping._load_remote.<locals>.<genexpr>c                 S  s   i | ]}||qS r   r   r0   r.   r   r   r   
<dictcomp>J   s    z5AzureKeyVaultMapping._load_remote.<locals>.<dictcomp>c                 S  s   i | ]}|  |qS r   )lowerr3   r   r   r   r4   L   s    )r   Zlist_properties_of_secretsr&   
startswithr'   r   lenr%   )r*   Zsecret_namesZname_mapr.   r   r   r   r(   ;   s   &z!AzureKeyVaultMapping._load_remotekeystrc                 C  s   |}| j r!|| jr| j t|t| jd   }nt|}n| js(| }|| jvrD|| jv r@| j	
| j| j| j|< nt|| j| S r-   )r&   r6   r'   r   r7   r%   r5   r   r)   r   Z
get_secretvalueKeyError)r*   r8   Znew_keyr   r   r   __getitem__N   s   "



z AzureKeyVaultMapping.__getitem__intc                 C  s
   t | jS r-   )r7   r)   r*   r   r   r   __len__b   s   
zAzureKeyVaultMapping.__len__Iterator[str]c                 C  s   t | j S r-   )iterr)   keysr>   r   r   r   __iter__e   s   zAzureKeyVaultMapping.__iter__N)
r   r   r   r    r!   r    r"   r#   r   r   )r   r,   )r8   r9   r   r#   )r   r=   )r   r@   )	__name__
__module____qualname____annotations__r+   r(   r<   r?   rC   r   r   r   r   r   (   s   
 



r   c                      s`   e Zd ZU ded< ded< 						d#d$ fddZd%ddZd& fdd Zd'd!d"Z  ZS )(AzureKeyVaultSettingsSourcer9   _urlr   _credentialFNsettings_clstype[BaseSettings]url
credentialdash_to_underscorer    r   bool | Noner!   r"   r#   env_parse_none_strenv_parse_enumsr   r   c
           
   	     sL   t   || _|| _|| _|| _t j||rdn|||rdndd||	d d S )NT__z--F)r   r"   env_nested_delimiterZenv_ignore_emptyrQ   rR   )r   rI   rJ   _dash_to_underscorer&   superr+   )
r*   rK   rM   rN   rO   r   r!   r"   rQ   rR   	__class__r   r   r+   m   s   


z$AzureKeyVaultSettingsSource.__init__Mapping[str, str | None]c                 C  s&   t | j| jd}t|| j| j| jdS )N)Z	vault_urlrN   )r   r   r!   r"   )r   rI   rJ   r   r   r&   r"   )r*   r   r   r   r   _load_env_vars   s   z*AzureKeyVaultSettingsSource._load_env_varsfieldr   
field_namelist[tuple[str, str, bool]]c                   sV   | j rtdd t ||D }|S | jr$tdd t ||D S t ||S )Nc                 s  s&    | ]}|d  |d |d fV  qdS )r   r      Nr   r0   xr   r   r   r2      s   $ zBAzureKeyVaultSettingsSource._extract_field_info.<locals>.<genexpr>c                 s  s.    | ]}|d  |d  dd|d fV  qdS )r   r   _-r^   N)replacer_   r   r   r   r2      s   , )r&   listrV   _extract_field_inforU   )r*   r[   r\   Z
field_inforW   r   r   re      s   z/AzureKeyVaultSettingsSource._extract_field_infoc                 C  s   | j j d| jd| jdS )Nz(url=z, env_nested_delimiter=))rX   rD   rI   rT   r>   r   r   r   __repr__   s   z$AzureKeyVaultSettingsSource.__repr__)FNFNNN)rK   rL   rM   r9   rN   r   rO   r    r   rP   r!   r    r"   r#   rQ   r#   rR   rP   r   r   )r   rY   )r[   r   r\   r9   r   r]   )r   r9   )	rD   rE   rF   rG   r+   rZ   re   rg   __classcell__r   r   rW   r   rH   i   s   
 
	
rH   )r   r   )__doc__
__future__r   Z_annotationscollections.abcr   r   typingr   Zpydantic.alias_generatorsr   Zpydantic.fieldsr   envr	   r   r   r   r   r   r   Zpydantic_settings.mainr   r   r9   r   rH   __all__r   r   r   r   <module>   s&    
A6