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'   i/home/app/Keep/.python/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_emptyZenv_parse_enumsenv_parse_none_strc                 S   s   t g |  | R S N)dictitems)Zd1Zd2r'   r'   r-   <lambda>~   s    z6NestedSecretsSettingsSource.__init__.<locals>.<lambda>c                 3   s    | ]}  |V  qd S r1   )load_secretsr*   selfr'   r-   	<genexpr>   s    z7NestedSecretsSettingsSource.__init__.<locals>.<genexpr>)getattrZmodel_configfirst_not_nonegetr   r   r
   SECRETS_DIR_MAX_SIZEr   r!   r   r   r    ossep
isinstancer   strlistZsecrets_pathsvalidate_secrets_pathsuper__init__r0   lenZenv_varsr   r   r/   )r7   r   r   r   r   r   r   r   r    r!   r"   r$   confpathspathsecrets	__class__r6   r-   rD      s   

	



	


z$NestedSecretsSettingsSource.__init__rH   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 r1   )is_filestatst_size)r+   fr'   r'   r-   r8      s     zDNestedSecretsSettingsSource.validate_secrets_path.<locals>.<genexpr>z**/*zsecrets_dir size is above z bytes)existsr   warningsr   r
   
ValueErroris_dirr   sumglobr   )r7   rH   Zsecrets_dir_sizer'   r'   r-   rB      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'   )rM   r@   relative_to	read_textstripr*   rH   r'   r-   
<dictcomp>   s    z<NestedSecretsSettingsSource.load_secrets.<locals>.<dictcomp>z/**/*T)	recursive)mapr   r   rZ   r'   rZ   r-   r5      s   
z(NestedSecretsSettingsSource.load_secretsc                 C   s   d| j dS )Nz(NestedSecretsSettingsSource(secrets_dir=))r   r6   r'   r'   r-   __repr__   s   z$NestedSecretsSettingsSource.__repr__)	NNNNNNNNN)__name__
__module____qualname__r   r   r   r   intboolr@   rD   r   rB   staticmethodr2   r5   r_   __classcell__r'   r'   rJ   r-   r      sJ    
	pr   objsr#   c                  G   s   t tdd | d S )Nc                 S   s   | d uS r1   r'   )or'   r'   r-   r4      s    z first_not_none.<locals>.<lambda>)nextfilter)rg   r'   r'   r-   r:      s   r:   )r=   rR   	functoolsr   rV   r   pathlibr   typingr   r   r   r   
exceptionsr
   utilsr   baser   r   envr   rI   r   mainr   sourcesr   r<   r   r:   r'   r'   r'   r-   <module>   s&     