
    ,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y)zSecrets file settings source.    )annotationsN)Path)TYPE_CHECKINGAny)	FieldInfo)path_type_label   )SettingsError   )PydanticBaseEnvSettingsSource)PathType)BaseSettingsc                  ~     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.
    c                    t         |   ||||||       ||| _        y | j                  j                  d      | _        y )Nsecrets_dir)super__init__configgetr   )	selfsettings_clsr   case_sensitive
env_prefixenv_ignore_emptyenv_parse_none_strenv_parse_enums	__class__s	           m/var/www/html/Resume-Scraper/venv/lib/python3.12/site-packages/pydantic_settings/sources/providers/secrets.pyr   zSecretsSettingsSource.__init__   sF     	.*6FHZ\k	
 +6*A;t{{WdGe    c                `   i }| j                   |S t        | j                   t        t        j                  f      r| j                   gn| j                   }|D cg c]  }t        |      j                          }}g | _        |D ]G  }|j                         st        j                  d| d       -| j                  j                  |       I t        | j                        s|S | j                  D ])  }|j                         rt        dt        |              t         | E         S c c}w )z4
        Build fields from "secrets" files.
        zdirectory "z" does not existz.secrets_dir must reference a directory, not a )r   
isinstancestrosPathLiker   
expandusersecrets_pathsexistswarningswarnappendlenis_dirr
   r   r   __call__)r   secretssecrets_dirspr'   pathr   s         r   r.   zSecretsSettingsSource.__call__-   s    *,#N-78H8H3PRP[P[J\-](()cgcscs7CD!a++-DD! 	0D;;=D61ABC""))$/		0 4%%&N&& 	nD;;=#&TUdeiUjTk$lmm	n w!!! Es    D+c                    |j                         D ]G  }|j                  |k(  r|c S |r|j                  j                         |j                         k(  sE|c S  y)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)clsdir_path	file_namer   fs        r   find_case_pathz$SecretsSettingsSource.find_case_pathI   sR     !!# 	Avv"#)//:K(K		
 r    c           
     n   | j                  ||      D ]  \  }}}t        | j                        D ]~  }| j                  ||| j                        }|s#|j                         r%|j                         j                         ||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reversedr'   r;   r   is_file	read_textstripr)   r*   r   )r   field
field_name	field_keyenv_namevalue_is_complexsecrets_pathr2   s           r   get_field_valuez%SecretsSettingsSource.get_field_value]   s     6:5M5MeU_5` 	1Ix!1 ();); < **<4CVCVW<<>>>+113Y@PPPMM9$~o^bNcMddmn#$	  Y 000r    c                N    | j                   j                   d| j                  dS )Nz(secrets_dir=))r   __name__r   )r   s    r   __repr__zSecretsSettingsSource.__repr__|   s'    ..))*-8H8H7K1MMr    )NNNNNN)r   ztype[BaseSettings]r   zPathType | Noner   bool | Noner   
str | Noner   rO   r   rP   r   rO   returnNone)rQ   zdict[str, Any])r8   r   r9   r#   r   boolrQ   zPath | None)rD   r   rE   r#   rQ   ztuple[Any, str, bool])rQ   r#   )rM   
__module____qualname____doc__r   r.   classmethodr;   rJ   rN   __classcell__)r   s   @r   r   r      s     (,&*!%(,)-'+f(f %f $	f
 f &f 'f %f 
f"8  &1>Nr    r   )rV   
__future__r   _annotationsr$   r)   pathlibr   typingr   r   pydantic.fieldsr   pydantic_settings.utilsr   
exceptionsr
   baser   typesr   pydantic_settings.mainr   r    r    r   <module>rd      sA    # 2 	  
 & 3 ' 0 3dN9 dNr    