ó SÉLjc @s+dZdZddlZddlZddlZejrBeZnddlm Z ddl m Z ddl m Z ddd d d gZ e jƒe jƒe jƒe jƒfZejd ejƒZejd ejƒZee jje jjgƒZeddfƒZdZdefd„ƒYZdefd„ƒYZ de!fd„ƒYZ"e#e#e#e#e$e#e$de$d„ Z%d„Z&de#e#e#e#e$e#e$e$d„ Z'de#e#e#e#e$e$d„Z(de#e#e#e#e$e$d„Z)d„Z*de!fd„ƒYZ+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:d0„Z;d1„Z<e#e#d2„Z=e#e#d3„Z>e#e#d4„Z?e#d5„Z@d6„ZAd7„ZBd8„ZCdS(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)iÿÿÿÿN(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 ParseErrorcBs2eZdZdddd„Zd„Zd„ZRS(s3Thrown in case of text parsing or tokenizing error.cCs©|dk r[|dk r[t|ƒ}|dk rF|dj|ƒ7}ndj||ƒ}n|dk r€tt|ƒ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,eZd„Zd„Zd„Zd„ZRS(cCs.tjrtjƒ|_ntjƒ|_dS(N(tsixtPY2tiotBytesIOt_writertStringIO(Rtas_utf8((s?/usr/lib/python2.7/site-packages/google/protobuf/text_format.pyRfs cCs@tjr0t|tjƒr0|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 |jjƒS(N(R"tclose(R((s?/usr/lib/python2.7/site-packages/google/protobuf/text_format.pyR*rscCs |jjƒS(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| jƒS| S(s”Convert 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|jjƒjS(N(ttypeRtFieldDescriptort TYPE_MESSAGEt message_typet has_optionst GetOptionst map_entry(tfield((s?/usr/lib/python2.7/site-packages/google/protobuf/text_format.pyt _IsMapEntry«s c Cs8t||||||||| | ƒ } | j|ƒdS(N(R,R( RR6R4R$R.R/R0R1R2R3R5R7((s?/usr/lib/python2.7/site-packages/google/protobuf/text_format.pyR±s   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.pyRÂs 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.pyRÒs 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_BuildMessageFromTypeNameâs   R,c BsheZdZdeeeed ed d d„ Zd„Zd„Zd„Zd„Z d„Z d„Z 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.pyRþs%         cCsŠt|jƒ|jƒ}|r‚|j|jƒ|jjd|jd|jfƒ|j |ƒ|jj|j rwdndƒt 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|jrjdndƒtS(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|jdd„ƒnx²|D]ª\}}t |ƒrÔx�t |ƒD]5}|j ƒd|d||ƒ}|j ||ƒq˜Wqs|j tjjkr x1|D]}|j ||ƒqðWqs|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|jƒƒnÃ|jrÇ|jdƒ|jjƒj r§|j t j j kr§|jt j jkr§|j|jjƒn|j|jƒ|jdƒn;|j t j jkrò|j|jjƒn|j|jƒ|jt j jkr'|jdƒn|j||ƒ|jrP|jdƒn |jdƒdS(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.pyRR…s     cCs»|j}|jtjjkr.|j|ƒn‰|jtjjkr�|jjj |dƒ}|dk rz|j |j ƒq·|j t |ƒƒn'|jtjjkr,|j dƒt|tjƒrÖ|jdƒ}n|}|jtjjkrút}n |j}|j tj||ƒƒ|j dƒn‹|jtjjkrg|rW|j dƒq·|j dƒnP|jtkr¤|jdk r¤|j dj|j|ƒƒn|j t |ƒƒdS(sÝPrint 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.pyR˜s2     N( R R R RTRRRVRXRRRRR(((s?/usr/lib/python2.7/site-packages/google/protobuf/text_format.pyR,ûs  &  ! cCs^t|tƒs<tjr*|jdƒ}q<|jdƒ}nt|jdƒ|||d|ƒS(sôParses 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.pytParseÂs% cCs^t|tƒs<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%RRR‰RŠR't MergeLinesRŒ(R�RRŽR�R3((s?/usr/lib/python2.7/site-packages/google/protobuf/text_format.pyRós  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‹(tlinesRRŽR�R3tparser((s?/usr/lib/python2.7/site-packages/google/protobuf/text_format.pyR‹s 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(R’R‘(R“RRŽR�R3R”((s?/usr/lib/python2.7/site-packages/google/protobuf/text_format.pyR‘3s R’cBs€eZdZeed d„Zd„Zd„Zd„Zd„Z d„Z d„Z d„Z d „Z ed „ƒZd „ZRS( s(Text format parser for protocol message.cCs||_||_||_dS(N(RŽR�R3(RRŽR�R3((s?/usr/lib/python2.7/site-packages/google/protobuf/text_format.pyRQs  cCs:t|tƒs!|jdƒ}n|j|jdƒ|ƒS(sBParses a text representation of a protocol message into a message.sutf-8s (R%RRŠR‹RŒ(RR�R((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(RR“R((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Œ(RR�R((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.(RSR–R—(RR“R((s?/usr/lib/python2.7/site-packages/google/protobuf/text_format.pyR‘is cCs3t|ƒ}x |jƒs.|j||ƒqWdS(süConverts 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(RR“Rt tokenizer((s?/usr/lib/python2.7/site-packages/google/protobuf/text_format.pyR—os c Cs‰|j}|jdƒrÿ|jƒg}x&|jdƒrO|j|jƒƒq*Wdj|ƒ}|js�|jd|jƒ‚n|jj |ƒ}|sÁ|j r«d }qï|jd|ƒ‚n.||j krï|jd||jfƒ‚n|j dƒn(|jƒ}|jro|jƒrot|ttƒ}|jj|d ƒ}| r|jr|jj|ƒ}qn“|jj|d ƒ}|sÌ|jj|jƒd ƒ}|rÌ|jtjjkrÌd }qÌn|r|jtjjkr|jj|krd }n|s'|jd|j|fƒ‚n|r\|j r¡|jr¡|j |jjƒ}|d k r¡||jkr¡|jd|j||jj|jfƒ‚q¡n|j!tjj"krÏ|jd ƒ|j#}n|j d ƒ|j$}|j%tjj&krI|jdƒrIxMtrE||||ƒ|jdƒr5Pn|j d ƒq Wqf||||ƒn t'|ƒ|jd ƒs…|jd ƒnd S( sþMerges 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.sþExtension "%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_FindExtensionByNameRŽRRntConsumetConsumeIdentifierOrNumberR�tisdigitt ParseIntegerRStfields_by_numberR€t_FindExtensionByNumbertfields_by_nametlowerR9RR:RqR<RrR–tcontaining_oneoft WhichOneofRsRtt_MergeMessageFieldt_MergeScalarFieldReRft_SkipFieldContents( RRœRRLRrR@Rlt which_oneoftmerger((s?/usr/lib/python2.7/site-packages/google/protobuf/text_format.pyR›}s€              cCs°|jƒg}|jdƒ|j|jƒƒ|jdƒ|j|jƒƒ|jdƒ|jƒg}x&|jdƒr“|j|jƒƒqnWdj|ƒdj|ƒfS(sBConsumes a google.protobuf.Any type URL and returns the type name.R�t/(R¢R©R£R¡R¤(RRœtprefixRr((s?/usr/lib/python2.7/site-packages/google/protobuf/text_format.pyt_ConsumeAnyTypeUrlês   cCsít|ƒ}|jdƒr$d}n|jdƒd}|jjtkr€|jdƒr€|j|ƒ\}}|jdƒ|jdƒ|jdƒrŸd}n|jdƒd}t||jƒ} | sÝt d|ƒ‚nxH|j|ƒs'|j ƒr|j d |fƒ‚n|j || ƒqàW|j tjjkrXt||jƒjƒ} nt||jƒ} | j| d |ƒn¨|j tjjkró|jr´|j|jƒ} q(|rØt||jƒjƒƒ} q(t||jƒjƒ} n5|jr |j|} nt||jƒ} | jƒxH|j|ƒsr|j ƒr_|j d |fƒ‚n|j || ƒq+W|ré|jjd j} | tjjkrÊt||jƒ| j} | j| jƒqé| jt||jƒ| jRS(R|R9R?RT(RSRTR(R�((s?/usr/lib/python2.7/site-packages/google/protobuf/text_format.pyR ós  cCsÜ|j}yt|dƒ}WnNtk rl|jj|dƒ}|dkrÕtd|j|fƒ‚qÕniXt|jdƒr˜|jj dkr˜|Sn|j j|dƒ}|dkrÕtd|j|fƒ‚n|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.RÉRÊs+Enum type "%s" has no value with number %d.N( R~R2Rtvalues_by_nameR€RR_RËtfileRÉRRl(R@RBtenum_descriptorRlR†((s?/usr/lib/python2.7/site-packages/google/protobuf/text_format.pyR(s     (DR t __author__R R*RR‰R2R5tgoogle.protobuf.internalRRDRRt__all__tUint32ValueCheckertInt32ValueCheckertUint64ValueCheckertInt64ValueCheckerR1R+t IGNORECASER;R<t frozensetR:t CPPTYPE_FLOATtCPPTYPE_DOUBLER…R%R`t ExceptionR RtobjectRRTRRRARRRRMR,R�RR‹R‘R’RµRïRîRíR™t _TokenizerRÐR×RóRÔRôRÚR0R/R¬RRR R((((s?/usr/lib/python2.7/site-packages/google/protobuf/text_format.pyt)sº            )     É / #  ÿ@    ÿV