3 SÉLjrã@súdZdZyddlmZWn ek r8ddlmZYnXddlZddlZddlZddl Z ddl Z ddl Z ddl m Z ddlmZddlmZdZeejjejjejjejjgƒZeejjejjgƒZeejjejjgƒZd Zd Zd Ze j e j!d ƒƒZ"e j d ƒZ#Gdd„de$ƒZ%Gdd„de%ƒZ&Gdd„de%ƒZ'd=dd„Z(d>dd„Z)dd„Z*Gdd„de+ƒZ,dd„Z-d d!„Z.d"d#„Z/d?d$d%„Z0d@d&d'„Z1e j2e3fZ4Gd(d)„d)e+ƒZ5dAd*d+„Z6d,d-„Z7d.d/„Z8d0d1„Z9d2d3gd4d5gd4d5gd6d7gd8d9gd4d5gd:d;gd<œZ:dS)BatContains 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()) zjieluo@google.com (Jie Luo)é)Ú OrderedDictN)Ú methodcaller)Ú descriptor)Úsymbol_databasez%Y-%m-%dT%H:%M:%SZInfinityz -InfinityZNaNzF[\ud800-\udbff](?![\udc00-\udfff])|(?|D]6}t|tƒrn|rhd} qrd} n|} ˆj |||ƒ|| <qPW|||<qˆj t j j kr¼‡‡fdd„|Dƒ||<qˆj�rˆ} | jjƒjrö| jt j jkrö| j t j jkrö| j} d| j|f}ˆj ˆ|ƒ||<qˆj ˆ|ƒ||<qWˆj�rÚ|j} x | jD]–‰ˆj t j j k�rdˆjt j jk�s@ˆj�rp�q@ˆj�r€ˆj}nˆj}||k�r”�q@tˆƒ�r¨i||<n,ˆj t j j k�rÂg||<nˆj ˆˆjƒ||<�q@WWn6tk �r} ztdjˆj| ƒƒ‚WYdd} ~ XnX|S) z?Converts normal message according to Proto3 JSON Specification.ÚvalueÚtrueÚfalsecsg|]}ˆjˆ|ƒ‘qSr )Ú_FieldToJsonObject)Ú.0Úk)r r"r r ú Ësz8_Printer._RegularMessageToJsonObject..z[%s.%s]z#Failed to serialize {0} field: {1}.N) Ú ListFieldsrÚnameÚ json_namer!rÚfields_by_nameÚ isinstanceÚboolr1ÚlabelrrÚLABEL_REPEATEDÚ is_extensionZcontaining_typerZmessage_set_wire_formatrrZLABEL_OPTIONALr(rr'ÚfieldsÚcpp_typeÚCPPTYPE_MESSAGEÚcontaining_oneofZ default_valueÚ ValueErrorr Úformat) r"rr&r>r.r6Zv_fieldZjs_mapÚkeyZ recorded_keyÚfr-Úer )r r"r r,°sf           "z$_Printer._RegularMessageToJsonObjectcCsî|jtjjkr|j|ƒS|jtjjkr^|jjj|dƒ}|dk rD|j S|j j dkrT|St dƒ‚nŒ|jtjj kr�|jtjjkrŠtj|ƒjdƒS|SnZ|jtjjkr¦t|ƒS|jtkr¸t|ƒS|jtkrêtj|ƒrÜ|dkrØtStStj|ƒrêtS|S)zConverts Value message according to Proto3 JSON Specification.ZkindNÚ null_valueÚ list_valueÚ struct_value)Z WhichOneofÚ_ListValueMessageToJsonObjectrarbÚgetattrr'r8r1)r"rZwhichr.Zoneof_descriptorr r r Ú_ValueMessageToJsonObject1s    z"_Printer._ValueMessageToJsonObjectcs‡fdd„|jDƒS)zBConverts ListValue message according to Proto3 JSON Specification.csg|]}ˆj|ƒ‘qSr )re)r2r.)r"r r r4Csz:_Printer._ListValueMessageToJsonObject..)Úvalues)r"rr )r"r rcAs z&_Printer._ListValueMessageToJsonObjectcCs.|j}i}x|D]}|j||ƒ||<qW|S)z?Converts Struct message according to Proto3 JSON Specification.)r>re)r"rr>ÚretrDr r r Ú_StructMessageToJsonObjectFs  z#_Printer._StructMessageToJsonObjectcCs|j|jjd|jƒS)Nr.)r1r'r8r.)r"rr r r r*Nsz$_Printer._WrapperMessageToJsonObjectN)FF)rrr r r#rrr,r1r^r_rercrhr*r r r r r˜s  E!rcCs |jjdkS)Nzgoogle/protobuf/wrappers.proto)rLr6)r-r r r r)Ssr)cCs8i}x.|D]&\}}||kr(tdj|ƒƒ‚|||<q W|S)Nz'Failed to load JSON: duplicate key {0}.)rrC)r&Úresultr6r.r r r Ú_DuplicateCheckerWs  rjc CsZtjƒ}|jdƒd}y|jj|ƒ}Wn"tk rHtdj|ƒƒ‚YnX|j|ƒ}|ƒS)Nú/éz1Can not find message descriptor by type_url: {0}.éÿÿÿÿ) rZDefaultÚsplitZpoolZFindMessageTypeByNameÚKeyErrorÚ TypeErrorrCZ GetPrototype)r[ZdbZ type_namer-Z message_classr r r r\`s r\cCs€t|tjƒs|jdƒ}y(tjdkr.tj|ƒ}ntj|td�}Wn4t k rr}zt dj t |ƒƒƒ‚WYdd}~XnXt |||ƒS)abParses 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. zutf-8ré)Zobject_pairs_hookzFailed to load JSON: {0}.N)rrq)r9ÚsixÚ text_typerQÚsysÚ version_infor$ÚloadsrjrBrrCrTÚ ParseDict)ÚtextrÚignore_unknown_fieldsr&rFr r r ÚParsens   $rzcCst|ƒ}|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)Zjs_dictrryÚparserr r r rwˆs  rwc@s`eZdZdZdd„Zdd„Zdd„Zdd „Zd d „Zd d „Z dd„Z dd„Z dd„Z dd„Z dS)r{z(JSON format parser for protocol message.cCs ||_dS)N)ry)r"ryr r r r#žsz_Parser.__init__cCsT|j}|j}t|ƒr"|j||ƒn.|tkrDtt|d||ƒ|ƒn |j||ƒdS)zÒConvert 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. rlN)r'r(r)Ú_ConvertWrapperMessager+rÚ_ConvertFieldValuePair)r"r.rr-r(r r r r|¢s z_Parser.ConvertMessagecCs’g}|j}tdd„|jDƒƒ}�xl|D�]b}�y¢|j|dƒ}|sN|jj|dƒ}| r¤tj|ƒr¤|jsttdj |j ƒƒ‚|dd…}dj |j dƒdd…ƒ}|j j|ƒ}|sÆ|jr°w&tdj |j ||jƒƒ‚||krâtdj |jj |ƒƒ‚|j|ƒ|jdk �r(|jj} | |k�rtd j |jj | ƒƒ‚|j| ƒ||} | dk�rz|jtjjk�rl|jj d k�rlt||jƒ} d | _n |j|jƒw&t|ƒ�r¢|j|jƒ|j| ||ƒ�n,|jtjjk�rt|j|jƒt| t ƒ�sÚtd j || ƒƒ‚|jtjjk�r8x†| D]B} t||jƒj!ƒ} | dk�r$| jj d k�r$td ƒ‚|j"| | ƒ�qðWn:x”| D]0} | dk�rTtd ƒ‚t||jƒjt#| |ƒƒ�q>WnZ|jtjjk�rº|j$�r˜|j |} n t||jƒ} | j%ƒ|j"| | ƒnt&||jt#| |ƒƒWq&tk �r$} z6|�r|jdk�rtdj || ƒƒ‚n tt'| ƒƒ‚WYdd} ~ Xq&t(k �rV} ztdj || ƒƒ‚WYdd} ~ Xq&t)k �rˆ} ztdj || ƒƒ‚WYdd} ~ Xq&Xq&WdS)zöConvert 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. css|]}|j|fVqdS)N)r7)r2rEr r r ú Ász1_Parser._ConvertFieldValuePair..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.zgoogle.protobuf.Valuerz.repeated field {0} must be in [] which is {1}.zAnull is not allowed to be used as an element in a repeated field.zFailed to parse {0} field: {1}zFailed to parse {0} field: {1}.rmrm)*r'Údictr>rKr8Ú_VALID_EXTENSION_NAMEÚmatchZ is_extendablerrCr(ÚjoinrnZ ExtensionsZ_FindExtensionByNameryÚappendrAr6r?rrr@rrdr`Ú ClearFieldr!Ú_ConvertMapFieldValuer;r<r9ÚlistÚaddr|Ú_ConvertScalarFieldValuer=Z SetInParentÚsetattrrTrBrp)r"r&rÚnamesr-Zfields_by_json_namer6r Z identifierZ oneof_namer.r]ÚitemrFr r r rµs˜                           z_Parser._ConvertFieldValuePairc Cs¸t|tƒr| rdSy |d}Wntk r<tdƒ‚YnXt|ƒ}|j}|j}t|ƒrl|j|d|ƒn8|t kr’t t |d|d|ƒ|ƒn|d=|j ||ƒ|j ƒ|_ ||_dS)z/Convert a JSON representation into Any message.Nz@typez*@type is missing when parsing any message.r.rl)r9r‚rorr\r'r(r)r~r+rrZSerializeToStringr.r[)r"r.rr[r]r-r(r r r Ú_ConvertAnyMessages$   z_Parser._ConvertAnyMessagecCs|j|ƒdS)z?Convert a JSON representation into message with FromJsonString.N)ZFromJsonString)r"r.rr r r Ú_ConvertGenericMessage7sz_Parser._ConvertGenericMessagecCsˆt|tƒr|j||jƒnjt|tƒr4|j||jƒnP|dkrDd|_n@t|tƒrV||_ n.t|t j ƒrj||_ nt|t ƒr|||_ntdƒ‚dS)z1Convert a JSON representation into Value message.Nrz"Unexpected type for Value message.)r9r‚Ú_ConvertStructMessagerbr‰Ú_ConvertListValueMessagerar`r:Z bool_valuerrZ string_typesZ string_valueÚ _INT_OR_FLOATZ number_valuer)r"r.rr r r Ú_ConvertValueMessage=s     z_Parser._ConvertValueMessagecCsFt|tƒstdj|ƒƒ‚|jdƒx|D]}|j||jjƒƒq(WdS)z5Convert a JSON representation into ListValue message.z%ListValue must be in [] which is {0}.rfN)r9r‰rrCr‡r”rfrŠ)r"r.rrŽr r r r’Ns     z _Parser._ConvertListValueMessagecCs@t|tƒstdj|ƒƒ‚x"|D]}|j|||j|ƒqWdS)z2Convert a JSON representation into Struct message.z&Struct must be in a dict which is {0}.N)r9r‚rrCr”r>)r"r.rrDr r r r‘Ws    z_Parser._ConvertStructMessagecCs"|jjd}t|dt||ƒƒdS)z3Convert a JSON representation into Wrapper message.r.N)r'r8rŒr‹)r"r.rr r r r r~`s z_Parser._ConvertWrapperMessagecCs˜t|tƒstdj|j|ƒƒ‚|jjd}|jjd}x^|D]V}t||dƒ}|jt j j krv|j ||t ||jƒ|ƒq:t|||ƒt ||jƒ|<q:WdS)a5Convert 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}.rDr.TN)r9r‚rrCr6rr8r‹r?rrr@r|rd)r"r.rr Z key_fieldZ value_fieldrDÚ key_valuer r r rˆes       z_Parser._ConvertMapFieldValueN)rrr r r#r|rr�r�r”r’r‘r~rˆr r r r r{›sj  r{c Cs$|jtkrt|ƒS|jtkr$t|ƒS|jtjjkr)s†         <    f 0