<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
3
hr                 @   s  d Z dZyddlmZ W n  ek
r8   ddlmZ Y nX ddlZddlZddlZddl	Z	ddl
Z
ddlZddlmZ ddlmZ ddlmZ dZeejjejjejjejjgZeejjejjgZeejjejjgZd	Zd
ZdZe	j e
j!dZ"e	j dZ#G dd de$Z%G dd de%Z&G dd de%Z'd=ddZ(d>ddZ)dd Z*G dd de+Z,dd Z-d d! Z.d"d# Z/d?d$d%Z0d@d&d'Z1e
j2e3f Z4G d(d) d)e+Z5dAd*d+Z6d,d- Z7d.d/ Z8d0d1 Z9d2d3gd4d5gd4d5gd6d7gd8d9gd4d5gd:d;gd<Z:dS )Bat  Contains routines for printing protocol messages in JSON format.

Simple usage example:

  # Create a proto object and serialize it to a json format string.
  message = my_proto_pb2.MyMessage(foo='bar')
  json_string = json_format.MessageToJson(message)

  # Parse a json format string to proto object.
  message = json_format.Parse(json_string, my_proto_pb2.MyMessage())
zjieluo@google.com (Jie Luo)    )OrderedDictN)methodcaller)
descriptor)symbol_databasez%Y-%m-%dT%H:%M:%SZInfinityz	-InfinityZNaNzF[\ud800-\udbff](?![\udc00-\udfff])|(?<![\ud800-\udbff])[\udc00-\udfff]z\[[a-zA-Z0-9\._]*\]$c               @   s   e Zd ZdZdS )Errorz'Top-level module error for json_format.N)__name__
__module____qualname____doc__ r   r   !/usr/lib/python3.6/json_format.pyr   P   s   r   c               @   s   e Zd ZdZdS )SerializeToJsonErrorz&Thrown if serialization to JSON fails.N)r   r   r	   r
   r   r   r   r   r   T   s   r   c               @   s   e Zd ZdZdS )
ParseErrorz Thrown in case of parsing error.N)r   r   r	   r
   r   r   r   r   r   X   s   r   F   c             C   s   t ||}|j| ||S )a_  Converts protobuf message to JSON format.

  Args:
    message: The protocol buffers message instance to serialize.
    including_default_value_fields: If True, singular primitive fields,
        repeated fields, and map fields will always be serialized.  If
        False, only serialize non-empty fields.  Singular message fields
        and oneof fields are not affected by this option.
    preserving_proto_field_name: If True, use the original proto field
        names as defined in the .proto file. If False, convert the field
        names to lowerCamelCase.
    indent: The JSON object will be pretty-printed with this indent level.
        An indent level of 0 or negative will only insert newlines.
    sort_keys: If True, then the output will be sorted by field names.

  Returns:
    A string containing the JSON formatted protocol buffer message.
  )_PrinterToJsonString)messageincluding_default_value_fieldspreserving_proto_field_nameindent	sort_keysprinterr   r   r   MessageToJson\   s    r   c             C   s   t ||}|j| S )a  Converts protobuf message to a dictionary.

  When the dictionary is encoded to JSON, it conforms to proto3 JSON spec.

  Args:
    message: The protocol buffers message instance to serialize.
    including_default_value_fields: If True, singular primitive fields,
        repeated fields, and map fields will always be serialized.  If
        False, only serialize non-empty fields.  Singular message fields
        and oneof fields are not affected by this option.
    preserving_proto_field_name: If True, use the original proto field
        names as defined in the .proto file. If False, convert the field
        names to lowerCamelCase.

  Returns:
    A dict representation of the protocol buffer message.
  )r   _MessageToJsonObject)r   r   r   r   r   r   r   MessageToDictx   s    r   c             C   s"   | j tjjko | jjo | jj jS )N)typer   FieldDescriptorTYPE_MESSAGEmessage_typeZhas_options
