Start work on getting text handled properly on PY3
This commit is contained in:
parent
3ff5625231
commit
fc80874adf
@ -67,6 +67,29 @@ class Error(Exception):
|
||||
class ParseError(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,
|
||||
pointy_brackets=False, use_index_order=False,
|
||||
@ -92,7 +115,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 +182,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
|
||||
@ -226,7 +245,8 @@ def PrintFieldValue(field, value, out, indent=0, as_utf8=False,
|
||||
out_as_utf8 = False
|
||||
else:
|
||||
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('\"')
|
||||
elif field.cpp_type == descriptor.FieldDescriptor.CPPTYPE_BOOL:
|
||||
if value:
|
||||
|
Loading…
Reference in New Issue
Block a user