
                             S r SSKJr  SSKJr  SSKJr  SSKrSSKrSSKJr  SSK	r	\R                  " S5      rS rS	 rS
 rS rS rSS jrg)zBUtility for working with secret environment variables and volumes.    )absolute_import)division)unicode_literalsN)secrets_configzS^projects/(?P<project>[^/]+)/secrets/(?P<secret>[^/]+)/versions/(?P<version>[^/]+)$c                 4    SR                  U =(       d    SXS9$ )Nz6projects/{project}/secrets/{secret}/versions/{version}*projectsecretversion)formatr	   s      /lib/googlecloudsdk/api_lib/functions/secrets.py_GetSecretVersionResourcer   "   s$    	A	H	HnV 
I 
     c                     [         R                  " [        [        R                  " U R                  5        VVs0 s H  u  p[        R                  " U5      U_M     snn5      5      5      $ s  snnf )zCanonicalizes all keys in the dict and returns a new dict.

Args:
  secrets_dict: Existing secrets configuration dict.

Returns:
  Canonicalized secrets configuration dict.
)collectionsOrderedDictsortedsix	iteritemsitemsr   CanonicalizeKey)secrets_dictkeyvalues      r   _CanonicalizedDictr   (   sh     
	 	 
-- '3&8&8&:&:ls !005u<&:	
 	s   #A,c                    0 nU (       aV  UR                  U  Vs0 s H9  nUR                  [        UR                  UR                  UR
                  5      _M;     sn5        U(       a  U H  nUR                  nUR                  nUR                  nUR                  (       aA  UR                   H/  nUS-   UR                  -   n	[        XgUR
                  5      n
XU	'   M1     My  US-   U-   n	[        XgS5      n
XU	'   M     [        U5      $ s  snf )a/  Converts secrets from message to flattened secrets configuration dict.

Args:
  secret_env_vars: list of cloudfunctions_v1|v2alpha|v2beta.SecretEnvVars
  secret_volumes: list of cloudfunctions_v1|v2alpha|v2beta.SecretVolumes

Returns:
  OrderedDict[str, str], Secrets configuration sorted ordered dict.
:z:/latest)
updater   r   	projectIdr   r   	mountPathversionspathr   )secret_env_varssecret_volumesr   sevsecret_volume
mount_pathr
   r   r   secrets_config_keysecrets_config_values              r   GetSecretsAsDictr,   =   s    ,
 '		
 ' GG.szz3;;  '		
 ' **j''g##f			$--G)C/',,>
!:w"
 .B)
* . ($.78X 
 ,@'(! ($ 
L	))7	
s   A D	c                 H    [         R                  U 5      R                  5       $ )zSplits a secret version resource into its components.

Args:
  secret_ref: Secret version resource reference.

Returns:
  A dict with entries for project, secret and version.
) _SECRET_VERSION_RESOURCE_PATTERNsearch	groupdict)
secret_refs    r   _ParseSecretRefr2   i   s     
*	0	0	<	F	F	HHr   c           
          / n[         R                  " U 5       H:  u  p4[        U5      nUR                  UR	                  UUS   US   US   S95        M<     U$ )a2  Converts secrets from dict to cloud function SecretEnvVar message list.

Args:
  secret_env_vars_dict: Secret environment variables configuration dict.
    Prefers a sorted ordered dict for consistency.
  messages: The GCF messages module to use.

Returns:
  A list of cloud function SecretEnvVar message.
r
   r   r   )r   r!   r   r   )r   r   r2   appendSecretEnvVar)secret_env_vars_dictmessagessecret_environment_variablessecret_env_var_keysecret_env_var_valuer1   s         r   SecretEnvVarsToMessagesr;   u   su     "$25--3. !!56J ''" +h'y)	 	 	
	3 
&%r   c           
      6   / n[         R                  " [        5      nU R                  5        Hd  u  pVUR	                  SS5      u  pxU(       a  [
        R                  " SSU5      n[        U5      n	XG   R                  UU	S   U	S   U	S   S.5        Mf     [        [        R                  " U5      5       H\  u  pzU
S	   S   nU
S	   S   nU
 Vs/ s H  nUR                  US
   US   S9PM     nnUR                  UR                  UUUUS95        M^     U$ s  snf )a  Converts secrets from dict to cloud function SecretVolume message list.

Args:
  secret_volumes: Secrets volumes configuration dict. Prefers a sorted ordered
    dict for consistency.
  messages: The GCF messages module to use.
  normalize_for_v2: If set, normalizes the SecretVolumes to the format the
    GCFv2 API expects.

Returns:
  A list of Cloud Function SecretVolume messages.
r      z^/ r
   r   r   )r$   r
   r   r   r   r$   )r$   r   )r"   r!   r   r#   )r   defaultdictlistr   splitresubr2   r4   r   r   r   SecretVersionSecretVolume)r&   r7   normalize_for_v2secret_volumes_messagesmount_path_to_secretssecret_volume_keysecret_volume_valuer)   secret_file_pathr1   secretsr
   secret_valuer   r#   s                  r   SecretVolumesToMessagesrN      sM    %11$70>0D0D0F,#4#:#:3#B Jr+;< !45J%,, i(X&i(	.  1G $CMM2G$HIjaj#G1:h'L F 	F6NF9<MN   "" 	 	 	
 J  
! s    D)F)__doc__
__future__r   r   r   r   rB   $googlecloudsdk.command_lib.functionsr   r   compiler.   r   r   r,   r2   r;   rN    r   r   <module>rT      sV    I &  '  	 ? 
 $&::$$  *)*X	I&6.!r   