GetOptionsZ	map_entry)fieldr   r   r   _IsMapEntry   s    r!   c               @   sj   e Zd ZdZdddZdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd ZdS )r   z)JSON format printer for protocol message.Fc             C   s   || _ || _d S )N)r   r   )selfr   r   r   r   r   __init__   s    z_Printer.__init__c             C   s   | j |}tj|||dS )N)r   r   )r   jsondumps)r"   r   r   r   jsr   r   r   r      s    
z_Printer.ToJsonStringc             C   sL   |j }|j}t|r| j|S |tkr<tt| d || S i }| j||S )zEConverts message to an object according to Proto3 JSON Specification.r   )
DESCRIPTOR	full_name_IsWrapperMessage_WrapperMessageToJsonObject_WKTJSONMETHODSr   _RegularMessageToJsonObject)r"   r   message_descriptorr(   r&   r   r   r   r      s    
z_Printer._MessageToJsonObjectc                s  |j  }yҐx|D ]\ }jr, j}n j}t r jjd }i }x>|D ]6}t|trn|rhd}	qrd}	n|}	j	||| ||	< qPW |||< q j
tjjkr fdd|D ||< q jr }
|
jj jr|
jtjjkr|
j
tjjkr|
j}
d|
j|f }j	 |||< qj	 |||< qW jr|j}x|jD ]  j
tjjkrd jtjjks@ jrpq@jr j}n j}||krq@t ri ||< n, j
tjjkrg ||< nj	  j||< q@W W n6 tk
r } ztdj j|W Y dd}~X nX |S )	z?Converts normal message according to Proto3 JSON Specification.valuetruefalsec                s   g | ]}j  |qS r   )_FieldToJsonObject).0k)r    r"   r   r   
<listcomp>   s   z8_Printer._RegularMessageToJsonObject.<locals>.<listcomp>z[%s.%s]z#Failed to serialize {0} field: {1}.N) 
ListFieldsr   name	json_namer!   r   fields_by_name
isinstanceboolr1   labelr   r   LABEL_REPEATEDis_extensionZcontaining_typer   Zmessage_set_wire_formatr   r   ZLABEL_OPTIONALr(   r   r'   fieldscpp_typeCPPTYPE_MESSAGEcontaining_oneofZdefault_value
ValueErrorr   format)r"   r   r&   r>   r.   r6   Zv_fieldZjs_mapkeyZrecorded_keyfr-   er   )r    r"   r   r,      sf    






"z$_Printer._RegularMessageToJsonObjectc             C   s   |j tjjkr| j|S |j tjjkr^|jjj|d}|dk	rD|j	S |j
jdkrT|S tdn|j tjjkr|jtjjkrtj|jdS |S nZ|j tjjkrt|S |j tkrt|S |j tkrtj|r|dk rtS tS tj|rtS |S )z<Converts field value according to Proto3 JSON Specification.Nproto3zKEnum field contains an integer value which can not mapped to an enum value.zutf-8g        )r?   r   r   r@   r   CPPTYPE_ENUM	enum_typevalues_by_numbergetr6   filesyntaxr   CPPTYPE_STRINGr   
TYPE_BYTESbase64Z	b64encodedecodeCPPTYPE_BOOLr:   _INT64_TYPESstr_FLOAT_TYPESmathZisinf_NEG_INFINITY	_INFINITYZisnan_NAN)r"   r    r.   
enum_valuer   r   r   r1      s2    





z_Printer._FieldToJsonObjectc             C   s   |j  si S t }|j}||d< t|}|j|j |j}|j}t|rZ| j	||d< |S |t
krtt
| d || |d< |S | j||S )z<Converts Any message according to Proto3 JSON Specification.z@typer.   r   )r5   r   type_url_CreateMessageFromTypeUrlZParseFromStringr.   r'   r(   r)   r*   r+   r   r,   )r"   r   r&   r[   sub_messager-   r(   r   r   r   _AnyMessageToJsonObject  s"    z _Printer._AnyMessageToJsonObjectc             C   s   |j  S )z8Converts message according to Proto3 JSON Specification.)r   )r"   r   r   r   r   _GenericMessageToJsonObject+  s    z$_Printer._GenericMessageToJsonObjectc             C   sd   |j d}|dks|dkrdS |dkr2| j|jS |dkrB|j}n
t||}|jj| }| j||S )z>Converts Value message according to Proto3 JSON Specification.ZkindN
null_value
list_valuestruct_value)Z
WhichOneof_ListValueMessageToJsonObjectra   rb   getattrr'   r8   r1   )r"   r   Zwhichr.   Zoneof_descriptorr   r   r   _ValueMessageToJsonObject1  s    

