
                         B   d Z ddlmZ ddlmZ ddlmZ ddl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j                   dd      Z ej                   dd      Z G d de
j&                        Zd Zd Z	 ddZd ZefdZefdZd Zd Z ee        ee       y)z(utilities function for partner metadata.    )absolute_import)division)unicode_literalsN)encoding)extra_types)
exceptions)apis)arg_parserscomputealphabetac                       e Zd ZdZy)&NullValueInAddPartnerMetadataExceptionz0Null values not allowed in add-partner-metadata.N)__name__
__module____qualname____doc__     <lib/googlecloudsdk/api_lib/compute/partner_metadata_utils.pyr   r   "   s    8r   r   c                     | j                  dt        j                         di dt        j                         | j                  dt        j                         dd       y	)
z/Adds --metadata and --metadata-from-file flags.z--partner-metadatazlPartner metadata specifying namespace and its entries. The entries can be key-value pairs or in json format.zNAMESPACE/KEY=VALUE)typehelpdefaultmetavaractionz--partner-metadata-from-filez6Path to a local json file containing partner metadata.LOCAL_FILE_PATH)r   r   r   N)add_argumentr
   ArgDictUpdateActionFileContents)parsers    r   AddPartnerMetadataArgsr#   &   sd     7 #%%  
 	$##%
B  r   c                 B    t        | j                  | j                        S )zcreate partner metadata from the given args.

  Args:
    args: args containing partner-metadata or partner-metadata-from-file flags

  Returns:
    python dict contains partner metadata from given args.
  )_CreatePartnerMetadataDictpartner_metadatapartner_metadata_from_file)argss    r   CreatePartnerMetadataDictr)   =   s"     
$
T<<
 r   c                    i }|rt        j                  |      }i }|j                         D ]  }d||   v r	||   ||<   d||   i||<    | j                         D ]{  \  }}|j	                  d      ^}}||vrdi i||<   ||   } |r9|dd D ]  }|| v r| |   ni | |<   | |   }  t        j                  |      | |d   <   dt        j                  |      ||<   } |S )zcreate partner metadata from the given args.

  Args:
    partner_metadata: partner metadata dictionary.
    partner_metadata_from_file: partner metadata file content.

  Returns:
    python dict contains partner metadata from given args.
  entries/N)jsonloadskeysitemssplit)	r&   r'   partner_metadata_filepartner_metadata_dictkeyvalue	namespacer+   entrys	            r   r%   r%   K   s+     JJ'AB"'')c)#..#8#=C $-/DS/I#JC 	 *
 %**,jc5))C.I--*3RI&,Y73B<%',0@'@U#b 	 ,E2	  
 '+jj&7wr{#)-E):I& - 
r   c                     | j                         D ]4  }| |   t        d      t        | |   t              s't	        | |          6 y )Nz0Null values are not allowed in partner metadata.)r0   r   
isinstancedictValidatePartnerMetadata)r&   r5   s     r   r<   r<   q   sP    ""$c$2
<  "3'..s34 %r   c           
         |j                         }| d| vr|S | d   	d|_        |S |j                   j                         |_        | d   j                         D ]q  \  }}|j                  j                  j                  |j                   j                  j                  |t        j                  |t        j                                     s |S )zConvert structured entries dictionary to message.

  Args:
    structured_entries: dictionary represents partner metadata structuredEntries
    compute_messages: compute messages object

  Returns:
    StructuredEntries message

  Nr+   r5   r6   )StructuredEntriesr+   EntriesValuer1   additionalPropertiesappendAdditionalPropertyr   DictToMessager   	JsonValue)structured_entriescompute_messagesstructured_entries_messager5   r6   s        r   ConvertStructuredEntriesrI   {   s      0AAC94F#F%%	"*)-&%%((557 $ 'y1779jc5&&;;BB**77JJ811%9N9NO 	K 	
 : 
$#r   c           
          |j                   j                         }| j                         D ]O  \  }}|j                  j	                  |j                   j                  j                  |t        ||                   Q |S )zConvert partner metadata dictionary to message.

  Args:
    partner_metadata_dict: dictionary represents partner metadata
    compute_messages: compute messages object

  Returns:
    partnerMetadata message

  r>   )PartnerMetadataPartnerMetadataValuer1   rA   rB   rC   rI   )r4   rG   partner_metadata_messager7   rF   s        r   #ConvertPartnerMetadataDictToMessagerN      s     &&;;=  (='B'B'D#i#1188((==PP*+=?OP 	Q 	
 (E 
"!r   c                     di i}| j                   j                  D ]1  }t        j                  |j                        |d   |j
                  <   3 t        j                  |      S )Nr+   )r+   rA   r   MessageToDictr6   r5   r.   dumps)rH   structured_entries_dictstructured_entrys      r   ConvertStructuredEntriesToJsonrT      sf    &O "))>>  	/556 I&'7';';< ? 
+	,,r   c                 ~     d } fd}t         d      r( t        j                  ||       j                         yy)zAdd encoding for StructuredEntries message to convert it to json string.

  Args:
    messages: message represntantion of compute api.
  c                 2    | j                   yt        |       S )Nnull)r+   rT   )rH   s    r   EncodeStructuredEntrieszH_AddEncodingForStructuredEntriesMessage.<locals>.EncodeStructuredEntries   s    !))1)*DEEr   c                 F    t        j                  |       }t        |      S N)r.   r/   rI   )rF   rR   messagess     r   DecodeStructuredEntrieszH_AddEncodingForStructuredEntriesMessage.<locals>.DecodeStructuredEntries   s!    "jj);<#$;XFFr   r?   )encoderdecoderN)hasattrr   RegisterCustomMessageCodecr?   )r[   rX   r\   s   `  r   '_AddEncodingForStructuredEntriesMessagera      sG    F
G X*+H'''1H  " ,r   rZ   )r   
__future__r   r   r   r.   apitools.base.pyr   r   googlecloudsdk.api_lib.computer   googlecloudsdk.api_lib.utilr	   	core_apisgooglecloudsdk.callioper
   GetMessagesModulealpha_messagebeta_messageErrorr   r#   r)   r%   r<   rI   rN   rT   ra   r   r   r   <module>rl      s     / &  '  % ( 5 9 /+	++Iw?*y**9f=9Z-=-= 9. 26#L5 *7$@ -:"4-"( ( 6 ' 5r   