
    	h                        d Z ddlmZ ddlZddl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	rddlmZ  G d de          ZdS )zSecrets file settings source.    )annotationsN)Path)TYPE_CHECKINGAny)	FieldInfo)path_type_label   )SettingsError   )PydanticBaseEnvSettingsSource)PathType)BaseSettingsc                  f     e Zd ZdZ	 	 	 	 	 	 d d! fdZd" fdZed#d            Zd$dZd%dZ	 xZ
S )&SecretsSettingsSourcezE
    Source class for loading settings values from secret files.
    Nsettings_clstype[BaseSettings]secrets_dirPathType | Nonecase_sensitivebool | None
env_prefix
str | Noneenv_ignore_emptyenv_parse_none_strenv_parse_enumsreturnNonec                    t                                          ||||||           ||n| j                            d          | _        d S )Nr   )super__init__configgetr   )	selfr   r   r   r   r   r   r   	__class__s	           x/var/www/html/web-builder-api.evdpl.com/venv/lib/python3.11/site-packages/pydantic_settings/sources/providers/secrets.pyr    zSecretsSettingsSource.__init__   sY     	.*6FHZ\k	
 	
 	
 +6*A;;t{WdGeGe    dict[str, Any]c                (   i }| j         |S t          | j         t          t          j        f          r| j         gn| j         }d |D             }g | _        |D ]I}|                                st          j        d| d           /| j        	                    |           Jt          | j                  s|S | j        D ]5}|                                st          dt          |                     6t                                                      S )z4
        Build fields from "secrets" files.
        Nc                P    g | ]#}t          |                                          $S  )r   
expanduser).0ps     r%   
<listcomp>z2SecretsSettingsSource.__call__.<locals>.<listcomp>7   s*    DDD!a++--DDDr&   zdirectory "z" does not existz.secrets_dir must reference a directory, not a )r   
isinstancestrosPathLikesecrets_pathsexistswarningswarnappendlenis_dirr
   r   r   __call__)r#   secretssecrets_dirsr3   pathr$   s        r%   r:   zSecretsSettingsSource.__call__-   s6    *,#N-78H3PRP[J\-]-]s())cgcsDD|DDD! 	0 	0D;;== 0BDBBBCCCC"))$////4%&& 	N& 	n 	nD;;== n#$lUdeiUjUj$l$lmmmn ww!!!r&   dir_pathr   	file_namer0   boolPath | Nonec                    |                                 D ]F}|j        |k    r|c S |s3|j                                        |                                k    r|c S GdS )af  
        Find a file within path's directory matching filename, optionally ignoring case.

        Args:
            dir_path: Directory path.
            file_name: File name.
            case_sensitive: Whether to search for file name case sensitively.

        Returns:
            Whether file path or `None` if file does not exist in directory.
        N)iterdirnamelower)clsr>   r?   r   fs        r%   find_case_pathz$SecretsSettingsSource.find_case_pathI   sj     !!## 	 	Av""# )//:K:K(K(Ktr&   fieldr   
field_nametuple[Any, str, bool]c           
        |                      ||          D ]\  }}}t          | j                  D ]}|                     ||| j                  }|s!|                                r-|                                                                ||fc c S t          j	        d| dt          |           dd           d||fS )al  
        Gets the value for field from secret file and a flag to determine whether value is complex.

        Args:
            field: The field.
            field_name: The field name.

        Returns:
            A tuple that contains the value (`None` if the file does not exist), key, and
                a flag to determine whether value is complex.
        zattempted to load secret file "z" but found a z	 instead.   )
stacklevelN)_extract_field_inforeversedr3   rH   r   is_file	read_textstripr5   r6   r   )r#   rI   rJ   	field_keyenv_namevalue_is_complexsecrets_pathr=   s           r%   get_field_valuez%SecretsSettingsSource.get_field_value]   s     6:5M5MeU_5`5` 	 	1Ix!1 (); < <  **<4CVWW <<>> >>++1133Y@PPPPPPPMn$nno^bNcNcnnn#$     Y 000r&   c                0    | j         j         d| j        dS )Nz(secrets_dir=))r$   __name__r   )r#   s    r%   __repr__zSecretsSettingsSource.__repr__|   s!    .)MM8HMMMMr&   )NNNNNN)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r'   )r>   r   r?   r0   r   r@   r   rA   )rI   r   rJ   r0   r   rK   )r   r0   )r[   
__module____qualname____doc__r    r:   classmethodrH   rX   r\   __classcell__)r$   s   @r%   r   r      s          (,&*!%(,)-'+f f f f f f f" " " " " "8    [&1 1 1 1>N N N N N N N Nr&   r   )r_   
__future__r   _annotationsr1   r5   pathlibr   typingr   r   pydantic.fieldsr   pydantic_settings.utilsr   
exceptionsr
   baser   typesr   pydantic_settings.mainr   r   r*   r&   r%   <module>rl      s(   # # 2 2 2 2 2 2 				              
 & % % % % % 3 3 3 3 3 3 ' ' ' ' ' ' 0 0 0 0 0 0       4333333dN dN dN dN dN9 dN dN dN dN dNr&   