§
    �’jã<  ã                  ó*  — d dl mZ d dlZd dlmZm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a d dlma d dlma d dlmZ ndadadadd„Zdd„Z  G d„ dee!e!dz  f         ¦  «        Z" G d„ de¦  «        Z#ddgZ$dS )é    )ÚannotationsN)ÚIteratorÚMapping)Úcached_property)ÚTYPE_CHECKINGÚAny)Ú	FieldInfoé   )ÚSettingsErroré   )ÚSecretVersion)Ú	InitStateé   )ÚEnvSettingsSource©Údefault©ÚCredentials©ÚSecretManagerServiceClient)ÚBaseSettingsÚreturnÚNonec                 óþ   — 	 ddl ma ddlma t          j        ¦   «         5  t          j        dt          ¬¦  «         ddl	m
a
 d d d ¦  «         d S # 1 swxY w Y   d S # t          $ r} t          d¦  «        | ‚d } ~ ww xY w)Nr   r   r   Úignore)Úcategoryr   zjGCP Secret Manager dependencies are not installed, run `pip install pydantic-settings[gcp-secret-manager]`)Úgoogle.authr   Úgoogle_auth_defaultÚgoogle.auth.credentialsr   ÚwarningsÚcatch_warningsÚfilterwarningsÚFutureWarningÚgoogle.cloud.secretmanagerr   ÚImportError)Úes    úUC:\Projects\DSCons\.venv\Lib\site-packages\pydantic_settings\sources\providers\gcp.pyÚimport_gcp_secret_managerr(      s  € ð

Ø>Ð>Ð>Ð>Ð>Ð>Ø7Ð7Ð7Ð7Ð7Ð7åÔ$Ñ&Ô&ð 	Nð 	NÝÔ# Hµ}ÐEÑEÔEÐEØMÐMÐMÐMÐMÐMð	Nð 	Nð 	Nñ 	Nô 	Nð 	Nð 	Nð 	Nð 	Nð 	Nð 	Nð 	Nøøøð 	Nð 	Nð 	Nð 	Nð 	Nð 	Nøõ ð ð ð ÝØxñ
ô 
àð	øøøøðøøøs:   ‚A ¡"AÁA ÁAÁA ÁAÁA Á
A<Á'A7Á7A<ÚexcÚ	ExceptionÚboolc                óR   — 	 ddl m} t          | |¦  «        S # t          $ r Y dS w xY w)Nr   )ÚNotFoundF)Úgoogle.api_core.exceptionsr-   Ú
isinstancer%   )r)   r-   s     r'   Ú_is_not_found_errorr0   -   sK   € ðØ7Ð7Ð7Ð7Ð7Ð7å˜#˜xÑ(Ô(Ð(øÝð ð ð Øˆuˆuðøøøs   ‚ ˜
&¥&c                  ó°   — e Zd ZU ded<   ded<   d#d„Zed$d„¦   «         Zd%d„Zed&d„¦   «         Z	ed'd„¦   «         Z
d(d)d„Zd(d*d„Zd+d„Zd,d„Zd-d„Zd.d!„Zd"S )/ÚGoogleSecretManagerMappingzdict[str, str | None]Ú_loaded_secretsr   Ú_secret_clientÚsecret_clientÚ
project_idÚstrÚcase_sensitiver+   r   r   c                ó>   — i | _         || _        || _        || _        d S ©N)r3   r4   Ú_project_idÚ_case_sensitive)Úselfr5   r6   r8   s       r'   Ú__init__z#GoogleSecretManagerMapping.__init__:   s(   € Ø!ˆÔØ+ˆÔØ%ˆÔØ-ˆÔÐÐó    c                ó@   — | j                              | j        ¦  «        S r:   )r4   Úcommon_project_pathr;   ©r=   s    r'   Ú_gcp_project_pathz,GoogleSecretManagerMapping._gcp_project_path@   s   € àÔ"×6Ò6°tÔ7GÑHÔHÐHr?   Ú
lower_nameÚ
candidatesú	list[str]c           	     óÀ   — t          |¦  «        dk    r|d         S |                     ¦   «          |d         }t          j        d|› d|› d|› d�t          d¬	¦  «         |S )
Nr   r   éÿÿÿÿz)Secret collision: Found multiple secrets z normalizing to 'z
'. Using 'z' for case-insensitive lookup.r   )Ú
stacklevel)ÚlenÚsortr    ÚwarnÚUserWarning)r=   rD   rE   Úwinners       r'   Ú_select_case_insensitive_secretz:GoogleSecretManagerMapping._select_case_insensitive_secretD   sŽ   € Ýˆz‰?Œ?˜aÒÐØ˜a”=Ð ð 	�ŠÑÔÐØ˜B”ˆÝŒð=¸
ð =ð =ÐU_ð =ð =Øð=ð =ð =åØð		
ñ 	
ô 	
ð 	
ð ˆr?   údict[str, str]c                óº  — i }i }| j                              | j        ¬¦  «        }|D ]y}| j                              |j        ¦  «                             dd¦  «        }|||<   | j        s8|                     ¦   «         }||vrg ||<   ||                              |¦  «         Œz| j        s3| 	                    ¦   «         D ]\  }}|  
                    ||¦  «        ||<   Œ|S )N)ÚparentÚsecretÚ )r4   Úlist_secretsrC   Úparse_secret_pathÚnameÚgetr<   ÚlowerÚappendÚitemsrO   )r=   ÚmappingÚnormalized_groupsÚsecretsrS   rW   rD   rE   s           r'   Ú_secret_name_mapz+GoogleSecretManagerMapping._secret_name_mapS   s  € à"$ˆà24ÐàÔ%×2Ò2¸$Ô:PÐ2ÑQÔQˆØð 	;ð 	;ˆFØÔ&×8Ò8¸¼ÑEÔE×IÒIÈ(ÐTVÑWÔWˆDØ ˆG�D‰MàÔ'ð ;Ø!ŸZšZ™\œ\�
