|
|
@ -67,6 +67,29 @@ class Error(Exception): |
|
|
|
class ParseError(Error): |
|
|
|
class ParseError(Error): |
|
|
|
"""Thrown in case of ASCII parsing error.""" |
|
|
|
"""Thrown in case of ASCII parsing error.""" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TextWriter(object): |
|
|
|
|
|
|
|
def __init__(self, as_utf8): |
|
|
|
|
|
|
|
self._utf8 = as_utf8 |
|
|
|
|
|
|
|
if as_utf8: |
|
|
|
|
|
|
|
self._writer = io.BytesIO() |
|
|
|
|
|
|
|
else: |
|
|
|
|
|
|
|
self._writer = io.StringIO() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def write(self, val): |
|
|
|
|
|
|
|
if self._utf8: |
|
|
|
|
|
|
|
if isinstance(val, six.text_type): |
|
|
|
|
|
|
|
val = val.encode('utf-8') |
|
|
|
|
|
|
|
else: |
|
|
|
|
|
|
|
if isinstance(val, bytes): |
|
|
|
|
|
|
|
val = val.decode('utf-8') |
|
|
|
|
|
|
|
return self._writer.write(val) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def close(self): |
|
|
|
|
|
|
|
return self._writer.close() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getvalue(self): |
|
|
|
|
|
|
|
return self._writer.getvalue() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def MessageToString(message, as_utf8=False, as_one_line=False, |
|
|
|
def MessageToString(message, as_utf8=False, as_one_line=False, |
|
|
|
pointy_brackets=False, use_index_order=False, |
|
|
|
pointy_brackets=False, use_index_order=False, |
|
|
@ -92,7 +115,7 @@ def MessageToString(message, as_utf8=False, as_one_line=False, |
|
|
|
Returns: |
|
|
|
Returns: |
|
|
|
A string of the text formatted protocol buffer message. |
|
|
|
A string of the text formatted protocol buffer message. |
|
|
|
""" |
|
|
|
""" |
|
|
|
out = io.BytesIO() |
|
|
|
out = TextWriter(as_utf8) |
|
|
|
PrintMessage(message, out, as_utf8=as_utf8, as_one_line=as_one_line, |
|
|
|
PrintMessage(message, out, as_utf8=as_utf8, as_one_line=as_one_line, |
|
|
|
pointy_brackets=pointy_brackets, |
|
|
|
pointy_brackets=pointy_brackets, |
|
|
|
use_index_order=use_index_order, |
|
|
|
use_index_order=use_index_order, |
|
|
@ -159,11 +182,7 @@ def PrintField(field, value, out, indent=0, as_utf8=False, as_one_line=False, |
|
|
|
# For groups, use the capitalized name. |
|
|
|
# For groups, use the capitalized name. |
|
|
|
out.write(field.message_type.name) |
|
|
|
out.write(field.message_type.name) |
|
|
|
else: |
|
|
|
else: |
|
|
|
if isinstance(field.name, six.text_type): |
|
|
|
out.write(field.name) |
|
|
|
name = field.name.encode('utf-8') |
|
|
|
|
|
|
|
else: |
|
|
|
|
|
|
|
name = field.name |
|
|
|
|
|
|
|
out.write(name) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if field.cpp_type != descriptor.FieldDescriptor.CPPTYPE_MESSAGE: |
|
|
|
if field.cpp_type != descriptor.FieldDescriptor.CPPTYPE_MESSAGE: |
|
|
|
# The colon is optional in this case, but our cross-language golden files |
|
|
|
# The colon is optional in this case, but our cross-language golden files |
|
|
@ -226,7 +245,8 @@ def PrintFieldValue(field, value, out, indent=0, as_utf8=False, |
|
|
|
out_as_utf8 = False |
|
|
|
out_as_utf8 = False |
|
|
|
else: |
|
|
|
else: |
|
|
|
out_as_utf8 = as_utf8 |
|
|
|
out_as_utf8 = as_utf8 |
|
|
|
out.write(text_encoding.CEscape(out_value, out_as_utf8)) |
|
|
|
out_text = text_encoding.CEscape(out_value, out_as_utf8) |
|
|
|
|
|
|
|
out.write(out_text) |
|
|
|
out.write('\"') |
|
|
|
out.write('\"') |
|
|
|
elif field.cpp_type == descriptor.FieldDescriptor.CPPTYPE_BOOL: |
|
|
|
elif field.cpp_type == descriptor.FieldDescriptor.CPPTYPE_BOOL: |
|
|
|
if value: |
|
|
|
if value: |
|
|
|