
    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dS )    )annotationsN)IteratorMapping)cached_property)TYPE_CHECKINGAny)	FieldInfo   )SecretVersion   )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    d/root/projects/qq-shell/venv/lib/python3.11/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<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!S )-GoogleSecretManagerMappingzdict[str, str | None]_loaded_secretsr   _secret_clientsecret_client
project_idstrcase_sensitiveboolr   r   c                >    i | _         || _        || _        || _        d S N)r(   r)   _project_id_case_sensitive)selfr*   r+   r-   s       r$   __init__z#GoogleSecretManagerMapping.__init__/   s(    !+%-    c                @    | j                             | j                  S r0   )r)   common_project_pathr1   r3   s    r$   _gcp_project_pathz,GoogleSecretManagerMapping._gcp_project_path5   s    "66t7GHHHr5   
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)r3   r:   r;   winners       r$   _select_case_insensitive_secretz:GoogleSecretManagerMapping._select_case_insensitive_secret9   s    z??aa=  	B=
 = =U_ = == = =		
 	
 	
 	
 r5   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 )r)   list_secretsr9   parse_secret_pathnamegetr2   lowerappenditemsrE   )r3   mappingnormalized_groupssecretsrI   rM   r:   r;   s           r$   _secret_name_mapz+GoogleSecretManagerMapping._secret_name_mapH   s   "$24%22$:P2QQ 	; 	;F&88EEII(TVWWD GDM' ;!ZZ\\
%66646%j1!*-44T:::# 	c*;*A*A*C*C c c&
J&*&J&J:Wa&b&b
##r5   c                N    t          | j                                                  S r0   )listrU   keysr8   s    r$   _secret_namesz(GoogleSecretManagerMapping._secret_names_   s    D)..00111r5   latestkeyversionc                D    | j                             | j        ||          S r0   )r)   secret_version_pathr1   )r3   r[   r\   s      r$   _secret_version_pathz/GoogleSecretManagerMapping._secret_version_pathc   s     "66t7GgVVVr5   gcp_secret_name
str | Nonec                    	 | j                             |                     ||                    j        j                            d          S # t          $ r Y d S w xY w)N)rM   zUTF-8)r)   access_secret_versionr_   payloaddatadecode	Exception)r3   r`   r\   s      r$   _get_secret_valuez,GoogleSecretManagerMapping._get_secret_valuef   sm    	&<<..HH =  d66'??+  	 	 	44	s   AA 
AAc                D   || j         v r| j         |         S | j                            |          }|3| j        s,| j                            |                                          }|r|                     |          | j         |<   nt          |          | j         |         S r0   )r(   rU   rN   r2   rO   rh   KeyError)r3   r[   r`   s      r$   __getitem__z&GoogleSecretManagerMapping.__getitem__n   s    $&&&',,/33C88"4+?""377		DDO 	 (,(>(>(O(OD %%3--#C((r5   intc                *    t          | j                  S r0   )r@   rY   r8   s    r$   __len__z"GoogleSecretManagerMapping.__len__}   s    4%&&&r5   Iterator[str]c                *    t          | j                  S r0   )iterrY   r8   s    r$   __iter__z#GoogleSecretManagerMapping.__iter__   s    D&'''r5   N)r*   r   r+   r,   r-   r.   r   r   r   r,   )r:   r,   r;   r<   r   r,   )r   rF   )r   r<   )rZ   )r[   r,   r\   r,   r   r,   )r`   r,   r\   r,   r   ra   )r[   r,   r   ra   )r   rl   )r   ro   )__name__
__module____qualname____annotations__r4   propertyr9   rE   r   rU   rY   r_   rh   rk   rn   rr    r5   r$   r'   r'   +   s-        ****..... . . . I I I XI       _, 2 2 2 X2W W W W W    ) ) ) )' ' ' '( ( ( ( ( (r5   r'   c                  l     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)   r,   r1   NTsettings_clstype[BaseSettings]credentialsCredentials | Noner+   ra   
env_prefixenv_parse_none_strenv_parse_enumsbool | Noner*   !SecretManagerServiceClient | Noner-   r   r   c	                   t           t          t          t                       |r|st                      \  }	}
||	}|'t	          |
t
                    r|
}nt          d          || _        || _        |r|| _	        nt          | j                  | _	        t                                          |||d||           d S )Nzproject_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)r   F)r-   r   env_ignore_emptyr   r   )r   r   r   r%   
isinstancer,   AttributeErrorr|   r1   r)   superr4   )r3   r}   r   r+   r   r   r   r*   r-   _credsr1   	__class__s              r$   r4   z*GoogleSecretManagerSettingsSource.__init__   s     &-1DH[Hc%'''  	8* 	8"5"7"7FK  K+s++ (

$ T   *5 * 	\"/D"<IZ"["["[D)!"1+ 	 	
 	
 	
 	
 	
r5   fieldr	   
field_nametuple[Any, str, bool]c                   t          d |j        D             d          }|rt          | j        t                    r|                     ||          D ]\  }}}| j        j                            |          }|8| j        s1| 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 r0   )r   r   r\   ).0ms     r$   	<genexpr>zDGoogleSecretManagerSettingsSource.get_field_value.<locals>.<genexpr>   s4      aaQJqR_D`D`aqyaaaaaar5   Npopulate_by_nameF)nextmetadatar   env_varsr'   _extract_field_inforU   rN   r-   rO   rh   r}   model_configr   get_field_value)r3   r   r   secret_version	field_keyenv_namevalue_is_complexr`   env_valvalr[   
is_complexr   s               r$   r   z1GoogleSecretManagerSettingsSource.get_field_value   s    aa%.aaacghh
  	+j8RSS 	+9=9Q9QRWYc9d9d D D5	8%5"&-"@"D"DX"N"N"*43F*&*m&D&H&HIYIY&Z&ZO" D"m==o~^^G*  ,9==>PQQ I#*J8H#HHHH&	3CCCCC U**$ww66ujIIS* )--.@AA 	/co
J..C##r5   Mapping[str, str | None]c                D    t          | j        | j        | j                  S )N)r+   r-   )r'   r)   r1   r-   r8   s    r$   _load_env_varsz0GoogleSecretManagerSettingsSource._load_env_vars   s)    )D,<TM`
 
 
 	
r5   c                @    | j         j         d| j        d| j        dS )Nz(project_id=z, env_nested_delimiter=))r   rt   r1   env_nested_delimiterr8   s    r$   __repr__z*GoogleSecretManagerSettingsSource.__repr__   sE    .)  A  At7G  A  Abfb{  A  A  A  	Ar5   )NNNNNNT)r}   r~   r   r   r+   ra   r   ra   r   ra   r   r   r*   r   r-   r   r   r   )r   r	   r   r,   r   r   )r   r   rs   )	rt   ru   rv   rw   r4   r   r   r   __classcell__)r   s   @r$   r{   r{      s         ....
 +/!%!%)-'+;?&*/
 /
 /
 /
 /
 /
 /
b,$ ,$ ,$ ,$ ,$ ,$\
 
 
 

A A A A A A A Ar5   r{   )r   r   ) 
__future__r   _annotationsr   collections.abcr   r   	functoolsr   typingr   r   pydantic.fieldsr	   typesr   envr   r   r   r   r   r   r!   r   pydantic_settings.mainr   r%   r,   r'   r{   __all__ry   r5   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!%   $V( V( V( V( V(cDj!9 V( V( V(rjA jA jA jA jA(9 jA jA jAZ /0L
Mr5   