ØÐ%6Ð6Ð6Ø46Ð% jÑ1Ø! *Ô-×4Ò4°TÑ:Ô:Ð:øàÔ#ð 	cØ*;×*AÒ*AÑ*CÔ*Cð cð cÑ&�
˜JØ&*×&JÒ&JÈ:ÐWaÑ&bÔ&b�˜
Ñ#Ð#àˆr?   c                óN   — t          | j                             ¦   «         ¦  «        S r:   )Úlistr_   ÚkeysrB   s    r'   Ú_secret_namesz(GoogleSecretManagerMapping._secret_namesj   s   € å�DÔ)×.Ò.Ñ0Ô0Ñ1Ô1Ð1r?   ÚlatestÚkeyÚversionc                óD   — | j                              | j        ||¦  «        S r:   )r4   Úsecret_version_pathr;   )r=   re   rf   s      r'   Ú_secret_version_pathz/GoogleSecretManagerMapping._secret_version_pathn   s    € ØÔ"×6Ò6°tÔ7GÈÈgÑVÔVÐVr?   Úgcp_secret_nameú
str | Nonec                ó¾   — 	 | j                              |                      ||¦  «        ¬¦  «        j        j                             d¦  «        S # t          $ r Y d S w xY w©N)rW   zUTF-8)r4   Úaccess_secret_versionri   ÚpayloadÚdataÚdecoder*   )r=   rj   rf   s      r'   Ú_get_secret_valuez,GoogleSecretManagerMapping._get_secret_valueq   sm   € ð	ØÔ&×<Ò<Ø×.Ò.¨ÀÑHÔHð =ñ ô ä”dŸ6š6 '™?œ?ð+øõ ð 	ð 	ð 	Ø�4�4ð	øøøs   ‚AA Á
AÁAc                ó  — 	 | j                              |                      |¦  «        ¬¦  «        j        j                             d¦  «        S # t          $ r*}t          |¦  «        rt          |¦  «        |‚Y d }~d S d }~ww xY wrm   )	r4   rn   ri   ro   rp   rq   r*   r0   ÚKeyError)r=   rj   r&   s      r'   Ú_get_secret_value_or_raisez5GoogleSecretManagerMapping._get_secret_value_or_raisey   s•   € ð	ØÔ&×<Ò<Ø×.Ò.¨Ñ?Ô?ð =ñ ô ä”dŸ6š6 '™?œ?ð+øõ ð 	ð 	ð 	Ý" 1Ñ%Ô%ð 7Ý˜Ñ/Ô/°QÐ6Ø�4�4�4�4�4øøøøð	øøøs   ‚A
A Á
BÁA<Á<Bc                ó˜  — || j         v r| j         |         S | j        r*|                      |¦  «        | j         |<   | j         |         S | j                             |¦  «        }|€,| j                             |                     ¦   «         ¦  «        }|r|                      |¦  «        | j         |<   nt          |¦  «        ‚| j         |         S r:   )r3   r<   ru   r_   rX   rY   rr   rt   )r=   re   rj   s      r'   Ú__getitem__z&GoogleSecretManagerMapping.__getitem__ƒ   sÌ   € Ø�$Ô&Ð&Ð&ØÔ'¨Ô,Ð,àÔð 	-Ø(,×(GÒ(GÈÑ(LÔ(LˆDÔ  Ñ%ØÔ'¨Ô,Ð,àÔ/×3Ò3°CÑ8Ô8ˆØÐ"Ø"Ô3×7Ò7¸¿	º	¹¼ÑDÔDˆOàð 	 Ø(,×(>Ò(>¸Ñ(OÔ(OˆDÔ  Ñ%Ð%å˜3‘-”-ÐàÔ# CÔ(Ð(r?   Úintc                ó*   — t          | j        ¦  «        S r:   )rJ   rc   rB   s    r'   Ú__len__z"GoogleSecretManagerMapping.__len__–   s   € Ý�4Ô%Ñ&Ô&Ð&r?   úIterator[str]c                ó*   — t          | j        ¦  «        S r:   )Úiterrc   rB   s    r'   Ú__iter__z#GoogleSecretManagerMapping.__iter__™   s   € Ý�DÔ&Ñ'Ô'Ð'r?   N)r5   r   r6   r7   r8   r+   r   r   ©r   r7   )rD   r7   rE   rF   r   r7   )r   rP   )r   rF   )rd   )re   r7   rf   r7   r   r7   )rj   r7   rf   r7   r   rk   )rj   r7   r   rk   )re   r7   r   rk   )r   rx   )r   r{   )Ú__name__Ú
__module__Ú__qualname__Ú__annotations__r>   ÚpropertyrC   rO   r   r_   rc   ri   rr   ru   rw   rz   r~   © r?   r'   r2   r2   6   sA  € € € € € € Ø*Ð*Ð*Ñ*Ø.Ð.Ð.Ñ.ð.ð .ð .ð .ð ðIð Ið Iñ „XðIðð ð ð ð ðð ð ñ „_ðð, ð2ð 2ð 2ñ „Xð2ðWð Wð Wð Wð Wðð ð ð ð ðð ð ð ð)ð )ð )ð )ð&'ð 'ð 'ð 'ð(ð (ð (ð (ð (ð (r?   r2   c                  óŽ   ‡ — e Zd ZU ded<   ded<   ded<   ded<   	 	 	 	 	 	 	 	 	 d&d'ˆ fd„Zd(ˆ fd„Zd)d „Zd*d"„Zd+ˆ fd$„Zd,d%„Z	ˆ xZ
S )-Ú!GoogleSecretManagerSettingsSourceúCredentials | NoneÚ_credentialsú!SecretManagerServiceClient | Noner4   rk   r;   Ú_explicit_project_idNTr6   Úsettings_clsútype[BaseSettings]ÚcredentialsÚ
env_prefixÚenv_parse_none_strÚenv_parse_enumsúbool | Noner5   r8   Úproject_id_fieldr7   Ú_init_stateúInitState | Noner   r   c           	     ó   •— t           �t          �t          €t          ¦   «          || _        d| _        || _        || _        |	| _        d| _	        t          ¦   «                              |||d|||
¬¦  «         d| _	        dS )a¹  Settings source that reads secrets from Google Cloud Secret Manager.

        Args:
            project_id: The GCP project to read secrets from. If not provided, it is
                resolved lazily (see below).
            project_id_field: The key, populated by a previous (higher priority)
                settings source, to use as the ``project_id`` when one is not passed
                explicitly. This must match the key used in ``current_state`` by the
                previous source (typically the field name or its preferred alias).
                For example, with ``some_field: str = Field(alias='GCP_PROJECT')``,
                previous env sources will expose the value under ``'GCP_PROJECT'``.
                Defaults to ``'project_id'``.

        The ``project_id`` is resolved lazily in :meth:`__call__` rather than at
        construction time so that it can be sourced from settings resolved by previous
        sources (only available via ``current_state`` once the source is called).
        Resolution order is:

        1. the explicit ``project_id`` argument
        2. the ``project_id_field`` value from previous settings sources
        3. ``google.auth.default()``
        NF)r8   r�   Úenv_ignore_emptyr�   r‘   r”   T)r   r   r   r(   r‹   r;   r‰   r4   Ú_project_id_fieldÚ_env_vars_loadedÚsuperr>   )r=   rŒ   rŽ   r6   r�   r�   r‘   r5   r8   r“   r”   Ú	__class__s              €r'   r>   z*GoogleSecretManagerSettingsSource.__init__£   s›   ø€ õH &Ð-µÐ1DÕH[ÐHcÝ%Ñ'Ô'Ð'ð
 %/ˆÔ!ØˆÔØ'ˆÔØ+ˆÔØ!1ˆÔØ %ˆÔå‰Œ×ÒØØ)Ø!Ø"Ø1Ø+Ø#ð 	ñ 	
ô 	
ð 	
ð !%ˆÔÐÐr?   Úfieldr	   Ú
field_nameútuple[Any, str, bool]c                ó°  •— t          d„ |j        D ¦   «         d¦  «        }|rät          | j        t          ¦  «        rÊ|                      ||¦  «        D ]®\  }}}| j        r|}nR| j        j                             |¦  «        }|€1| j        j                             | 	                    ¦   «         ¦  «        }|rJ| j         
                    ||¦  «        }|�-| j        j                             d¦  «        r|||fc S |||fc S Œ¯d|dfS t          ¦   «                              ||¦  «        \  }	}
}| j        j                             d¦  «        r|	�|	||fS |	|
|fS )aü  Override get_field_value to get the secret value from GCP Secret Manager.
        Look for a SecretVersion metadata field to specify a particular SecretVersion.

        Args:
            field: The field to get the value for
            field_name: The declared name of the field

        Returns:
            A tuple of (value, key, value_is_complex), where `key` is the identifier used
            to populate the model (either the field name or an alias, depending on
            configuration).
        c              3  óN   K  — | ] }t          |t          ¦  «        ¯|j        V — Œ!d S r:   )r/   r   rf   )Ú.0Úms     r'   ú	<genexpr>zDGoogleSecretManagerSettingsSource.get_field_value.<locals>.<genexpr>î   s4   è è € ÐaÐa¨QÅJÈqÕR_ÑD`ÔD`Ða˜qœyÐaÐaÐaÐaÐaÐar?   NÚpopulate_by_nameF)ÚnextÚmetadatar/   Úenv_varsr2   Ú_extract_field_infor8   r_   rX   rY   rr   rŒ   Úmodel_configrš   Úget_field_value)r=   rœ   r�   Úsecret_versionÚ	field_keyÚenv_nameÚvalue_is_complexrj   Úenv_valÚvalre   Ú
