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/ubuntu/vllm_env/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   r1   r/   r   r   r   
<dictcomp>J   s    z5AzureKeyVaultMapping._load_remote.<locals>.<dictcomp>c                 S  s   i | ]}|  |qS r   )lowerr4   r   r   r   r5   L   s    )r   list_properties_of_secretsr'   
startswithr(   r   lenr&   )r+   secret_names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'   r8   r(   r   r9   r&   r6   r   r*   r   
get_secretvalueKeyError)r+   r<   new_keyr   r   r   __getitem__N   s   "



z AzureKeyVaultMapping.__getitem__intc                 C  s
   t | jS r.   )r9   r*   r+   r   r   r   __len__b   s   
zAzureKeyVaultMapping.__len__Iterator[str]c                 C  s   t | j S r.   )iterr*   keysrD   r   r   r   __iter__e   s   zAzureKeyVaultMapping.__iter__N)
r   r   r    r!   r"   r!   r#   r$   r   r   )r   r-   )r<   r=   r   r$   )r   rC   )r   rF   )	__name__
__module____qualname____annotations__r,   r)   rB   rE   rI   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 )(AzureKeyVaultSettingsSourcer=   _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_delimiterenv_ignore_emptyrW   rX   )r   rO   rP   _dash_to_underscorer'   superr,   )
r+   rQ   rS   rT   rU   r    r"   r#   rW   rX   	__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)	vault_urlrT   )r   r    r"   r#   )r   rO   rP   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   r1   xr   r   r   r3      s   $ zBAzureKeyVaultSettingsSource._extract_field_info.<locals>.<genexpr>c                 s  s.    | ]}|d  |d  dd|d fV  qdS )r   r   _-rf   N)replacerg   r   r   r   r3      s   , )r'   listr]   _extract_field_infor\   )r+   rc   rd   
field_infor^   r   r   rm      s   z/AzureKeyVaultSettingsSource._extract_field_infoc                 C  s   | j j d| jd| jdS )Nz(url=z, env_nested_delimiter=))r_   rJ   rO   rZ   rD   r   r   r   __repr__   s   z$AzureKeyVaultSettingsSource.__repr__)FNFNNN)rQ   rR   rS   r=   rT   r   rU   r!   r    rV   r"   r!   r#   r$   rW   r$   rX   rV   r   r   )r   r`   )rc   r   rd   r=   r   re   )r   r=   )	rJ   rK   rL   rM   r,   rb   rm   rp   __classcell__r   r   r^   r   rN   i   s   
 
	
rN   )r   r   )__doc__
__future__r   _annotationscollections.abcr   r   typingr   pydantic.alias_generatorsr   pydantic.fieldsr   envr	   r   r   r   r   r   r   pydantic_settings.mainr   r   r=   r   rN   __all__r   r   r   r   <module>   s&    
A6