Duac @s+dZdZddlZddlZddlZejrBeZnddlm Z ddl m Z ddl m Z ddd d d gZ e je je je jfZejd ejZejd ejZee jje jjgZeddfZdZdefdYZdefdYZ de!fdYZ"e#e#e#e#e$e#e$de$d Z%dZ&de#e#e#e#e$e#e$e$d Z'de#e#e#e#e$e$dZ(de#e#e#e#e$e$dZ)dZ*de!fdYZ+e#e#e$d Z,e#e#e$d!Z-e#e#e$d"Z.e#e#e$d#Z/d$e!fd%YZ0d&Z1d'Z2d(Z3d)Z4d*e!fd+YZ5e5Z6d,Z7d-Z8d.Z9d/Z:d0Z;d1Z<e#e#d2Z=e#e#d3Z>e#e#d4Z?e#d5Z@d6ZAd7ZBd8ZCdS(9sbContains routines for printing protocol messages in text format. Simple usage example: # Create a proto object and serialize it to a text proto string. message = my_proto_pb2.MyMessage(foo='bar') text_proto = text_format.MessageToString(message) # Parse a text proto string. message = text_format.Parse(text_proto, my_proto_pb2.MyMessage()) s kenton@google.com (Kenton Varda)iN(t type_checkers(t descriptor(t text_encodingtMessageToStringt PrintMessaget PrintFieldtPrintFieldValuetMerges-?inf(?:inity)?f?snanf?t't"sgoogle.protobuf.AnytErrorcBseZdZRS(s'Top-level module error for text_format.(t__name__t __module__t__doc__(((s?/usr/lib/python2.7/site-packages/google/protobuf/text_format.pyR Ist ParseErrorcBs2eZdZddddZdZdZRS(s3Thrown in case of text parsing or tokenizing error.cCs|dk r[|dk r[t|}|dk rF|dj|7}ndj||}n|dk rtt|j|ntt|j||_||_dS(Ns:{0}s {0} : {1}(tNonetstrtformattsuperRt__init__t_linet_column(tselftmessagetlinetcolumntloc((s?/usr/lib/python2.7/site-packages/google/protobuf/text_format.pyRPs    cCs|jS(N(R(R((s?/usr/lib/python2.7/site-packages/google/protobuf/text_format.pytGetLine]scCs|jS(N(R(R((s?/usr/lib/python2.7/site-packages/google/protobuf/text_format.pyt GetColumn`sN(R R R RRRR(((s?/usr/lib/python2.7/site-packages/google/protobuf/text_format.pyRMs t TextWritercBs,eZdZdZdZdZRS(cCs.tjrtj|_ntj|_dS(N(tsixtPY2tiotBytesIOt_writertStringIO(Rtas_utf8((s?/usr/lib/python2.7/site-packages/google/protobuf/text_format.pyRfs cCs@tjr0t|tjr0|jd}q0n|jj|S(Nsutf-8(RRt isinstancet text_typetencodeR"twrite(Rtval((s?/usr/lib/python2.7/site-packages/google/protobuf/text_format.pyR(ls cCs |jjS(N(R"tclose(R((s?/usr/lib/python2.7/site-packages/google/protobuf/text_format.pyR*rscCs |jjS(N(R"tgetvalue(R((s?/usr/lib/python2.7/site-packages/google/protobuf/text_format.pyR+us(R R RR(R*R+(((s?/usr/lib/python2.7/site-packages/google/protobuf/text_format.pyRds   ic Csjt|} t| ||||||||| } | j|| j} | j|rf| jS| S(sConvert protobuf message to text format. Floating point values can be formatted compactly with 15 digits of precision (which is the most that IEEE 754 "double" can guarantee) using float_format='.15g'. To ensure that converting to text and back to a proto will result in an identical value, float_format='.17g' should be used. Args: message: The protocol buffers message. as_utf8: Produce text output in UTF8 format. as_one_line: Don't introduce newlines between fields. pointy_brackets: If True, use angle brackets instead of curly braces for nesting. use_index_order: If True, print fields of a proto message using the order defined in source code instead of the field number. By default, use the field number order. float_format: If set, use this to specify floating point number formatting (per the "Format Specification Mini-Language"); otherwise, str() is used. use_field_number: If True, print field numbers instead of names. descriptor_pool: A DescriptorPool used to resolve Any types. indent: The indent level, in terms of spaces, for pretty print. message_formatter: A function(message, indent, as_one_line): unicode|None to custom format selected sub-messages (usually based on message type). Use to pretty print parts of the protobuf for easier diffing. Returns: A string of the text formatted protocol buffer message. (Rt_PrinterRR+R*trstrip( RR$t as_one_linetpointy_bracketstuse_index_ordert float_formattuse_field_numbertdescriptor_pooltindenttmessage_formattertouttprintertresult((s?/usr/lib/python2.7/site-packages/google/protobuf/text_format.pyRys&       cCs1|jtjjko0|jjo0|jjjS(N(ttypeRtFieldDescriptort TYPE_MESSAGEt message_typet has_optionst GetOptionst map_entry(tfield((s?/usr/lib/python2.7/site-packages/google/protobuf/text_format.pyt _IsMapEntrys c Cs8t||||||||| | } | j|dS(N(R,R( RR6R4R$R.R/R0R1R2R3R5R7((s?/usr/lib/python2.7/site-packages/google/protobuf/text_format.pyRs   c Cs5t|||||||| } | j||dS(s%Print a single field name/value pair.N(R,R( R@tvalueR6R4R$R.R/R0R1R5R7((s?/usr/lib/python2.7/site-packages/google/protobuf/text_format.pyRs c Cs5t|||||||| } | j||dS(s0Print a single field value (not including name).N(R,R( R@RBR6R4R$R.R/R0R1R5R7((s?/usr/lib/python2.7/site-packages/google/protobuf/text_format.pyRs cCs|dkr+ddlm}|j}nddlm}|j}y|j|}Wntk rndSX|j|}|S(s!Returns a protobuf message instance. Args: type_name: Fully-qualified protobuf message type name string. descriptor_pool: DescriptorPool instance. Returns: A Message instance of type matching type_name, or None if the a Descriptor wasn't found matching type_name. i(R3(tsymbol_databaseN(Rtgoogle.protobufR3tDefaultRCtFindMessageTypeByNametKeyErrort GetPrototype(t type_nameR3tpool_modRCtdatabasetmessage_descriptorR<((s?/usr/lib/python2.7/site-packages/google/protobuf/text_format.pyt_BuildMessageFromTypeNames   R,c BsheZdZdeeeed ed d d ZdZdZdZdZ dZ dZ RS( s)Text format printer for protocol message.ic Cs^||_||_||_||_||_||_||_||_| |_| |_ dS(sZInitialize the Printer. Floating point values can be formatted compactly with 15 digits of precision (which is the most that IEEE 754 "double" can guarantee) using float_format='.15g'. To ensure that converting to text and back to a proto will result in an identical value, float_format='.17g' should be used. Args: out: To record the text format result. indent: The indent level for pretty print. as_utf8: Produce text output in UTF8 format. as_one_line: Don't introduce newlines between fields. pointy_brackets: If True, use angle brackets instead of curly braces for nesting. use_index_order: If True, print fields of a proto message using the order defined in source code instead of the field number. By default, use the field number order. float_format: If set, use this to specify floating point number formatting (per the "Format Specification Mini-Language"); otherwise, str() is used. use_field_number: If True, print field numbers instead of names. descriptor_pool: A DescriptorPool used to resolve Any types. message_formatter: A function(message, indent, as_one_line): unicode|None to custom format selected sub-messages (usually based on message type). Use to pretty print parts of the protobuf for easier diffing. N( R6R4R$R.R/R0R1R2R3R5( RR6R4R$R.R/R0R1R2R3R5((s?/usr/lib/python2.7/site-packages/google/protobuf/text_format.pyRs%         cCst|j|j}|r|j|j|jjd|jd|jf|j ||jj|j rwdndt St SdS(s5Serializes if message is a google.protobuf.Any field.s%s[%s]t s N( RMtTypeNameR3tMergeFromStringRBR6R(R4ttype_urlt_PrintMessageFieldValueR.tTruetFalse(RRtpacked_message((s?/usr/lib/python2.7/site-packages/google/protobuf/text_format.pyt_TryPrintAsAnyMessage.s  $ cCsu|j||j|j}|dkr+tS|j}|jd|j|j||j|jrjdndtS(NRNs (R5R4R.RRTR6R(RS(RRt formattedR6((s?/usr/lib/python2.7/site-packages/google/protobuf/text_format.pyt_TryCustomFormatMessage;s   cCs%|jr|j|rdS|jjtkrA|j|rAdS|j}|jrl|jddnx|D]\}}t |rxt |D]5}|j d|d||}|j ||qWqs|j tjjkr x1|D]}|j ||qWqs|j ||qsWdS(seConvert protobuf message to text format. Args: message: The protocol buffers message. NtkeycSs |djS(Ni(tindex(tx((s?/usr/lib/python2.7/site-packages/google/protobuf/text_format.pytStRB(R5RXt DESCRIPTORt full_namet_ANY_FULL_TYPE_NAMERVt ListFieldsR0tsortRAtsortedt GetEntryClassRtlabelRR:tLABEL_REPEATED(RRtfieldsR@RBRYt entry_submsgtelement((s?/usr/lib/python2.7/site-packages/google/protobuf/text_format.pyRFs"    cCsa|j}|jd|j|jr?|jt|jn|jr|jd|jjj r|j t j j kr|jt j jkr|j|jjn|j|j|jdn;|j t j jkr|j|jjn|j|j|jt j jkr'|jdn|j|||jrP|jdn |jddS(s%Print a single field name/value pair.RNt[t]s: s N(R6R(R4R2Rtnumbert is_extensiontcontaining_typeR>tmessage_set_wire_formatR9RR:R;RetLABEL_OPTIONALR<R_t TYPE_GROUPtnametcpp_typetCPPTYPE_MESSAGERR.(RR@RBR6((s?/usr/lib/python2.7/site-packages/google/protobuf/text_format.pyRds*     cCs|jrd}d}n d}d}|jra|jjd||j||jj|nZ|jjd||jd7_|j||jd8_|jjd|j|dS( Ntt{t}s %s s %s iRN(R/R.R6R(RR4(RRBtopenbtcloseb((s?/usr/lib/python2.7/site-packages/google/protobuf/text_format.pyRRs     cCs|j}|jtjjkr.|j|n|jtjjkr|jjj |d}|dk rz|j |j q|j t |n'|jtjjkr,|j dt|tjr|jd}n|}|jtjjkrt}n |j}|j tj|||j dn|jtjjkrg|rW|j dq|j dnP|jtkr|jdk r|j dj|j|n|j t |dS(sPrint a single field value (not including name). For repeated fields, the value should be a single element. Args: field: The descriptor of the field to be printed. value: The value of the field. s"sutf-8ttruetfalses{1:{0}}N(R6RsRR:RtRRt CPPTYPE_ENUMt enum_typetvalues_by_numbertgetRR(RrRtCPPTYPE_STRINGR%RR&R'R9t TYPE_BYTESRTR$RtCEscapet CPPTYPE_BOOLt _FLOAT_TYPESR1R(RR@RBR6t enum_valuet out_valuet out_as_utf8((s?/usr/lib/python2.7/site-packages/google/protobuf/text_format.pyRs2     N( R R R RTRRRVRXRRRRR(((s?/usr/lib/python2.7/site-packages/google/protobuf/text_format.pyR,s  &  ! cCs^t|ts<tjr*|jd}q<|jd}nt|jd|||d|S(sParses a text representation of a protocol message into a message. NOTE: for historical reasons this function does not clear the input message. This is different from what the binary msg.ParseFrom(...) does. Example a = MyProto() a.repeated_field.append('test') b = MyProto() text_format.Parse(repr(a), b) text_format.Parse(repr(a), b) # repeated_field contains ["test", "test"] # Binary version: b.ParseFromString(a.SerializeToString()) # repeated_field is now "test" Caller is responsible for clearing the message as needed. Args: text: Message text representation. message: A protocol buffer message to merge into. allow_unknown_extension: if True, skip over missing extensions and keep parsing allow_field_number: if True, both field number and field name are allowed. descriptor_pool: A DescriptorPool used to resolve Any types. Returns: The same message passed as argument. Raises: ParseError: On text parsing problems. sutf-8s R3(R%RRtPY3tdecodeR't ParseLinestsplit(ttextRtallow_unknown_extensiontallow_field_numberR3((s?/usr/lib/python2.7/site-packages/google/protobuf/text_format.pytParses% cCs^t|ts<tjr*|jd}q<|jd}nt|jd|||d|S(s^Parses a text representation of a protocol message into a message. Like Parse(), but allows repeated values for a non-repeated field, and uses the last one. Args: text: Message text representation. message: A protocol buffer message to merge into. allow_unknown_extension: if True, skip over missing extensions and keep parsing allow_field_number: if True, both field number and field name are allowed. descriptor_pool: A DescriptorPool used to resolve Any types. Returns: The same message passed as argument. Raises: ParseError: On text parsing problems. sutf-8s R3(R%RRRRR't MergeLinesR(RRRRR3((s?/usr/lib/python2.7/site-packages/google/protobuf/text_format.pyRs  cCs%t||d|}|j||S(sParses a text representation of a protocol message into a message. Args: lines: An iterable of lines of a message's text representation. message: A protocol buffer message to merge into. allow_unknown_extension: if True, skip over missing extensions and keep parsing allow_field_number: if True, both field number and field name are allowed. descriptor_pool: A DescriptorPool used to resolve Any types. Returns: The same message passed as argument. Raises: ParseError: On text parsing problems. R3(t_ParserR(tlinesRRRR3tparser((s?/usr/lib/python2.7/site-packages/google/protobuf/text_format.pyRs cCs%t||d|}|j||S(sParses a text representation of a protocol message into a message. Args: lines: An iterable of lines of a message's text representation. message: A protocol buffer message to merge into. allow_unknown_extension: if True, skip over missing extensions and keep parsing allow_field_number: if True, both field number and field name are allowed. descriptor_pool: A DescriptorPool used to resolve Any types. Returns: The same message passed as argument. Raises: ParseError: On text parsing problems. R3(RR(RRRRR3R((s?/usr/lib/python2.7/site-packages/google/protobuf/text_format.pyR3s RcBseZdZeed dZdZdZdZdZ dZ dZ dZ d Z ed Zd ZRS( s(Text format parser for protocol message.cCs||_||_||_dS(N(RRR3(RRRR3((s?/usr/lib/python2.7/site-packages/google/protobuf/text_format.pyRQs  cCs:t|ts!|jd}n|j|jd|S(sBParses a text representation of a protocol message into a message.sutf-8s (R%RRRR(RRR((s?/usr/lib/python2.7/site-packages/google/protobuf/text_format.pytParseFromStringYscCst|_|j|||S(sBParses a text representation of a protocol message into a message.(RTt_allow_multiple_scalarst _ParseOrMerge(RRR((s?/usr/lib/python2.7/site-packages/google/protobuf/text_format.pyR_s cCs|j|jd|S(sBMerges a text representation of a protocol message into a message.s (t _MergeLinesR(RRR((s?/usr/lib/python2.7/site-packages/google/protobuf/text_format.pyRPescCst|_|j|||S(sBMerges a text representation of a protocol message into a message.(RSRR(RRR((s?/usr/lib/python2.7/site-packages/google/protobuf/text_format.pyRis cCs3t|}x |js.|j||qWdS(sConverts a text representation of a protocol message into a message. Args: lines: Lines of a message's text representation. message: A protocol buffer message to merge into. Raises: ParseError: On text parsing problems. N(t TokenizertAtEndt _MergeField(RRRt tokenizer((s?/usr/lib/python2.7/site-packages/google/protobuf/text_format.pyRos c Cs|j}|jdr|jg}x&|jdrO|j|jq*Wdj|}|js|jd|jn|jj |}|s|j rd }q|jd|n.||j kr|jd||jfn|j dn(|j}|jro|jrot|tt}|jj|d }| r|jr|jj|}qn|jj|d }|s|jj|jd }|r|jtjjkrd }qn|r|jtjjkr|jj|krd }n|s'|jd|j|fn|r\|j r|jr|j |jj}|d k r||jkr|jd|j||jj|jfqn|j!tjj"kr|jd |j#}n|j d |j$}|j%tjj&krI|jdrIxMtrE|||||jdr5Pn|j d q Wqu||||n|j skt't(||jd s|jd nd S( sMerges a single protocol message field into a message. Args: tokenizer: A tokenizer to parse the field name and values. message: A protocol message to record the data. Raises: ParseError: In case of text parsing problems. Rjt.s+Message type "%s" does not have extensions.sExtension "%s" not registered. Did you import the _pb2 module which defines it? If you are trying to place the extension in the MessageSet field of another message that is in an Any or MessageSet field, that message's _pb2 module must be imported as wells1Extension "%s" does not extend message type "%s".Rks*Message type "%s" has no field named "%s".sbField "%s" is specified along with field "%s", another member of oneof "%s" for message type "%s".t:t,t;N()R^t TryConsumetConsumeIdentifiertappendtjoint is_extendabletParseErrorPreviousTokenR_t Extensionst_FindExtensionByNameRRRntConsumetConsumeIdentifierOrNumberRtisdigitt ParseIntegerRStfields_by_numberRt_FindExtensionByNumbertfields_by_nametlowerR9RR:RqR<RrRtcontaining_oneoft WhichOneofRsRtt_MergeMessageFieldt_MergeScalarFieldReRftAssertionErrort_SkipFieldContents( RRRRLRrR@Rlt which_oneoftmerger((s?/usr/lib/python2.7/site-packages/google/protobuf/text_format.pyR}s              cCs|jg}|jd|j|j|jd|j|j|jd|jg}x&|jdr|j|jqnWdj|dj|fS(sBConsumes a google.protobuf.Any type URL and returns the type name.Rt/(RRRRR(RRtprefixRr((s?/usr/lib/python2.7/site-packages/google/protobuf/text_format.pyt_ConsumeAnyTypeUrls   cCst|}|jdr$d}n|jdd}|jjtkr|jdr|j|\}}|jd|jd|jdrd}n|jdd}t||j} | st d|nxH|j|s'|j r|j d |fn|j || qW|j tjjkrXt||jj} nt||j} | j| d |n|j tjjkr|jr|j|j} q(|rt||jj} q(t||jj} n5|jr |j|} nt||j} | jxH|j|sr|j r_|j d |fn|j || q+W|r|jjd j} | tjjkrt||j| j} | j| jq| jt||j| jR?RS(R|R:R@RT(RSRTR(R((s?/usr/lib/python2.7/site-packages/google/protobuf/text_format.pyR!s  cCs|j}yt|d}WnNtk rl|jj|d}|dkrtd|j|fqniXt|jdr|jj dkr|Sn|j j|d}|dkrtd|j|fn|j S(s&Parse an enum value. The value can be specified by a number (the enum value), or by a string literal (the enum name). Args: field: Enum field descriptor. value: String value. Returns: Enum value number. Raises: ValueError: If the enum value could not be parsed. is%Enum type "%s" has no value named %s.RRs+Enum type "%s" has no value with number %d.N( R~R3Rtvalues_by_nameRRR_RtfileRRRl(R@RBtenum_descriptorRlR((s?/usr/lib/python2.7/site-packages/google/protobuf/text_format.pyR)s     (DR t __author__R R+RRR3R6tgoogle.protobuf.internalRRDRRt__all__tUint32ValueCheckertInt32ValueCheckertUint64ValueCheckertInt64ValueCheckerR2R,t IGNORECASER<R=t frozensetR:t CPPTYPE_FLOATtCPPTYPE_DOUBLERR&R`t ExceptionR RtobjectRRTRRRARRRRMR,RRRRRRRRRRt _TokenizerRRRRRRR1R0RRR R!R)(((s?/usr/lib/python2.7/site-packages/google/protobuf/text_format.pyt)s            )      / #  @    V