|
@@ -67,6 +67,25 @@ class Error(Exception):
|
|
|
class ParseError(Error):
|
|
|
"""Thrown in case of ASCII parsing error."""
|
|
|
|
|
|
+class TextWriter(object):
|
|
|
+ def __init__(self, as_utf8):
|
|
|
+ if six.PY2:
|
|
|
+ self._writer = io.BytesIO()
|
|
|
+ else:
|
|
|
+ self._writer = io.StringIO()
|
|
|
+
|
|
|
+ def write(self, val):
|
|
|
+ if six.PY2:
|
|
|
+ if isinstance(val, six.text_type):
|
|
|
+ val = val.encode('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,
|
|
|
pointy_brackets=False, use_index_order=False,
|
|
@@ -92,7 +111,7 @@ def MessageToString(message, as_utf8=False, as_one_line=False,
|
|
|
Returns:
|
|
|
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,
|
|
|
pointy_brackets=pointy_brackets,
|
|
|
use_index_order=use_index_order,
|
|
@@ -159,11 +178,7 @@ def PrintField(field, value, out, indent=0, as_utf8=False, as_one_line=False,
|
|
|
# For groups, use the capitalized name.
|
|
|
out.write(field.message_type.name)
|
|
|
else:
|
|
|
- if isinstance(field.name, six.text_type):
|
|
|
- name = field.name.encode('utf-8')
|
|
|
- else:
|
|
|
- name = field.name
|
|
|
- out.write(name)
|
|
|
+ out.write(field.name)
|
|
|
|
|
|
if field.cpp_type != descriptor.FieldDescriptor.CPPTYPE_MESSAGE:
|
|
|
# The colon is optional in this case, but our cross-language golden files
|