is_complexr›   s               €r'   rª   z1GoogleSecretManagerSettingsSource.get_field_valueà   s�  ø€ õ ÐaÐa°%´.ÐaÑaÔaÐcgÑhÔhˆð
 ð 	+�j¨¬Õ8RÑSÔSð 	+Ø9=×9QÒ9QÐRWÐYcÑ9dÔ9dð Dð DÑ5�	˜8Ð%5ØÔ&ð _Ø2:�O�Oà&*¤mÔ&D×&HÒ&HÈÑ&RÔ&R�OØ&Ð.Ø*.¬-Ô*H×*LÒ*LÈXÏ^Ê^ÑM]ÔM]Ñ*^Ô*^˜à"ð DØ"œm×=Ò=¸oÈ~Ñ^Ô^�GØÐ*ð  Ô,Ô9×=Ò=Ð>PÑQÔQð IØ#*¨JÐ8HÐ#HÐHÐHÐHØ&¨	Ð3CÐCÐCÐCÐCøð ˜ UÐ*Ð*å$™wœw×6Ò6°u¸jÑIÔIÑˆˆS�*ð ÔÔ)×-Ò-Ð.@ÑAÔAð 	/ÀcÀoØ˜
 JÐ.Ð.Ø�C˜Ð#Ð#r?   c                ó®  — | j         �dS | j        }| j        }|€6| j                             | j        ¦  «        }t          |t          ¦  «        r|}| j        du o|du }|du }|s|r.t          ¦   «         \  }}|r|}|rt          |t          ¦  «        r|}|€t          d¦  «        ‚|| _        || _         | j        €t          | j        ¬¦  «        | _        dS dS )a:  Resolve the credentials, project_id and Secret Manager client.

        ``project_id`` is resolved, in order of precedence, from: the explicit
        ``project_id`` argument, the ``project_id_field`` value from previous settings
        sources (``current_state``), and finally ``google.auth.default()``.
        NzÚproject_id is required to be specified either as an argument, via a previous settings source, or from google.auth.default. See https://google-auth.readthedocs.io/en/master/reference/google.auth.html#google.auth.default)rŽ   )r;   r‹   r‰   Úcurrent_staterX   r˜   r/   r7   r4   r   ÚAttributeErrorr   )r=   r6   rŽ   Ústate_project_idÚneed_credentialsÚneed_projectÚ_credsr;   s           r'   Ú_resolve_gcp_projectz6GoogleSecretManagerSettingsSource._resolve_gcp_project  s'  € ð ÔÐ'ØˆFàÔ.ˆ
