Ë
    Ìiê&  ã                  óö   — 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 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 G d„ deeedz  f   «      Z G d„ de«      ZddgZy)é    )ÚannotationsN)ÚIteratorÚMapping)Úcached_property)ÚTYPE_CHECKINGÚAny)Ú	FieldInfoé   )ÚSecretVersioné   )ÚEnvSettingsSource©Údefault©ÚCredentials©ÚSecretManagerServiceClient)ÚBaseSettingsc                 óì   — 	 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 «       y # 1 sw Y   y xY w# 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    úh/var/www/html/strategist-ai/venv/lib/python3.12/site-packages/pydantic_settings/sources/providers/gcp.pyÚimport_gcp_secret_managerr#      si   € ð

Ý>Ý7ä×$Ñ$Ó&ñ 	NÜ×#Ñ# H´}ÕEÝM÷	N÷ 	Nñ 	Nûô ò ÜØxó
àð	ûðús4   ‚ A ¢"AÁA ÁAÁA ÁA Á	A3Á"A.Á.A3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y)ÚGoogleSecretManagerMappingzdict[str, str | None]Ú_loaded_secretsr   Ú_secret_clientc                ó<   — i | _         || _        || _        || _        y ©N)r&   r'   Ú_project_idÚ_case_sensitive)ÚselfÚsecret_clientÚ
project_idÚcase_sensitives       r"   Ú__init__z#GoogleSecretManagerMapping.__init__/   s"   € Ø!ˆÔØ+ˆÔØ%ˆÔØ-ˆÕó    c                óL   — | j                   j                  | j                  «      S r)   )r'   Úcommon_project_pathr*   ©r,   s    r"   Ú_gcp_project_pathz,GoogleSecretManagerMapping._gcp_project_path5   s   € à×"Ñ"×6Ñ6°t×7GÑ7GÓHÐHr1   c           	     ó¢   — t        |«      dk(  r|d   S |j                  «        |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,   Ú
lower_nameÚ
candidatesÚwinners       r"   Ú_select_case_insensitive_secretz:GoogleSecretManagerMapping._select_case_insensitive_secret9   si   € Üˆz‹?˜aÒØ˜a‘=Ð ð 	�‰ÔØ˜B‘ˆÜ�‰Ø7¸
°|ÐCTÐU_ÐT`ð aØ�XÐ;ð=äØõ		
ð ˆr1   c                óÂ  — i }i }| j                   j                  | j                  ¬«      }|D ]v  }| j                   j                  |j                  «      j                  dd«      }|||<   | j                  rŒJ|j                  «       }||vrg ||<   ||   j                  |«       Œx | j                  s-|j                  «       D ]  \  }}| j                  ||«      ||<   Œ |S )N)ÚparentÚsecretÚ )r'   Úlist_secretsr5   Úparse_secret_pathÚnameÚgetr+   ÚlowerÚappendÚitemsr@   )r,   ÚmappingÚnormalized_groupsÚsecretsrC   rG   r=   r>   s           r"   Ú_secret_name_mapz+GoogleSecretManagerMapping._secret_name_mapH   sð   € à"$ˆà24Ðà×%Ñ%×2Ñ2¸$×:PÑ:PÐ2ÓQˆØò 	;ˆFØ×&Ñ&×8Ñ8¸¿¹ÓE×IÑIÈ(ÐTVÓWˆDØ ˆG�D‰Mà×'Ó'Ø!ŸZ™Z›\�
ØÐ%6Ñ6Ø46Ð% jÑ1Ø! *Ñ-×4Ñ4°TÕ:ð	;ð ×#Ò#Ø*;×*AÑ*AÓ*Cò cÑ&�
˜JØ&*×&JÑ&JÈ:ÐWaÓ&b�˜
Ò#ðcð ˆr1   c                óH   — t        | j                  j                  «       «      S r)   )ÚlistrO   Úkeysr4   s    r"   Ú_secret_namesz(GoogleSecretManagerMapping._secret_names_   s   € ä�D×)Ñ)×.Ñ.Ó0Ó1Ð1r1   c                óP   — | j                   j                  | j                  ||«      S r)   )r'   Úsecret_version_pathr*   )r,   ÚkeyÚversions      r"   Ú_secret_version_pathz/GoogleSecretManagerMapping._secret_version_pathc   s#   € Ø×"Ñ"×6Ñ6°t×7GÑ7GÈÈgÓVÐVr1   c                óÀ   — 	 | j                   j                  | j                  ||«      ¬«      j                  j                  j                  d«      S # t        $ r Y y w xY w)N)rG   zUTF-8)r'   Úaccess_secret_versionrX   ÚpayloadÚdataÚdecodeÚ	Exception)r,   Úgcp_secret_namerW   s      r"   Ú_get_secret_valuez,GoogleSecretManagerMapping._get_secret_valuef   sZ   € ð	Ø×&Ñ&×<Ñ<Ø×.Ñ.¨ÀÓHð =ó ç‰g—d‘dŸ6™6 '›?ð+øô ò 	Ùð	ús   ‚AA Á	AÁAc                óV  — || j                   v r| j                   |   S | j                  j                  |«      }|€5| j                  s)| j                  j                  |j	                  «       «      }|r| j                  |«      | j                   |<   nt        |«      ‚| j                   |   S r)   )r&   rO   rH   r+   rI   r`   ÚKeyError)r,   rV   r_   s      r"   Ú__getitem__z&GoogleSecretManagerMapping.__getitem__n   sš   € Ø�$×&Ñ&Ñ&Ø×'Ñ'¨Ñ,Ð,à×/Ñ/×3Ñ3°CÓ8ˆØÐ"¨4×+?Ò+?Ø"×3Ñ3×7Ñ7¸¿	¹	»ÓDˆOáØ(,×(>Ñ(>¸Ó(OˆD× Ñ  Ò%ä˜3“-Ðà×#Ñ# CÑ(Ð(r1   c                ó,   — t        | j                  «      S r)   )r9   rS   r4   s    r"   Ú__len__z"GoogleSecretManagerMapping.__len__}   s   € Ü�4×%Ñ%Ó&Ð&r1   c                ó,   — t        | j                  «      S r)   )ÚiterrS   r4   s    r"   Ú__iter__z#GoogleSecretManagerMapping.__iter__€   s   € Ü�D×&Ñ&Ó'Ð'r1   N)r-   r   r.   Ústrr/   ÚboolÚreturnÚNone©rk   ri   )r=   ri   r>   ú	list[str]rk   ri   )rk   zdict[str, str])rk   rn   )Úlatest)rV   ri   rW   ri   rk   ri   )r_   ri   rW   ri   rk   ú
str | None)rV   ri   rk   rp   )rk   Úint)rk   zIterator[str])Ú__name__Ú
__module__Ú__qualname__Ú__annotations__r0   Úpropertyr5   r@   r   rO   rS   rX   r`   rc   re   rh   © r1   r"   r%   r%   +   sp   … Ø*Ó*Ø.Ó.ó.ð òIó ðIóð òó ðð, ò2ó ð2ôWôó)ó'ô(r1   r%   c                  óŽ   ‡ — e Zd ZU ded<   ded<   ded<   	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dˆ fd„Zdˆ fd„Zdd	„Zdd
„Zˆ xZS )Ú!GoogleSecretManagerSettingsSourcer   Ú_credentialsr   r'   ri   r*   c	                ó8  •— t         �t        �t        €
t        «        |r|st        «       \  }	}
|€	}|€t	        
t
        «      r|
}nt        d«      ‚|| _        || _        |r|| _	        nt        | j                  ¬«      | _	        t        ‰| �-  |||d||¬«       y )Nz½project_id is required to be specified either as an argument or from the google.auth.default. See https://google-auth.readthedocs.io/en/master/reference/google.auth.html#google.auth.default)ÚcredentialsF)r/   Ú
env_prefixÚenv_ignore_emptyÚenv_parse_none_strÚenv_parse_enums)r   r   r   r#   Ú
isinstanceri   ÚAttributeErrorrz   r*   r'   Úsuperr0   )r,   Úsettings_clsr|   r.   r}   r   r€   r-   r/   Ú_credsr*   Ú	__class__s              €r"   r0   z*GoogleSecretManagerSettingsSource.__init__‰   s¹   ø€ ô &Ð-´Ð1DÔH[ÐHcÜ%Ô'ñ ¡*Ü"5Ó"7ÑˆF�Kð ÐØ ˆKàÐÜ˜+¤sÔ+Ø(‘
ä$ð Tóð ð *5ˆÔØ *ˆÔáØ"/ˆDÕä"<È×IZÑIZÔ"[ˆDÔä‰ÑØØ)Ø!Ø"Ø1Ø+ð 	õ 	
r1   c                ó´  •— t        d„ |j                  D «       d«      }|rôt        | j                  t        «      rÚ| j                  ||«      D ]À  \  }}}| j                  j                  j                  |«      }|€?| j                  s3| j                  j                  j                  |j                  «       «      }|sŒp| j                  j                  ||«      }|€Œ�| j                  j                  j                  d«      r|||fc S |||fc S  d|dfS t        ‰| �9  ||«      \  }	}
}| j                  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  óV   K  — | ]!  }t        |t        «      sŒ|j                  –— Œ# y ­wr)   )r�   r   rW   )Ú.0Úms     r"   ú	<genexpr>zDGoogleSecretManagerSettingsSource.get_field_value.<locals>.<genexpr>È   s   è ø€ Òa¨QÄJÈqÔR_ÕD`˜qŸy�yÑaùs   ‚)˜)NÚpopulate_by_nameF)ÚnextÚmetadatar�   Úenv_varsr%   Ú_extract_field_inforO   rH   r/   rI   r`   r„   Úmodel_configrƒ   Úget_field_value)r,   ÚfieldÚ
field_nameÚsecret_versionÚ	field_keyÚenv_nameÚvalue_is_complexr_   Úenv_valÚvalrV   Ú
is_complexr†   s               €r"   r’   z1GoogleSecretManagerSettingsSource.get_field_valueº   sZ  ø€ ô Ña°%·.±.ÔaÐcgÓhˆñ
 œj¨¯©Ô8RÔSØ9=×9QÑ9QÐRWÐYcÓ9dò DÑ5�	˜8Ð%5Ø"&§-¡-×"@Ñ"@×"DÑ"DÀXÓ"N�Ø"Ð*°4×3FÒ3FØ&*§m¡m×&DÑ&D×&HÑ&HÈÏÉÓIYÓ&Z�Oâ"Ø"Ÿm™m×=Ñ=¸oÈ~Ó^�GØÑ*ð  ×,Ñ,×9Ñ9×=Ñ=Ð>PÔQØ#*¨JÐ8HÐ#HÒHØ&¨	Ð3CÐCÒCðDð  ˜ UÐ*Ð*ä$™wÑ6°u¸jÓIÑˆˆS�*ð ×Ñ×)Ñ)×-Ñ-Ð.@ÔAÀcÀoØ˜
 JÐ.Ð.Ø�C˜Ð#Ð#r1   c                óZ   — t        | j                  | j                  | j                  ¬«      S )N)r.   r/   )r%   r'   r*   r/   r4   s    r"   Ú_load_env_varsz0GoogleSecretManagerSettingsSource._load_env_varsè   s(   € Ü)Ø×Ñ¨D×,<Ñ,<ÈT×M`ÑM`ô
ð 	
r1   c                óh   — | j                   j                  › d| j                  ›d| j                  ›d�S )Nz(project_id=z, env_nested_delimiter=ú))r†   rr   r*   Úenv_nested_delimiterr4   s    r"   Ú__repr__z*GoogleSecretManagerSettingsSource.__repr__í   s=   € Ø—.‘.×)Ñ)Ð*¨,°t×7GÑ7GÐ6JÐJaÐbf×b{Ñb{Ða~Ð~ð  Að  	Ar1   )NNNNNNT)r„   ztype[BaseSettings]r|   zCredentials | Noner.   rp   r}   rp   r   rp   r€   úbool | Noner-   z!SecretManagerServiceClient | Noner/   r¢   rk   rl   )r“   r	   r”   ri   rk   ztuple[Any, str, bool])rk   zMapping[str, str | None]rm   )	rr   rs   rt   ru   r0   r’   r�   r¡   Ú__classcell__)r†   s   @r"   ry   ry   „   s›   ø… ØÓØ.Ó.ØÓð
 +/Ø!%Ø!%Ø)-Ø'+Ø;?Ø&*ð/
à(ð/
ð (ð/
ð ð	/
ð
 ð/
ð 'ð/
ð %ð/
ð 9ð/
ð $ð/
ð 
õ/
õb,$ó\
÷
Ar1   ry   )rk   rl   ) Ú
__future__r   Ú_annotationsr   Úcollections.abcr   r   Ú	functoolsr   Útypingr   r   Úpydantic.fieldsr	   Útypesr   Úenvr   r   r   r   r   r   r   r   Úpydantic_settings.mainr   r#   ri   r%   ry   Ú__all__rw   r1   r"   ú<module>r®      s}   ðÝ 2ã ß -Ý %ß %å %å !Ý "áÝ:Ý3ÝEæ3à€KØ!%ÐØÐóô$V( ¨¨c°D©j¨Ñ!9ô V(ôrjAÐ(9ô jAðZ /Ð0LÐ
M�r1   