Commit 38eef02a authored by Dan O'Reilly's avatar Dan O'Reilly

Fix metaclass issue on Python 3. Get text handling tests passing on Python 3.

Signed-off-by: 's avatarDan O'Reilly <oreilldf@gmail.com>
parent fc80874a
...@@ -36,6 +36,8 @@ file, in types that make this information accessible in Python. ...@@ -36,6 +36,8 @@ file, in types that make this information accessible in Python.
__author__ = 'robinson@google.com (Will Robinson)' __author__ = 'robinson@google.com (Will Robinson)'
import six
from google.protobuf.internal import api_implementation from google.protobuf.internal import api_implementation
...@@ -73,7 +75,7 @@ else: ...@@ -73,7 +75,7 @@ else:
DescriptorMetaclass = type DescriptorMetaclass = type
class DescriptorBase(object): class DescriptorBase(six.with_metaclass(DescriptorMetaclass)):
"""Descriptors base class. """Descriptors base class.
...@@ -88,7 +90,6 @@ class DescriptorBase(object): ...@@ -88,7 +90,6 @@ class DescriptorBase(object):
avoid some bootstrapping issues. avoid some bootstrapping issues.
""" """
__metaclass__ = DescriptorMetaclass
if _USE_C_DESCRIPTORS: if _USE_C_DESCRIPTORS:
# The class, or tuple of classes, that are considered as "virtual # The class, or tuple of classes, that are considered as "virtual
# subclasses" of this descriptor class. # subclasses" of this descriptor class.
......
...@@ -69,19 +69,15 @@ class ParseError(Error): ...@@ -69,19 +69,15 @@ class ParseError(Error):
class TextWriter(object): class TextWriter(object):
def __init__(self, as_utf8): def __init__(self, as_utf8):
self._utf8 = as_utf8 if six.PY2:
if as_utf8:
self._writer = io.BytesIO() self._writer = io.BytesIO()
else: else:
self._writer = io.StringIO() self._writer = io.StringIO()
def write(self, val): def write(self, val):
if self._utf8: if six.PY2:
if isinstance(val, six.text_type): if isinstance(val, six.text_type):
val = val.encode('utf-8') val = val.encode('utf-8')
else:
if isinstance(val, bytes):
val = val.decode('utf-8')
return self._writer.write(val) return self._writer.write(val)
def close(self): def close(self):
...@@ -245,8 +241,7 @@ def PrintFieldValue(field, value, out, indent=0, as_utf8=False, ...@@ -245,8 +241,7 @@ 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_text = text_encoding.CEscape(out_value, out_as_utf8) out.write(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:
......
[tox] [tox]
envlist = envlist =
# Py3 tests currently fail because of text handling issues, # cpp implementation on py34 is currently broken due to
# So only test py26/py27 for now. # changes introduced by http://bugs.python.org/issue22079.
#py{26,27,33,34}-{cpp,python} #py{26,27,33,34}-{cpp,python}
py{26,27}-{cpp,python} py{26,27,33}-{cpp,python}, py34-{python}
[testenv] [testenv]
usedevelop=true usedevelop=true
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment