aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFeng Xiao <xfxyjwf@gmail.com>2015-08-26 15:47:35 -0700
committerFeng Xiao <xfxyjwf@gmail.com>2015-08-26 15:47:35 -0700
commite94e062b589cfc1c5d486ec4470af104e102232b (patch)
tree42501d8c22cd93f77ba4bf0434dc6e7553794bdf
parentfecc3d5963ed74337504953c98f288dfa0b024a8 (diff)
parentc7a1f8ec3b7ab4f6763e4d5c2663ad39e13a6aa0 (diff)
downloadprotobuf-e94e062b589cfc1c5d486ec4470af104e102232b.tar.gz
protobuf-e94e062b589cfc1c5d486ec4470af104e102232b.tar.bz2
protobuf-e94e062b589cfc1c5d486ec4470af104e102232b.zip
Merge branch 'master' of github.com:google/protobuf into beta-1
-rwxr-xr-xpython/google/protobuf/descriptor.py5
-rwxr-xr-xpython/google/protobuf/text_format.py27
-rw-r--r--python/tox.ini6
3 files changed, 27 insertions, 11 deletions
diff --git a/python/google/protobuf/descriptor.py b/python/google/protobuf/descriptor.py
index 6840d1f4..95b703fc 100755
--- a/python/google/protobuf/descriptor.py
+++ b/python/google/protobuf/descriptor.py
@@ -36,6 +36,8 @@ file, in types that make this information accessible in Python.
__author__ = 'robinson@google.com (Will Robinson)'
+import six
+
from google.protobuf.internal import api_implementation
@@ -73,7 +75,7 @@ else:
DescriptorMetaclass = type
-class DescriptorBase(object):
+class DescriptorBase(six.with_metaclass(DescriptorMetaclass)):
"""Descriptors base class.
@@ -88,7 +90,6 @@ class DescriptorBase(object):
avoid some bootstrapping issues.
"""
- __metaclass__ = DescriptorMetaclass
if _USE_C_DESCRIPTORS:
# The class, or tuple of classes, that are considered as "virtual
# subclasses" of this descriptor class.
diff --git a/python/google/protobuf/text_format.py b/python/google/protobuf/text_format.py
index dd205cf1..1399223f 100755
--- a/python/google/protobuf/text_format.py
+++ b/python/google/protobuf/text_format.py
@@ -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
diff --git a/python/tox.ini b/python/tox.ini
index 9a934d0a..d0100758 100644
--- a/python/tox.ini
+++ b/python/tox.ini
@@ -1,9 +1,9 @@
[tox]
envlist =
- # Py3 tests currently fail because of text handling issues,
- # So only test py26/py27 for now.
+ # cpp implementation on py34 is currently broken due to
+ # changes introduced by http://bugs.python.org/issue22079.
#py{26,27,33,34}-{cpp,python}
- py{26,27}-{cpp,python}
+ py{26,27,33}-{cpp,python}, py34-{python}
[testenv]
usedevelop=true