aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan O'Reilly <oreilldf@gmail.com>2015-08-22 13:02:24 -0400
committerDan O'Reilly <oreilldf@gmail.com>2015-08-22 13:07:12 -0400
commit38eef02aab2cf52bce537ef43870387ba30381c8 (patch)
tree698c12a755aa8e29255444552061b028b313af72
parentfc80874adf84b4061d6540eff32b4be05541a973 (diff)
downloadprotobuf-38eef02aab2cf52bce537ef43870387ba30381c8.tar.gz
protobuf-38eef02aab2cf52bce537ef43870387ba30381c8.tar.bz2
protobuf-38eef02aab2cf52bce537ef43870387ba30381c8.zip
Fix metaclass issue on Python 3. Get text handling tests passing on Python 3.
Signed-off-by: Dan O'Reilly <oreilldf@gmail.com>
-rwxr-xr-xpython/google/protobuf/descriptor.py5
-rwxr-xr-xpython/google/protobuf/text_format.py11
-rw-r--r--python/tox.ini6
3 files changed, 9 insertions, 13 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 7bdde33f..145bb656 100755
--- a/python/google/protobuf/text_format.py
+++ b/python/google/protobuf/text_format.py
@@ -69,19 +69,15 @@ class ParseError(Error):
class TextWriter(object):
def __init__(self, as_utf8):
- self._utf8 = as_utf8
- if as_utf8:
+ if six.PY2:
self._writer = io.BytesIO()
else:
self._writer = io.StringIO()
def write(self, val):
- if self._utf8:
+ if six.PY2:
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):
@@ -245,8 +241,7 @@ def PrintFieldValue(field, value, out, indent=0, as_utf8=False,
out_as_utf8 = False
else:
out_as_utf8 = as_utf8
- out_text = text_encoding.CEscape(out_value, out_as_utf8)
- out.write(out_text)
+ out.write(text_encoding.CEscape(out_value, out_as_utf8))
out.write('\"')
elif field.cpp_type == descriptor.FieldDescriptor.CPPTYPE_BOOL:
if value:
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