ØÔ'ˆð ÐØ#Ô1×5Ò5°dÔ6LÑMÔMÐÝÐ*­CÑ0Ô0ð .Ø-�
ð  Ô.°$Ð6ÐN¸;È$Ð;NÐØ! TÐ)ˆØð 	)˜|ð 	)Ý"5Ñ"7Ô"7ÑˆF�KØð %Ø$�Øð )¥
¨;½Ñ <Ô <ð )Ø(�
àÐÝ ðnñô ð ð (ˆÔØ%ˆÔØÔÐ&Ý"<ÈÔIZÐ"[Ñ"[Ô"[ˆDÔÐÐð 'Ð&r?   úMapping[str, str | None]c                ó¸   — | j         si S |                      ¦   «          | j        �| j        €t	          d¦  «        ‚t          | j        | j        | j        ¬¦  «        S )NzæGoogleSecretManagerSettingsSource: could not determine GCP project_id or initialize the Secret Manager client. Pass project_id explicitly or ensure it is available via application default credentials or a previous settings source.)r6   r8   )r™   r¹   r;   r4   r   r2   r8   rB   s    r'   Ú_load_env_varsz0GoogleSecretManagerSettingsSource._load_env_vars=  sx   € ð Ô$ð 	ØˆIà×!Ò!Ñ#Ô#Ð#ØÔÐ# tÔ':Ð'BÝðJñô ð õ *ØÔ¨DÔ,<ÈTÔM`ð
ñ 
ô 
ð 	
r?   údict[str, Any]c                ó„   •— d| _         |                      ¦   «         | _        t          ¦   «                              ¦   «         S )NT)r™   r¼   r§   rš   Ú__call__)r=   r›   s    €r'   r¿   z*GoogleSecretManagerSettingsSource.__call__M  s6   ø€ ð !%ˆÔØ×+Ò+Ñ-Ô-ˆŒÝ‰wŒw×ÒÑ!Ô!Ð!r?   c                ó`   — | j         �| j         n| j        }| j        j        › d|›d| j        ›d�S )Nz(project_id=z, env_nested_delimiter=ú))r;   r‹   r›   r€   Úenv_nested_delimiter)r=   r6   s     r'   Ú__repr__z*GoogleSecretManagerSettingsSource.__repr__T  sF   € ð *.Ô)9Ð)E�TÔ%Ð%È4ÔKdˆ
àŒ~Ô&ÐwÐw°JÐwÐwÐY]ÔYrÐwÐwÐwð	
r?   )	NNNNNNTr6   N)rŒ   r�   rŽ   rˆ   r6   rk   r�   rk   r�   rk   r‘   r’   r5   rŠ   r8   r’   r“   r7   r”   r•   r   r   )rœ   r	   r�   r7   r   rž   ©r   r   )r   rº   )r   r½   r   )r€   r�   r‚   rƒ   r>   rª   r¹   r¼   r¿   rÃ   Ú__classcell__)r›   s   @r'   r‡   r‡   �   s  ø€ € € € € € Ø$Ð$Ð$Ñ$Ø5Ð5Ð5Ñ5ØÐÐÑØ$Ð$Ð$Ñ$ð
 +/Ø!%Ø!%Ø)-Ø'+Ø;?Ø&*Ø ,Ø(,ð;%ð ;%ð ;%ð ;%ð ;%ð ;%ð ;%ðz/$ð /$ð /$ð /$ð /$ð /$ðb*\ð *\ð *\ð *\ðX
