§
    �’j%  ã                   óê   — 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mZ ddlmZ ddlmZ e	rddlmZ ddlmZ dZ G d„ de¦  «        Zde
de
fd„ZdS )é    N)ÚIterator)Úreduce)ÚPath)ÚTYPE_CHECKINGÚAnyÚLiteralÚOptionalé   )ÚSettingsError)Úpath_type_labelé   )ÚPydanticBaseSettingsSource)Ú	InitStateÚparse_env_varsé   )ÚEnvSettingsSource)ÚSecretsSettingsSource)ÚBaseSettings)ÚPathTypei   c                   ó2  ‡ — e Zd Z	 	 	 	 	 	 	 	 	 	 ddeez  ded         ded         dz  dedz  dedz  d	e	dz  d
e	dz  dedz  dedz  de	dz  de
dz  ddfˆ fd„Zdeddfd„Zededee         fd„¦   «         Zededee	e	f         fd„¦   «         Zde	fd„Zˆ x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Ú_init_stateÚreturnc                 ó4  •‡ — 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        r7|s|                     d¦  «        rt          d¦  «        ‚t          j        ‰ _        ‰ j        €g }n>t          ‰ j        t           t"          f¦  «        r	‰ j        g}nt%          ‰ j        ¦  «        }d„ |D ¦   «         ‰ _        ‰ j        D ]}‰                      |¦  «         Œt+          ¦   «                              |‰ j	        ‰ j
        ‰ j        d
dd |�|nt          |dd ¦  «        ¬¦  «         d ‰ _        t1          ‰ j        ¦  «        s	i ‰ _        d S t5          d„ ˆ fd„‰ j        D ¦   «         ¦  «        }t7          |‰ 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                 ót   — g | ]5}t          |¦  «                             ¦   «                              ¦   «         ‘Œ6S © )r   Ú
expanduserÚresolve)Ú.0Úps     ú`C:\Projects\DSCons\.venv\Lib\site-packages\pydantic_settings\sources\providers\nested_secrets.pyú
<listcomp>z8NestedSecretsSettingsSource.__init__.<locals>.<listcomp>j   s6   € Ð)XÐ)XÐ)XÈQ­$¨q©'¬'×*<Ò*<Ñ*>Ô*>×*FÒ*FÑ*HÔ*HÐ)XÐ)XÐ)Xó    Tr&   )r$   r%   r+   Úenv_ignore_emptyÚenv_parse_enumsÚenv_parse_none_strr&   c                 ór   — t          g |                      ¦   «         ¢|                     ¦   «         ¢R ¦  «        S ©N)ÚdictÚitems)Úd1Úd2s     r2   ú<lambda>z6NestedSecretsSettingsSource.__init__.<locals>.<lambda>€   s,   € �tÐ$> b§h¢h¡j¤jÐ$>°2·8²8±:´:Ð$>Ð$>Ñ?Ô?€ r4   c              3   óB   •K  — | ]}‰                      |¦  «        V — Œd S r9   )Úload_secrets)r0   r1   Úselfs     €r2   ú	<genexpr>z7NestedSecretsSettingsSource.__init__.<locals>.<genexpr>�   s1   øè è € ÐBÐB¨!�×"Ò" 1Ñ%Ô%ÐBÐBÐBÐBÐBÐBr4   )ÚgetattrÚmodel_configÚfirst_not_noneÚgetr   r   r   ÚSECRETS_DIR_MAX_SIZEr   r$   r!   r"   r#   ÚosÚsepÚ
isinstancer   ÚstrÚlistÚsecrets_pathsÚvalidate_secrets_pathÚsuperÚ__init__r7   ÚlenÚenv_varsr   r   r5   )rA   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r)   ÚconfÚpathsÚpathÚsecretsÚ	__class__s   `                €r2   rP   z$NestedSecretsSettingsSource.__init__   sc  øø€ õ& ,3Ø ØØ ñ,
ô ,
ˆð Ô(ˆÝ,:ÝÐ(¨-¸Ñ>Ô>ØØ�HŠH�]Ñ#Ô#ñ-
ô -
ˆÔõ
 DRØØ�HŠHÐ*Ñ+Ô+ØñD
ô D
ˆÔ ð
 Ô#Ð+BÐBÐBÝÐ `ÀdÔF^Ð `Ð `ÑaÔaÐaÝ)7Ø Ø�HŠHÐ+Ñ,Ô,Ý ñ*
ô *
ˆÔ!õ
 %3Ø"Ø�HŠHÐ-Ñ.Ô.ØØ�HŠHÐ%Ñ&Ô&Øñ%
ô %
ˆÔõ $2ØØ�HŠHÐ%Ñ&Ô&ØØ�HŠH�\Ñ"Ô"Øñ$
ô $
ˆÔõ 5CØ$Ø�HŠHÐ/Ñ0Ô0Ø�HŠHÐ+Ñ,Ô,ñ5
ô 5
ˆÔ%õ
 ,:Ø!Ø�HŠHÐ,Ñ-Ô-Øñ,
ô ,
ˆÔ"ð
 Ô%ð 	7Ø'ð 7¨4¯8ª8Ð4NÑ+OÔ+Oð 7Ý#Ð$wÑxÔxÐxå02´�Ô-ð ÔÐ#ØˆEˆEÝ˜Ô(­4µ¨+Ñ6Ô6ð 	+ØÔ%Ð&ˆEˆEå˜Ô)Ñ*Ô*ˆEØ)XÐ)XÐRWÐ)XÑ)XÔ)XˆÔØÔ&ð 	-ð 	-ˆDØ×&Ò& tÑ,Ô,Ð,Ð,õ 	‰Œ×ÒØØÔ.ØÔ*Ø!%Ô!>Ø"Ø Ø#Ø'2Ð'>˜˜ÅGÐL`ÐboÐquÑDvÔDvð 	ñ 		
ô 		
ð 		
ð #'ˆÔõ �4Ô%Ñ&Ô&ð 	ØˆDŒMˆMˆMåØ?Ð?ØBÐBÐBÐB¨tÔ/AÐBÑBÔBñô ˆGõ +ØØÔ#ØÔ%ØÔ'ñ	ô ˆDŒMˆMˆMr4   rU   c                 óä  — |                      ¦   «         sY| j        dk    rd S | j        dk    rt          j        d|› d�d¬¦  «         d S | j        dk    rt	          d|› d�¦  «        ‚t
          ‚|                     ¦   «         st	          dt          |¦  «        › �¦  «        ‚t          d	„ |  	                    |¦  «        D ¦   «         ¦  «        }|| j
        k    rt	          d
