o
    _�¿j9  ã                   @  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 d	d
lmZ erId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é   )Ú	InitStateé   )Ú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   úd/home/dinkstrade/pdmp/venv/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]Ú_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   ©r3   r1   r   r   r   Ú
<dictcomp>K   s    z5AzureKeyVaultMapping._load_remote.<locals>.<dictcomp>c                 S  s   i | ]}|  ¡ |“qS r   )Úlowerr6   r   r   r   r7   M   s    )r   Úlist_properties_of_secretsr)   Ú
startswithr*   r   Úlenr(   )r-   Úsecret_namesÚname_mapr1   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 r0   )r)   r:   r*   r   r;   r(   r8   r   r,   r   Ú
get_secretÚvalueÚKeyError)r-   r>   Únew_keyr   r   r   Ú__getitem__O   s   "



z AzureKeyVaultMapping.__getitem__Úintc                 C  s
   t | jƒS r0   )r;   r,   ©r-   r   r   r   Ú__len__c   s   
zAzureKeyVaultMapping.__len__úIterator[str]c                 C  s   t | j ¡ ƒS r0   )Úiterr,   ÚkeysrF   r   r   r   Ú__iter__f   s   zAzureKeyVaultMapping.__iter__N)
r!   r   r"   r#   r$   r#   r%   r&   r   r   )r   r/   )r>   r?   r   r&   )r   rE   )r   rH   )	Ú__name__Ú
__module__Ú__qualname__Ú__annotations__r.   r+   rD   rG   rK   r   r   r   r   r   )   s   
 



r   c                      sb   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 )*ÚAzureKeyVaultSettingsSourcer?   Ú_urlr   Ú_credentialFNÚsettings_clsútype[BaseSettings]ÚurlÚ
credentialÚdash_to_underscorer#   r"   úbool | Noner$   r%   r&   Úenv_parse_none_strÚenv_parse_enumsÚ_init_stateúInitState | Noner   r   c              
     sN   t ƒ  || _|| _|| _|| _tƒ j||rdn|||rdndd||	|
d� d S )NTÚ__z--F)r"   r%   Úenv_nested_delimiterÚenv_ignore_emptyrY   rZ   r[   )r   rQ   rR   Ú_dash_to_underscorer)   Úsuperr.   )r-   rS   rU   rV   rW   r"   r$   r%   rY   rZ   r[   ©Ú	__class__r   r   r.   n   s   


øz$AzureKeyVaultSettingsSource.__init__úMapping[str, str | None]c                 C  s&   t | j| jd�}t|| j| j| jd�S )N)Ú	vault_urlrV   )r!   r"   r$   r%   )r   rQ   rR   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                   sN   | j rdd„ tƒ  ||¡D ƒ}|S | jr dd„ tƒ  ||¡D ƒS tƒ  ||¡S )Nc                 S  s"   g | ]}|d  |d |d f‘qS )r   r
   r   r   ©r3   Úxr   r   r   Ú
<listcomp>–   s   " zCAzureKeyVaultSettingsSource._extract_field_info.<locals>.<listcomp>c                 S  s*   g | ]}|d  |d   dd¡|d f‘qS )r   r
   Ú_ú-r   )Úreplacerj   r   r   r   rl   š   s   * )r)   ra   Ú_extract_field_infor`   )r-   rg   rh   Ú
field_inforb   r   r   rp   ”   s   z/AzureKeyVaultSettingsSource._extract_field_infoc                 C  s   | j j› d| j›d| j›d�S )Nz(url=z, env_nested_delimiter=ú))rc   rL   rQ   r^   rF   r   r   r   Ú__repr__ž   s   z$AzureKeyVaultSettingsSource.__repr__)FNFNNNN)rS   rT   rU   r?   rV   r   rW   r#   r"   rX   r$   r#   r%   r&   rY   r&   rZ   rX   r[   r\   r   r   )r   rd   )rg   r   rh   r?   r   ri   )r   r?   )	rL   rM   rN   rO   r.   rf   rp   rs   Ú__classcell__r   r   rb   r   rP   j   s   
 õ
	
rP   )r   r   )Ú__doc__Ú
__future__r   Ú_annotationsÚcollections.abcr   r   Útypingr   Úpydantic.alias_generatorsr   Úpydantic.fieldsr   Úutilsr	   Úenvr   r   r   r   r   r   r   Úpydantic_settings.mainr   r   r?   r   rP   Ú__all__r   r   r   r   Ú<module>   s(    
A8