ð 
ð 
ð 
ð "ð "ð "ð "ð "ð "ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r?   r‡   rÄ   )r)   r*   r   r+   )%Ú
__future__r   Ú_annotationsr    Úcollections.abcr   r   Ú	functoolsr   Útypingr   r   Úpydantic.fieldsr	   Ú
exceptionsr   Útypesr   Úutilsr   Úenvr   r   r   r   r   r   r$   r   Úpydantic_settings.mainr   r(   r0   r7   r2   r‡   Ú__all__r…   r?   r'   ú<module>rÒ      sÍ  ðØ 2Ð 2Ð 2Ð 2Ð 2Ð 2à €€€Ø -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ø %Ð %Ð %Ð %Ð %Ð %Ø %Ð %Ð %Ð %Ð %Ð %Ð %Ð %à %Ð %Ð %Ð %Ð %Ð %à 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð Ø "Ð "Ð "Ð "Ð "Ð "àð 	Ø:Ð:Ð:Ð:Ð:Ð:Ø3Ð3Ð3Ð3Ð3Ð3ØEÐEÐEÐEÐEÐEà3Ð3Ð3Ð3Ð3Ð3Ð3à€KØ!%ÐØÐðð ð ð ð$ð ð ð ðd(ð d(ð d(ð d(ð d( ¨¨c°D©j¨Ô!9ñ d(ô d(ð d(ðN}
ð }
ð }
ð }
ð }
Ð(9ñ }
ô }
ð }
ð@ (Ð)LÐ
M€€€r?   