| j
        › d�¦  «        ‚d S )Nr   r   zdirectory "z" does not existr   )Ú
stacklevelr   z.secrets_dir must reference a directory, not a c              3   óH   K  — | ]}|                      ¦   «         j        V — Œd S r9   )ÚstatÚst_size)r0   Úfs     r2   rB   zDNestedSecretsSettingsSource.validate_secrets_path.<locals>.<genexpr>—   s-   è è € Ð"[Ð"[¸ 1§6¢6¡8¤8Ô#3Ð"[Ð"[Ð"[Ð"[Ð"[Ð"[r4   zsecrets_dir size is above z bytes)Úexistsr   Úwarningsr   r   Ú
ValueErrorÚis_dirr   ÚsumÚ_iter_secret_filesr   )rA   rU   Úsecrets_dir_sizes      r2   rN   z1NestedSecretsSettingsSource.validate_secrets_pathŠ   s  € Ø�{Š{‰}Œ}ð 	dØÔ'¨4Ò/Ð/Ø�ØÔ)¨VÒ3Ð3Ý”ÐB¨DÐBÐBÐBÈqÐQÑQÔQÐQÐQÐQØÔ)¨WÒ4Ð4Ý#Ð$H°$Ð$HÐ$HÐ$HÑIÔIÐIå Ð à—;’;‘=”=ð nÝ#Ð$lÕUdÐeiÑUjÔUjÐ$lÐ$lÑmÔmÐmÝ"Ð"[Ð"[¸T×=TÒ=TÐUYÑ=ZÔ=ZÐ"[Ñ"[Ô"[Ñ[Ô[ÐØ $Ô";Ò;Ð;Ý#Ð$bÀÔAZÐ$bÐ$bÐ$bÑcÔcÐcð <Ð;r4   c              #   ó�   ‡ ‡‡K  — t          ¦   «         Šdt          dt          t                   fˆ ˆˆfd„Š ‰‰ ¦  «        E d{V —† dS )a  Yield the secret files contained in ``path``.

        ``path`` is expected to already be resolved. The directory tree is walked
        explicitly so that symbolic links are handled safely:

        * a file is only yielded if its real location stays within ``path``; entries
          that resolve outside of it (e.g. through a symbolic link) are skipped, so
          they neither contribute to the ``secrets_dir_max_size`` accounting nor get
          loaded;
        * each real directory is visited at most once, so cyclic or repeated
          symlinks cannot make the walk loop and inflate the size accounting or the
          number of loaded secrets.

        Because the size check and the loader share this iterator, they always see
        the same set of files.
        Ú	directoryr'   c              3   ó°  •K  — |                       ¦   «         }|‰v rd S ‰                     |¦  «         	 t          |                      ¦   «         ¦  «        }n# t          $ r Y d S w xY w|D ]l}|                      ¦   «         }|                     ¦   «         r!|‰k    s	‰|j        v r ‰|¦  «        E d {V —† ŒK|                     ¦   «         r‰|j        v r|V — Œmd S r9   )r/   ÚaddÚsortedÚiterdirÚOSErrorra   ÚparentsÚis_file)rf   Úresolved_dirÚentriesÚentryÚresolvedrU   Ú	seen_dirsÚwalks        €€€r2   rs   z<NestedSecretsSettingsSource._iter_secret_files.<locals>.walk¯   s  øè è € ð %×,Ò,Ñ.Ô.ˆLØ˜yÐ(Ð(Ø�Ø�MŠM˜,Ñ'Ô'Ð'ðÝ  ×!2Ò!2Ñ!4Ô!4Ñ5Ô5��øÝð ð ð Ø��ðøøøà ð  ð  �Ø Ÿ=š=™?œ?�Ø—?’?Ñ$Ô$ð  ð
   4Ò'Ð'¨4°8Ô3CÐ+CÐ+CØ#' 4¨¡;¤;Ð.Ð.Ð.Ð.Ð.Ð.Ð.øØ×%Ò%Ñ'Ô'ð  ¨D°HÔ4DÐ,DÐ,Dð  �K�K�Køð ð  s   ´!A Á
