
                         h   S r SSKrSSKrSSKrSSKJr  SSKJr  SSKJ	r	  SSKJ
r
  SSKJ	r  Sr\R                  R                  \R                  R!                  \5      S5      r\
R&                  " \5      rS	r " S
 S\R,                  5      r " S S\R,                  5      rS rS r " S S\5      rg)zILibrary for marshalling binary output_messages to/from stdout and stderr.    N)	time_util)
exceptions)yaml)yaml_validatorz1.0.0zstructured_output_schema.yamlzVResources should be a JSON serializeable object or list of JSON serializeable objects.c                       \ rS rSrSrSrg)MessageParsingError(   zDError Raised if there is a problem converting to/from OutputMessage. N__name__
__module____qualname____firstlineno____doc____static_attributes__r
       Alib/googlecloudsdk/command_lib/util/anthos/structured_messages.pyr   r   (   s    Lr   r   c                       \ rS rSrSrSrg)InvalidMessageError,   zCError Raised if there an input string is not a valid OutputMessage.r
   Nr   r
   r   r   r   r   ,   s    Kr   r   c                     [         R                  " U 5      =(       d/    [         R                  " U 5      =(       a    [        S U  5       5      $ )zGReturn True if item is a dict like object or list of dict like objects.c              3   N   #    U  H  n[         R                  " U5      v   M     g 7fN)r   	dict_like).0xs     r   	<genexpr>!IsResourceLike.<locals>.<genexpr>3   s     %FAdnnQ&7&7s   #%)r   r   	list_likeall)items    r   IsResourceLiker"   0   s9    		 
H$.."6 #G"%%F%F"FHr   c                     [         R                  " U 5      n[        R                  U5        [        R
                  " US   5        UR                  S5      nU(       a  [        U5      (       d  [        [        5      eU$ ! [         R                  [        4 a  n[        SR                  X5      5      eSnAf[        R                  [        R                   R"                  4 a  n[%        SR                  X5      5      eSnAff = f)z=Validate that yaml string or object is a valid OutputMessage.	timestampresource_bodyz&Error loading YAML message [{}] :: {}.Nz)Invalid OutputMessage string [{}] :: [{}])r   load_MSG_VALIDATORValidater   Strptimegetr"   
ValueError_INVALID_RESOURCE_VALUE_MSGYAMLParseErrorr   formatr   ValidationErrorryamlerrorYAMLStreamErrorr   )	input_stryaml_object	resourceseves        r   ParseAndValidateMessager8   6   s    K))I&KK({;/00I	22233


z	* G
077	EG G

(
(%++*E*E	F K
3::9IK KKs$   A<A? ?DB331D$C>>Dc                       \ rS rSrSrS\SSSS4S jr " S S\5      r\	S 5       r
\	S	 5       r\	S
 5       r\	S 5       r\	S 5       r\	S 5       rS rS rS rS rS rS r\SS j5       rSrg)OutputMessageI   a  Class representing a structured output message.

Attributes:
  body: str, message body
  resource_body: Object, YAML/JSON formatted object containing resource output
  error_details: OutputMessage.ErrorDetail, message error details. Only
    present if OutputMessage.isError() == True.
  version: str, message format version
  timestamp: RFC 3339 encoded timestamp
  as_json: bool, if true default string representation of object will be JSON.
   Default is False, which will render this object as YAML.
  level: str, message log level
NFc                    U(       d  U(       a  U(       d  U(       d)  U(       d"  U(       d  [        SR                  X$U5      5      eX l        U(       a  [        U5      (       d  [	        [
        5      eX@l        U(       ab  [        U[        5      (       d  [        SR                  U5      5      eU R                  UR                  S5      UR                  S5      UU5      nOS nXl        X0l        Xl        X`l        Xpl        g )NzInvalid OutputMessage: Must contain one and only one of: body (+resource_body) or error_details: body=[{}], resource_body=[{}], error_details=[{}]z'ErrorDetails must be a dict object:[{}]r1   context)r   r.   _bodyr"   r+   r,   _resource_body
isinstancedictErrorDetailsr*   _err_version_ts_as_json_level)	selfr$   bodyversionr%   error_detailsas_jsonlevelerrs	            r   __init__OutputMessage.__init__X   s     -]-3 6$}5	7 7 J^M::233't,,!5<<]KM 	Mm//8+//	:%#%c
 cIMHMKr   c                   F    \ rS rSrSrSrSrSS jrS rS r	S	 r
SS
 jrSrg)OutputMessage.ErrorDetails}   z(Data class for ErrorDetail sub-messages.z
[{error}].z  Additional details: [{context}]Nc                 f    Xl         X l        X0l        X@l        U R                  (       d  SU l        g g )Nr1   )r1   r=   rL   rM   )rH   	error_msgr=   rL   rM   s        r   rO   #OutputMessage.ErrorDetails.__init__   s)    jlljZZ
 r   c                     [         R                  " U R                  S9nU R                  (       a  U R                  US'   U$ )N)r1   r=   )collectionsOrderedDictr1   r=   rH   outs     r   AsDict!OutputMessage.ErrorDetails.AsDict   s/    ##$**5c	Ijr   c                     U R                   (       a$  [        R                  " U R                  5       5      $ [        R
                  " U R                  5       SS9$ )NT)
round_trip)rL   jsondumpsr\   r   dumprH   s    r   __str__"OutputMessage.ErrorDetails.__str__   s5    	zz$++-((YYt{{}66r   c                     [        U[        R                  5      (       d  gU R                  UR                  :H  =(       a    U R                  UR                  :H  $ NF)r@   r:   rB   r1   r=   rH   others     r   __eq__!OutputMessage.ErrorDetails.__eq__   s=    }99::ZZ5;;&H4<<5==+HHr   c                    U=(       d    U R                   nUR                  U R                  U R                  R	                  5       S9nU R
                  (       a2  U=(       d    U R                  nUR                  U R
                  S9nX4-  nU$ )z%Render formatted ErrorDetails string.)r1   rM   )r=   )_DEFAULT_ERROR_FORMATr.   r1   rM   
capitalizer=   _DEFAULT_CONTEXT_FORMAT)rH   error_formatcontext_formatoutput_stringcontext_strings        r   Format!OutputMessage.ErrorDetails.Format   sy    "@d&@&@m#**

$**"7"7"9 + ;m	'G4+G+G'..t||.D'r   )rL   r=   r1   rM   )NFr1   )NN)r   r   r   r   r   rm   ro   rO   r\   rd   rj   rt   r   r
   r   r   rB   rR   }   s+    2(@7
I
	r   rB   c                     U R                   $ r   )r>   rc   s    r   rI   OutputMessage.body   s    ::r   c                     U R                   $ r   )r?   rc   s    r   r%   OutputMessage.resource_body   s    r   c                     U R                   $ r   rC   rc   s    r   rK   OutputMessage.error_details   s    99r   c                     U R                   $ r   )rD   rc   s    r   rJ   OutputMessage.version   s    ==r   c                     U R                   $ r   )rE   rc   s    r   r$   OutputMessage.timestamp   s    88Or   c                     U R                   $ r   )rG   rc   s    r   rM   OutputMessage.level   s    ;;r   c                 t   [         R                  " U R                  U R                  S9nU R                  (       a  U R                  US'   U R
                  (       a  U R
                  US'   U R                  (       a  U R                  R                  5       US'   U R                  (       a  U R                  US'   U$ )z"Returns a dict for the attributes.)rJ   r$   rI   r%   rK   rM   )	rX   rY   rJ   r$   rI   r%   rK   r\   rM   rZ   s     r   r\   OutputMessage.AsDict   s    

!
!$,,,0NN<CyyIIc&k!//c/!//668c/zzZZc'lJr   c                     U R                   S L$ r   r{   rc   s    r   IsErrorOutputMessage.IsError   s    99D  r   c                 L    U R                  5       n[        R                  " USS9$ )NT)	sort_keys)r\   r`   ra   rH   msgs     r   ToJSONOutputMessage.ToJSON   s    
++-C::cT**r   c                 N    U R                  5       n[        R                  " U5      $ r   )r\   r   rb   r   s     r   ToYAMLOutputMessage.ToYAML   s    
++-C99S>r   c                 b    U R                   (       a  U R                  OU R                  nU" 5       $ r   )rF   r   r   )rH   
serializers     r   rd   OutputMessage.__str__   s     $4;;J<r   c                 `   [        U[        5      (       d  gU R                  UR                  :H  =(       ay    U R                  UR                  :H  =(       aY    U R                  UR                  :H  =(       a9    U R
                  UR
                  :H  =(       a    U R                  UR                  :H  $ rg   )r@   r:   rK   rI   r%   rJ   r$   rh   s     r   rj   OutputMessage.__eq__   s    e]++%"5"55 .II#.%"5"55. LLEMM). NNeoo-	/r   c           
          [        U5      nU " UR                  S5      UR                  S5      UR                  S5      UR                  S5      UR                  S5      UR                  S5      US9$ )z/Parse a YAML/JSON string into an OutputMessage.rI   r%   rK   rJ   r$   rM   )rI   r%   rK   rJ   r$   rM   rL   )r8   r*   )clsr3   rL   yaml_msgs       r   
FromStringOutputMessage.FromString   se     'y1HHLL(%\\/:%\\/:||I.!k2\\'*   r   )rF   r>   rC   rG   r?   rE   rD   )F)r   r   r   r   r   SCHEMA_VERSIONrO   objectrB   propertyrI   r%   rK   rJ   r$   rM   r\   r   r   r   rd   rj   classmethodr   r   r
   r   r   r:   r:   I   s      %!!#J'V 'R            !+/ 
  
 r   r:   )r   rX   r`   osgooglecloudsdk.command_lib.utilr   googlecloudsdk.corer   core_exceptionsr   r   ruamel.yamlr0   r   pathjoindirname__file___SCHEMA_PATH	Validatorr'   r,   Errorr   r   r"   r8   r   r:   r
   r   r   <module>r      s    P   	 6 = $ .  RWW__X6<>)),7 O M/// ML/// LHK&f F f r   