diff options
Diffstat (limited to 'python')
-rwxr-xr-x | python/google/protobuf/__init__.py | 2 | ||||
-rwxr-xr-x | python/google/protobuf/internal/python_message.py | 19 | ||||
-rw-r--r-- | python/google/protobuf/pyext/extension_dict.cc | 2 | ||||
-rw-r--r-- | python/google/protobuf/pyext/message.cc | 4 | ||||
-rwxr-xr-x | python/setup.py | 7 |
5 files changed, 20 insertions, 14 deletions
diff --git a/python/google/protobuf/__init__.py b/python/google/protobuf/__init__.py index 0e2a89ff..7fd9e5a4 100755 --- a/python/google/protobuf/__init__.py +++ b/python/google/protobuf/__init__.py @@ -30,7 +30,7 @@ # Copyright 2007 Google Inc. All Rights Reserved. -__version__ = '3.1.0' +__version__ = '3.2.0' if __name__ != '__main__': try: diff --git a/python/google/protobuf/internal/python_message.py b/python/google/protobuf/internal/python_message.py index c1bd1f9c..4b701039 100755 --- a/python/google/protobuf/internal/python_message.py +++ b/python/google/protobuf/internal/python_message.py @@ -56,17 +56,6 @@ import sys import weakref import six -try: - import six.moves.copyreg as copyreg -except ImportError: - # On some platforms, for example gMac, we run native Python because there is - # nothing like hermetic Python. This means lesser control on the system and - # the six.moves package may be missing (is missing on 20150321 on gMac). Be - # extra conservative and try to load the old replacement if it fails. - try: - import copy_reg as copyreg #PY26 - except ImportError: - import copyreg # We use "as" to avoid name collisions with variables. from google.protobuf.internal import containers @@ -179,7 +168,6 @@ class GeneratedProtocolMessageType(type): _AddStaticMethods(cls) _AddMessageMethods(descriptor, cls) _AddPrivateHelperMethods(descriptor, cls) - copyreg.pickle(cls, lambda obj: (cls, (), obj.__getstate__())) superclass = super(GeneratedProtocolMessageType, cls) superclass.__init__(name, bases, dictionary) @@ -1271,6 +1259,12 @@ def _AddWhichOneofMethod(message_descriptor, cls): cls.WhichOneof = WhichOneof +def _AddReduceMethod(cls): + def __reduce__(self): # pylint: disable=invalid-name + return (type(self), (), self.__getstate__()) + cls.__reduce__ = __reduce__ + + def _Clear(self): # Clear fields. self._fields = {} @@ -1316,6 +1310,7 @@ def _AddMessageMethods(message_descriptor, cls): _AddIsInitializedMethod(message_descriptor, cls) _AddMergeFromMethod(cls) _AddWhichOneofMethod(message_descriptor, cls) + _AddReduceMethod(cls) # Adds methods which do not depend on cls. cls.Clear = _Clear cls.DiscardUnknownFields = _DiscardUnknownFields diff --git a/python/google/protobuf/pyext/extension_dict.cc b/python/google/protobuf/pyext/extension_dict.cc index 9423c1d8..43ee5d15 100644 --- a/python/google/protobuf/pyext/extension_dict.cc +++ b/python/google/protobuf/pyext/extension_dict.cc @@ -126,6 +126,8 @@ PyObject* subscript(ExtensionDict* self, PyObject* key) { CMessageClass* message_class = message_factory::GetOrCreateMessageClass( cmessage::GetFactoryForMessage(self->parent), descriptor->message_type()); + ScopedPyObjectPtr message_class_handler( + reinterpret_cast<PyObject*>(message_class)); if (message_class == NULL) { return NULL; } diff --git a/python/google/protobuf/pyext/message.cc b/python/google/protobuf/pyext/message.cc index 4f3abc84..c810b788 100644 --- a/python/google/protobuf/pyext/message.cc +++ b/python/google/protobuf/pyext/message.cc @@ -2342,8 +2342,10 @@ PyObject* InternalGetSubMessage( const Message& sub_message = reflection->GetMessage( *self->message, field_descriptor, factory->message_factory); - CMessageClass* message_class = message_factory::GetMessageClass( + CMessageClass* message_class = message_factory::GetOrCreateMessageClass( factory, field_descriptor->message_type()); + ScopedPyObjectPtr message_class_handler( + reinterpret_cast<PyObject*>(message_class)); if (message_class == NULL) { return NULL; } diff --git a/python/setup.py b/python/setup.py index ef1a31b4..64e318f1 100755 --- a/python/setup.py +++ b/python/setup.py @@ -5,6 +5,7 @@ import glob import os import subprocess import sys +import platform # We must use setuptools, not distutils, because we need to use the # namespace_packages option for the "google" package. @@ -189,6 +190,12 @@ if __name__ == '__main__': if "clang" in os.popen('$CC --version 2> /dev/null').read(): extra_compile_args.append('-Wno-shorten-64-to-32') + v, _, _ = platform.mac_ver() + if v: + v = float('.'.join(v.split('.')[:2])) + if v >= 10.12: + extra_compile_args.append('-std=c++11') + if warnings_as_errors in sys.argv: extra_compile_args.append('-Werror') sys.argv.remove(warnings_as_errors) |