� 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 [email protected] (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