z"_Printer._ValueMessageToJsonObjectc                s    fdd|j D S )zBConverts ListValue message according to Proto3 JSON Specification.c                s   g | ]} j |qS r   )re   )r2   r.   )r"   r   r   r4   C  s   z:_Printer._ListValueMessageToJsonObject.<locals>.<listcomp>)values)r"   r   r   )r"   r   rc   A  s    
z&_Printer._ListValueMessageToJsonObjectc             C   s.   |j }i }x|D ]}| j|| ||< qW |S )z?Converts Struct message according to Proto3 JSON Specification.)r>   re   )r"   r   r>   retrD   r   r   r   _StructMessageToJsonObjectF  s
    
z#_Printer._StructMessageToJsonObjectc             C   s   | j |jjd |jS )Nr.   )r1   r'   r8   r.   )r"   r   r   r   r   r*   N  s    z$_Printer._WrapperMessageToJsonObjectN)FF)r   r   r	   r
   r#   r   r   r,   r1   r^   r_   re   rc   rh   r*   r   r   r   r   r      s    
E!r   c             C   s   | j jdkS )Nzgoogle/protobuf/wrappers.proto)rL   r6   )r-   r   r   r   r)   S  s    r)   c             C   s8   i }x.| D ]&\}}||kr(t dj||||< q
W |S )Nz'Failed to load JSON: duplicate key {0}.)r   rC   )r&   resultr6   r.   r   r   r   _DuplicateCheckerW  s    rj   c             C   sZ   t j }| jdd }y|jj|}W n" tk
rH   tdj| Y nX |j|}| S )N/   z1Can not find message descriptor by type_url: {0}.)	r   ZDefaultsplitZpoolZFindMessageTypeByNameKeyError	TypeErrorrC   ZGetPrototype)r[   ZdbZ	type_namer-   Zmessage_classr   r   r   r\   `  s    
r\   c             C   s   t | tjs| jd} y(tjdk r.tj| }ntj| td}W n4 t	k
rr } zt
djt|W Y dd}~X nX t|||S )ab  Parses a JSON representation of a protocol message into a message.

  Args:
    text: Message JSON representation.
    message: A protocol buffer message to merge into.
    ignore_unknown_fields: If True, do not raise errors for unknown fields.

  Returns:
    The same message passed as argument.

  Raises::
    ParseError: On JSON parsing problems.
  zutf-8r      )Zobject_pairs_hookzFailed to load JSON: {0}.N)r   rq   )r9   six	text_typerQ   sysversion_infor$   loadsrj   rB   r   rC   rT   	ParseDict)textr   ignore_unknown_fieldsr&   rF   r   r   r   Parsen  s     

$rz   c             C   s   t |}|j| | |S )a.  Parses a JSON dictionary representation into a message.

  Args:
    js_dict: Dict representation of a JSON message.
    message: A protocol buffer message to merge into.
    ignore_unknown_fields: If True, do not raise errors for unknown fields.

  Returns:
    The same message passed as argument.
  )_ParserConvertMessage)Zjs_dictr   ry   parserr   r   r   rw     s    rw   c               @   s`   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd ZdS )r{   z(JSON format parser for protocol message.c             C   s
   || _ d S )N)ry   )r"   ry   r   r   r   r#     s    z_Parser.__init__c             C   sT   |j }|j}t|r"| j|| n.|tkrDtt| d |||  n| j|| dS )zConvert a JSON object into a message.

    Args:
      value: A JSON object.
      message: A WKT or regular protocol message to record the data.

    Raises:
      ParseError: In case of convert problems.
    rl   N)r'   r(   r)   _ConvertWrapperMessager+   r   _ConvertFieldValuePair)r"   r.   r   r-   r(   r   r   r   r|     s    