A$Á#A$N)Úsetr   r   )rU   rr   rs   s   `@@r2   rc   z.NestedSecretsSettingsSource._iter_secret_files›   sv   øøøè è € õ$  #™uœuˆ	ð	 �Dð 	 ¥X­d¤^ð 	 ð 	 ð 	 ð 	 ð 	 ð 	 ð 	 ð 	 ð4 �4˜‘:”:ÐÐÐÐÐÐÐÐÐr4   c                 óF   ‡— ˆfd„|                       ‰¦  «        D ¦   «         S )Nc                 ó¢   •— i | ]K}t          |                     ‰¦  «        ¦  «        |                     d ¬¦  «                             ¦   «         “ŒLS )zutf-8)Úencoding)rK   Úrelative_toÚ	read_textÚstrip)r0   r1   rU   s     €r2   ú
<dictcomp>z<NestedSecretsSettingsSource.load_secrets.<locals>.<dictcomp>Ï   sJ   ø€ ÐvÐvÐvÐTU•�A—M’M $Ñ'Ô'Ñ(Ô(¨!¯+ª+¸w¨+Ñ*GÔ*G×*MÒ*MÑ*OÔ*OÐvÐvÐvr4   )rc   )ÚclsrU   s    `r2   r@   z(NestedSecretsSettingsSource.load_secretsË   s0   ø€ ð wÐvÐvÐvÐY\×YoÒYoÐptÑYuÔYuÐvÑvÔvÐvr4   c                 ó   — d| j         ›d�S )Nz(NestedSecretsSettingsSource(secrets_dir=ú))r   )rA   s    r2   Ú__repr__z$NestedSecretsSettingsSource.__repr__Ñ   s   € ØO¸$Ô:JÐOÐOÐOÐOr4   )
NNNNNNNNNN)Ú__name__Ú
__module__Ú__qualname__r   r   r	   r   ÚintÚboolrK   r   rP   r   rN   Ústaticmethodr   rc   Úclassmethodr:   r@   r   Ú__classcell__)rW   s   @r2   r   r      sÞ  ø€ € € € € ð -1ØEIØ+/Ø.2Ø%)Ø/3Ø-1à&*Ø!%Ø(,ðpð pà8Ð;PÑPðpð ˜jÔ)ðpð %Ð%:Ô;¸dÑBð	pð
 " D™jðpð !% t¡ðpð ˜d™
ðpð #&¨¡*ðpð  $ d™{ðpð ˜t™ðpð ˜$‘Jðpð  Ñ%ðpð 
ðpð pð pð pð pð pðdd¨$ð d°4ð dð dð dð dð" ð- ð -¨(°4¬.ð -ð -ð -ñ „\ð-ð^ ðw ð w¨¨c°3¨h¬ð wð wð wñ „[ðwð
P˜#ð Pð Pð Pð Pð Pð Pð Pð Pr4   r   Úobjsr'   c                  ó@   — t          t          d„ | ¦  «        d ¦  «        S )Nc                 ó
   — | d uS r9   r-   )Úos    r2   r>   z first_not_none.<locals>.<lambda>Ö   s
   €  ¨$ € r4   )ÚnextÚfilter)rˆ   s    r2   rE   rE   Õ   s    € Ý•Ð.Ð.°Ñ5Ô5°tÑ<Ô<Ð<r4   ) rH   r_   Úcollections.abcr   Ú	functoolsr   Úpathlibr   Útypingr   r   r   r	   Ú
exceptionsr   Úutilsr   Úbaser   r   r   Úenvr   rV   r   Úmainr   Úsourcesr   rG   r   rE   r-   r4   r2   ú<module>r˜      s  ðØ 	€	€	€	Ø €€€Ø $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8à 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø $Ð $Ð $Ð $Ð $Ð $Ø -Ð -Ð -Ð -Ð -Ð -Ø -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ø "Ð "Ð "Ð "Ð "Ð "Ø *Ð *Ð *Ð *Ð *Ð *àð $Ø$Ð$Ð$Ð$Ð$Ð$Ø#Ð#Ð#Ð#Ð#Ð#ð "Ð ð{Pð {Pð {Pð {Pð {PÐ"3ñ {Pô {Pð {Pð|=˜#ð = #ð =ð =ð =ð =ð =ð =r4   