Ë
    ðLqjÏ  ã                  ó¢   — 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	           €úw/var/www/html/ai-menu-system/python-ai/venv/lib/python3.12/site-packages/pydantic_settings/sources/providers/secrets.pyr   zSecretsSettingsSource.__init__   sF   ø€ ô 	‰ÑØ˜.¨*Ð6FÐHZÐ\kô	
ð +6Ð*A˜;ˆÕÀtÇ{Á{ÇÁÐWdÓGeˆÕó    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¸×8HÑ8HÌ3ÔPR×P[ÑP[ÐJ\Ô-]˜×(Ñ(Ñ)Ðcg×csÑcsˆØ7CÖD°!œ˜a›×+Ñ+Õ-ÐDˆÐDØˆÔà!ò 	0ˆDØ—;‘;”=Ü—‘ ¨D¨6Ð1AÐBÕCà×"Ñ"×)Ñ)¨$Õ/ð		0ô �4×%Ñ%Ô&ØˆNà×&Ñ&ò 	nˆDØ—;‘;•=Ü#Ð&TÔUdÐeiÓUjÐTkÐ$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Ø�v‰v˜Ò"Ø’Ú#¨¯©¯©«¸)¿/¹/Ó: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:×5MÑ5MÈeÐU_Ó5`ò 	Ñ1ˆI�xÐ!1ä (¨×);Ñ);Ó <ò �Ø×*Ñ*¨<¸À4×CVÑCVÓW�Ùàà—<‘<”>ØŸ>™>Ó+×1Ñ1Ó3°YÐ@PÐPÔPä—M‘MØ9¸$¸¸~ÌoÐ^bÓNcÐMdÐdmÐ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'   € Ø—.‘.×)Ñ)Ð*¨-¸×8HÑ8HÐ7KÈ1Ð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    