z_Parser.ConvertMessagec             C   s  g }|j }tdd |jD }xl|D ]b}y|j|d}|sN|jj|d}| rtj|r|jsttdj	|j
|dd }dj|jddd }|jj|}|s| jrw&tdj	|j
||j||krtdj	|j j
||j| |jdk	r(|jj}	|	|krtd	j	|j j
|	|j|	 || }
|
dkrz|jtjjkrl|jj
d
krlt||j}d|_n|j|j w&t|r|j|j | j|
|| n,|jtjjkrt|j|j t|
t stdj	||
|jtjjkr8x|
D ]B}t||jj! }|dkr$|j j
d
kr$td| j"|| qW n:x|
D ]0}|dkrTtdt||jjt#|| q>W nZ|jtjjkr|j$r|j| }nt||j}|j%  | j"|
| nt&||jt#|
| W q& tk
r$ } z6|r|jdkrtdj	||ntt'|W Y dd}~X q& t(k
rV } ztdj	||W Y dd}~X q& t)k
r } ztdj	||W Y dd}~X q&X q&W dS )zConvert field value pairs into regular message.

    Args:
      js: A JSON object to convert the field value pairs.
      message: A regular protocol message to record the data.

    Raises:
      ParseError: In case of problems converting.
    c             s   s   | ]}|j |fV  qd S )N)r7   )r2   rE   r   r   r   	<genexpr>  s   z1_Parser._ConvertFieldValuePair.<locals>.<genexpr>Nz)Message type {0} does not have extensionsrl   .zVMessage type "{0}" has no field named "{1}".
 Available Fields(except extensions): {2}z9Message type "{0}" should not have multiple "{1}" fields.z?Message type "{0}" should not have multiple "{1}" oneof fields.zgoogle.protobuf.Valuer   z.repeated field {0} must be in [] which is {1}.zAnull is not allowed to be used as an element in a repeated field.zFailed to parse {0} field: {1}zFailed to parse {0} field: {1}.rm   rm   )*r'   dictr>   rK   r8   _VALID_EXTENSION_NAMEmatchZis_extendabler   rC   r(   joinrn   Z
ExtensionsZ_FindExtensionByNamery   appendrA   r6   r?   r   r   r@   r   rd   r`   
ClearFieldr!   _ConvertMapFieldValuer;   r<   r9   listaddr|   _ConvertScalarFieldValuer=   ZSetInParentsetattrrT   rB   rp   )r"   r&   r   namesr-   Zfields_by_json_namer6   r    Z
identifierZ
oneof_namer.   r]   itemrF   r   r   r   r     s    












 z_Parser._ConvertFieldValuePairc             C   s   t |tr| rdS y|d }W n tk
r<   tdY nX t|}|j}|j}t|rl| j|d | n8|t	krt
t	| d |d ||  n|d= | j|| |j |_||_dS )z/Convert a JSON representation into Any message.Nz@typez*@type is missing when parsing any message.r.   rl   )r9   r   ro   r   r\   r'   r(   r)   r~   r+   r   r   ZSerializeToStringr.   r[   )r"   r.   r   r[   r]   r-   r(   r   r   r   _ConvertAnyMessage  s$    
z_Parser._ConvertAnyMessagec             C   s   |j | dS )z?Convert a JSON representation into message with FromJsonString.N)ZFromJsonString)r"   r.   r   r   r   r   _ConvertGenericMessage7  s    z_Parser._ConvertGenericMessagec             C   s   t |tr| j||j njt |tr4| j||j nP|dkrDd|_n@t |trV||_	n.t |t
jrj||_nt |tr|||_ntddS )z1Convert a JSON representation into Value message.Nr   z"Unexpected type for Value message.)r9   r   _ConvertStructMessagerb   r   _ConvertListValueMessagera   r`   r:   Z
bool_valuerr   Zstring_typesZstring_value_INT_OR_FLOATZnumber_valuer   )r"   r.   r   r   r   r   _ConvertValueMessage=  s    



z_Parser._ConvertValueMessagec             C   sF   t |tstdj||jd x|D ]}| j||jj  q(W dS )z5Convert a JSON representation into ListValue message.z%ListValue must be in [] which is {0}.rf   N)r9   r   r   rC   r   r   rf   r   )r"   r.   r   r   r   r   r   r   N  s    


z _Parser._ConvertListValueMessagec             C   s@   t |tstdj|x"|D ]}| j|| |j|  qW dS )z2Convert a JSON representation into Struct message.z&Struct must be in a dict which is {0}.N)r9   r   r   rC   r   r>   )r"   r.   r   rD   r   r   r   r   W  s    

