| Index: third_party/protobuf/python/google/protobuf/internal/python_message.py
|
| diff --git a/third_party/protobuf/python/google/protobuf/internal/python_message.py b/third_party/protobuf/python/google/protobuf/internal/python_message.py
|
| index 87f60666ab64012b8aeb51f7f1a7c76a916d16c2..f8f73dd20486fb83c5576aea8e8ab7528b2eb25a 100755
|
| --- a/third_party/protobuf/python/google/protobuf/internal/python_message.py
|
| +++ b/third_party/protobuf/python/google/protobuf/internal/python_message.py
|
| @@ -56,7 +56,14 @@ import struct
|
| import weakref
|
|
|
| import six
|
| -import six.moves.copyreg as copyreg
|
| +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.
|
| + import copy_reg as copyreg
|
|
|
| # We use "as" to avoid name collisions with variables.
|
| from google.protobuf.internal import containers
|
| @@ -490,6 +497,9 @@ def _AddInitMethod(message_descriptor, cls):
|
| if field is None:
|
| raise TypeError("%s() got an unexpected keyword argument '%s'" %
|
| (message_descriptor.name, field_name))
|
| + if field_value is None:
|
| + # field=None is the same as no field at all.
|
| + continue
|
| if field.label == _FieldDescriptor.LABEL_REPEATED:
|
| copy = field._default_constructor(self)
|
| if field.cpp_type == _FieldDescriptor.CPPTYPE_MESSAGE: # Composite
|
| @@ -889,17 +899,6 @@ def _AddClearExtensionMethod(cls):
|
| cls.ClearExtension = ClearExtension
|
|
|
|
|
| -def _AddClearMethod(message_descriptor, cls):
|
| - """Helper for _AddMessageMethods()."""
|
| - def Clear(self):
|
| - # Clear fields.
|
| - self._fields = {}
|
| - self._unknown_fields = ()
|
| - self._oneofs = {}
|
| - self._Modified()
|
| - cls.Clear = Clear
|
| -
|
| -
|
| def _AddHasExtensionMethod(cls):
|
| """Helper for _AddMessageMethods()."""
|
| def HasExtension(self, extension_handle):
|
| @@ -999,16 +998,6 @@ def _AddUnicodeMethod(unused_message_descriptor, cls):
|
| cls.__unicode__ = __unicode__
|
|
|
|
|
| -def _AddSetListenerMethod(cls):
|
| - """Helper for _AddMessageMethods()."""
|
| - def SetListener(self, listener):
|
| - if listener is None:
|
| - self._listener = message_listener_mod.NullMessageListener()
|
| - else:
|
| - self._listener = listener
|
| - cls._SetListener = SetListener
|
| -
|
| -
|
| def _BytesForNonRepeatedElement(value, field_number, field_type):
|
| """Returns the number of bytes needed to serialize a non-repeated element.
|
| The returned byte count includes space for tag information and any
|
| @@ -1288,6 +1277,32 @@ def _AddWhichOneofMethod(message_descriptor, cls):
|
| cls.WhichOneof = WhichOneof
|
|
|
|
|
| +def _Clear(self):
|
| + # Clear fields.
|
| + self._fields = {}
|
| + self._unknown_fields = ()
|
| + self._oneofs = {}
|
| + self._Modified()
|
| +
|
| +
|
| +def _DiscardUnknownFields(self):
|
| + self._unknown_fields = []
|
| + for field, value in self.ListFields():
|
| + if field.cpp_type == _FieldDescriptor.CPPTYPE_MESSAGE:
|
| + if field.label == _FieldDescriptor.LABEL_REPEATED:
|
| + for sub_message in value:
|
| + sub_message.DiscardUnknownFields()
|
| + else:
|
| + value.DiscardUnknownFields()
|
| +
|
| +
|
| +def _SetListener(self, listener):
|
| + if listener is None:
|
| + self._listener = message_listener_mod.NullMessageListener()
|
| + else:
|
| + self._listener = listener
|
| +
|
| +
|
| def _AddMessageMethods(message_descriptor, cls):
|
| """Adds implementations of all Message methods to cls."""
|
| _AddListFieldsMethod(message_descriptor, cls)
|
| @@ -1296,12 +1311,10 @@ def _AddMessageMethods(message_descriptor, cls):
|
| if message_descriptor.is_extendable:
|
| _AddClearExtensionMethod(cls)
|
| _AddHasExtensionMethod(cls)
|
| - _AddClearMethod(message_descriptor, cls)
|
| _AddEqualsMethod(message_descriptor, cls)
|
| _AddStrMethod(message_descriptor, cls)
|
| _AddReprMethod(message_descriptor, cls)
|
| _AddUnicodeMethod(message_descriptor, cls)
|
| - _AddSetListenerMethod(cls)
|
| _AddByteSizeMethod(message_descriptor, cls)
|
| _AddSerializeToStringMethod(message_descriptor, cls)
|
| _AddSerializePartialToStringMethod(message_descriptor, cls)
|
| @@ -1309,6 +1322,10 @@ def _AddMessageMethods(message_descriptor, cls):
|
| _AddIsInitializedMethod(message_descriptor, cls)
|
| _AddMergeFromMethod(cls)
|
| _AddWhichOneofMethod(message_descriptor, cls)
|
| + # Adds methods which do not depend on cls.
|
| + cls.Clear = _Clear
|
| + cls.DiscardUnknownFields = _DiscardUnknownFields
|
| + cls._SetListener = _SetListener
|
|
|
|
|
| def _AddPrivateHelperMethods(message_descriptor, cls):
|
| @@ -1518,3 +1535,14 @@ class _ExtensionDict(object):
|
| Extension field descriptor.
|
| """
|
| return self._extended_message._extensions_by_name.get(name, None)
|
| +
|
| + def _FindExtensionByNumber(self, number):
|
| + """Tries to find a known extension with the field number.
|
| +
|
| + Args:
|
| + number: Extension field number.
|
| +
|
| + Returns:
|
| + Extension field descriptor.
|
| + """
|
| + return self._extended_message._extensions_by_number.get(number, None)
|
|
|