o
    h                     @  s   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	rDddlmZ G dd deZdS )zSecrets file settings source.    )annotationsN)Path)TYPE_CHECKINGAny)	FieldInfo)path_type_label   )SettingsError   )PydanticBaseEnvSettingsSource)PathType)BaseSettingsc                      s`   e Zd ZdZ						d%d& fddZd' fddZed(ddZd)d!d"Zd*d#d$Z	  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                   s:   t  |||||| |d ur|| _d S | jd| _d S )Nr   )super__init__configgetr   )selfr   r   r   r   r   r   r   	__class__ /var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/pydantic_settings/sources/providers/secrets.pyr      s   
$zSecretsSettingsSource.__init__dict[str, Any]c                   s   i }| j du r	|S t| j ttjfr| j gn| j }dd |D }g | _|D ]}| s5td| d q%| j	| q%t
| jsC|S | jD ]}| sUtdt| qFt  S )z4
        Build fields from "secrets" files.
        Nc                 S  s   g | ]}t | qS r#   )r   
expanduser).0pr#   r#   r$   
<listcomp>7   s    z2SecretsSettingsSource.__call__.<locals>.<listcomp>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_dirsr.   pathr!   r#   r$   r5   -   s"   
 


zSecretsSettingsSource.__call__dir_pathr   	file_namer+   boolPath | Nonec                 C  sB   |  D ]}|j|kr|  S |s|j | kr|  S qd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)clsr9   r:   r   fr#   r#   r$   find_case_pathI   s   
z$SecretsSettingsSource.find_case_pathfieldr   
field_nametuple[Any, str, bool]c                 C  s   |  ||D ]9\}}}t| jD ].}| ||| j}|sq| r.|  ||f    S tj	d| dt
| ddd qq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reversedr.   rB   r   is_file	read_textstripr0   r1   r   )r    rC   rD   	field_keyenv_namevalue_is_complexsecrets_pathr8   r#   r#   r$   get_field_value]   s   
z%SecretsSettingsSource.get_field_valuec                 C  s   | j j d| jdS )Nz(secrets_dir=))r"   __name__r   )r    r#   r#   r$   __repr__|   s   zSecretsSettingsSource.__repr__)NNNNNN)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r%   )r9   r   r:   r+   r   r;   r   r<   )rC   r   rD   r+   r   rE   )r   r+   )rS   
__module____qualname____doc__r   r5   classmethodrB   rQ   rT   __classcell__r#   r#   r!   r$   r      s    
r   )rW   
__future__r   _annotationsr,   r0   pathlibr   typingr   r   pydantic.fieldsr   pydantic_settings.utilsr   
exceptionsr	   baser   typesr   pydantic_settings.mainr   r   r#   r#   r#   r$   <module>   s    