z_Parser._ConvertStructMessagec             C   s"   |j jd }t|dt|| dS )z3Convert a JSON representation into Wrapper message.r.   N)r'   r8   r   r   )r"   r.   r   r    r   r   r   r~   `  s    z_Parser._ConvertWrapperMessagec             C   s   t |tstdj|j||jjd }|jjd }x^|D ]V}t||d}|jt	j
jkrv| j|| t||j|  q:t|| |t||j|< q:W dS )a5  Convert map field value for a message map field.

    Args:
      value: A JSON object to convert the map field value.
      message: A protocol message to record the converted data.
      field: The descriptor of the map field to be converted.

    Raises:
      ParseError: In case of convert problems.
    z-Map field {0} must be in a dict which is {1}.rD   r.   TN)r9   r   r   rC   r6   r   r8   r   r?   r   r   r@   r|   rd   )r"   r.   r   r    Z	key_fieldZvalue_fieldrD   	key_valuer   r   r   r   e  s    

z_Parser._ConvertMapFieldValueN)r   r   r	   r
   r#   r|   r   r   r   r   r   r   r~   r   r   r   r   r   r{     s   j		r{   c             C   s$  |j tkrt| S |j tkr$t| S |j tjjkr<t| |S |j tjj	krz|j
tjjkrbtj| S tj| rttd| S n|j tjjkr |jjj| d}|dkryt| }|jjj|d}W n( tk
r   tdj| |jjY nX |dkr|jjdkr|S tdj| |jj|jS dS )aB  Convert a single scalar field value.

  Args:
    value: A scalar value to convert the scalar field value.
    field: The descriptor of the field to convert.
    require_str: If True, the field value must be a str.

  Returns:
    The converted scalar field value

  Raises:
    ParseError: In case of convert problems.
  zUnpaired surrogateNz)Invalid enum value {0} for enum type {1}.rG   )r?   
_INT_TYPES_ConvertIntegerrU   _ConvertFloatr   r   rR   _ConvertBoolrN   r   rO   rP   Z	b64decode_UNPAIRED_SURROGATE_PATTERNsearchr   rH   rI   Zvalues_by_namerK   intrJ   rB   rC   r(   rL   rM   number)r.   r    require_strrZ   r   r   r   r   r     s6    






r   c             C   sR   t | tr"| j  r"tdj| t | tjrJ| jddkrJtdj| t| S )zConvert an integer.

  Args:
    value: A scalar value to convert.

  Returns:
    The integer value.

  Raises:
    ParseError: If an integer couldn't be consumed.
  zCouldn't parse integer: {0}. rl   zCouldn't parse integer: "{0}".rm   )	r9   float
is_integerr   rC   rr   rs   findr   )r.   r   r   r   r     s
    r   c             C   sp   | dkrt dyt| S  tk
rj   | tkr8tdS | tkrHtdS | tkrXtdS t dj| Y nX dS )z!Convert an floating point number.nanz.Couldn't parse float "nan", use "NaN" instead.z-infinfzCouldn't parse float: {0}.N)r   r   rB   rW   rX   rY   rC   )r.   r   r   r   r     s    r   c             C   s@   |r*| dkrdS | dkrdS t dj| t| ts<t d| S )zConvert a boolean value.

  Args:
    value: A scalar value to convert.
    require_str: If True, value must be a str.

  Returns:
    The bool parsed.

  Raises:
    ParseError: If a boolean value couldn't be consumed.
  r/   Tr0   Fz$Expected "true" or "false", not {0}.z&Expected true or false without quotes.)r   rC   r9   r:   )r.   r   r   r   r   r     s    
r   r^   r   r_   r   rc   r   rh   r   re   r   )zgoogle.protobuf.Anyzgoogle.protobuf.Durationzgoogle.protobuf.FieldMaskzgoogle.protobuf.ListValuezgoogle.protobuf.Structzgoogle.protobuf.Timestampzgoogle.protobuf.Value)FFr   F)FF)F)F)F);r
   
__author__collectionsr   ImportErrorZordereddictrP   r$   rV   rerr   rt   operatorr   Zgoogle.protobufr   r   Z_TIMESTAMPFOMAT	frozensetr   ZCPPTYPE_INT32ZCPPTYPE_UINT32ZCPPTYPE_INT64ZCPPTYPE_UINT64r   rS   ZCPPTYPE_FLOATZCPPTYPE_DOUBLErU   rX   rW   rY   compileur   r   	Exceptionr   r   r   r   r   r!   objectr   r)   rj   r\   rz   rw   Zinteger_typesr   r   r{   r   r   r   r   r+   r   r   r   r   <module>)   s   
   
 
 <	

 f
0