o
    i                     @   s   d dl Z d dlZd dlmZ d dlmZ d dlmZ d dlm	Z	m
Z
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 ddlmZ e	rXddlmZ ddlmZ dZG dd deZde
de
fddZdS )    N)reduce)iglob)Path)TYPE_CHECKINGAnyLiteralOptional   )SettingsError)path_type_label   )PydanticBaseSettingsSource)parse_env_vars   )EnvSettingsSource)SecretsSettingsSource)BaseSettings)PathTypei   c                       s   e Zd Z									ddeeB ded ded dB dedB dedB d	e	dB d
e	dB dedB dedB de	dB ddf fddZ
deddfddZededee	e	f fddZde	fddZ  ZS )NestedSecretsSettingsSourceNfile_secret_settingssecrets_dirr   secrets_dir_missingokwarnerrorsecrets_dir_max_sizesecrets_case_sensitivesecrets_prefixsecrets_nested_delimitersecrets_nested_subdircase_sensitive
env_prefixreturnc              	      s  t |d|}|j}tt |dd ||d _t||dd _ jdvr.td j t||dt _t||d|	|d	d
 _	t||d|
|dd _
t||d|d _t||dd
 _ jr|sw|dr{tdtj _ jd u rg }nt jttfr jg}nt j}dd |D  _ jD ]} | qt j| j	 j
 jd
dd d d  _t jsi  _d S tdd  fdd jD }t| j	 j j _d S )Nsettings_clsr   r   r   r   z#invalid secrets_dir_missing value: r   r   r!   Fr   r"    r   env_nested_delimiterr    zQOptions secrets_nested_delimiter and secrets_nested_subdir are mutually exclusivec                 S   s   g | ]
}t |  qS  )r   
expanduserresolve.0pr'   r'   x/var/www/html/karishye-ai-python/venv/lib/python3.10/site-packages/pydantic_settings/sources/providers/nested_secrets.py
<listcomp>i   s    z8NestedSecretsSettingsSource.__init__.<locals>.<listcomp>T)r!   r"   r&   env_ignore_emptyenv_parse_enumsenv_parse_none_strc                 S   s   t g |  | R S N)dictitems)d1d2r'   r'   r-   <lambda>~   s    z6NestedSecretsSettingsSource.__init__.<locals>.<lambda>c                 3   s    | ]}  |V  qd S r2   )load_secretsr*   selfr'   r-   	<genexpr>   s    z7NestedSecretsSettingsSource.__init__.<locals>.<genexpr>)getattrmodel_configfirst_not_nonegetr   r   r
   SECRETS_DIR_MAX_SIZEr   r!   r   r   r    ossep
isinstancer   strlistsecrets_pathsvalidate_secrets_pathsuper__init__r1   lenenv_varsr   r   r/   )r:   r   r   r   r   r   r   r   r    r!   r"   r$   confpathspathsecrets	__class__r9   r-   rI      s   

	



	


z$NestedSecretsSettingsSource.__init__rN   c                 C   s   |  s,| jdkrd S | jdkrtjd| ddd d S | jdkr*td| dt| s9tdt| td	d
 |	dD }|| j
krStd| j
 dd S )Nr   r   zdirectory "z" does not existr   )
stacklevelr   z.secrets_dir must reference a directory, not a c                 s   s"    | ]}|  r| jV  qd S r2   )is_filestatst_size)r+   fr'   r'   r-   r;      s     zDNestedSecretsSettingsSource.validate_secrets_path.<locals>.<genexpr>z**/*zsecrets_dir size is above z bytes)existsr   warningsr   r
   
ValueErroris_dirr   sumglobr   )r:   rN   secrets_dir_sizer'   r'   r-   rG      s   



z1NestedSecretsSettingsSource.validate_secrets_pathc                    s&    fddt tt  dddD S )Nc                    s,   i | ]}|  rt| |  qS r'   )rS   rD   relative_to	read_textstripr*   rN   r'   r-   
<dictcomp>   s    z<NestedSecretsSettingsSource.load_secrets.<locals>.<dictcomp>z/**/*T)	recursive)mapr   r   ra   r'   ra   r-   r8      s   
z(NestedSecretsSettingsSource.load_secretsc                 C   s   d| j dS )Nz(NestedSecretsSettingsSource(secrets_dir=))r   r9   r'   r'   r-   __repr__   s   z$NestedSecretsSettingsSource.__repr__)	NNNNNNNNN)__name__
__module____qualname__r   r   r   r   intboolrD   rI   r   rG   staticmethodr3   r8   rf   __classcell__r'   r'   rP   r-   r      sJ    
	pr   objsr#   c                  G   s   t tdd | d S )Nc                 S   s   | d uS r2   r'   )or'   r'   r-   r7      s    z first_not_none.<locals>.<lambda>)nextfilter)rn   r'   r'   r-   r>      s   r>   )rA   rX   	functoolsr   r\   r   pathlibr   typingr   r   r   r   
exceptionsr
   utilsr   baser   r   envr   rO   r   mainr   sourcesr   r@   r   r>   r'   r'   r'   r-   <module>   s&     