
                             d Z ddlmZ ddlmZ ddlmZ ddlZddlZddlmZ ddl	Z	 ej                  d      Zd Zd	 Zd
 Zd Zd ZddZy)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                 2    dj                  | xs d||      S )Nz6projects/{project}/secrets/{secret}/versions/{version}*projectsecretversion)formatr	   s      /lib/googlecloudsdk/api_lib/functions/secrets.py_GetSecretVersionResourcer   "   s&    	A	H	HnVW 
I 
     c                     t        j                  t        t        j                  | j                         D ci c]  \  }}t        j                  |      | c}}                  S c c}}w )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   (   sj     
	 	 
-- '3&8&8&:&:lsE !005u<&:	
 	s    A'c                    i }| rS|j                  | D ci c]8  }|j                  t        |j                  |j                  |j
                        : c}       |r|D ]  }|j                  }|j                  }|j                  }|j                  r@|j                  D ]0  }|dz   |j                  z   }	t        |||j
                        }
|
||	<   2 s|dz   |z   }	t        ||d      }
|
||	<    t        |      S c c}w )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/',,>
!:vw"
 .B,)
* . ($.78VX 
 ,@'(! ($ 
L	))7	
s   =C6c                 H    t         j                  |       j                         S )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           
          g }t        j                  |       D ]=  \  }}t        |      }|j                  |j	                  ||d   |d   |d                ? |S )a@  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   sx     "$25--3.. !!56J ''" +h'y)	 	 	
	3 
&%r   c           	      ,   g }t        j                  t              }| j                         D ]`  \  }}|j	                  dd      \  }}|rt        j                  dd|      }t        |      }	||   j                  ||	d   |	d   |	d   d       b t        t        j                  |            D ]_  \  }}
|
d	   d   }|
d	   d   }|
D cg c]  }|j                  |d
   |d          }}|j                  |j                  ||||             a |S c c}w )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      sW    %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      sX    I &  '  	 ? 
 $.2::$$  *)*X	I&6.!r   