ParseFromString returns bytes parsed (#5166)

* ParseFromString returns bytes parsed

ParseFromString is documented as returning the number of bytes parsed,
and the C++ implementation does this, so the Python implementation
should too.

See #5165.

* Fix docstring

* Add a test for ParseFromString length behavior
pull/5222/merge
Josh Kelley 7 years ago committed by Jie Luo
parent 3f826a6dbf
commit 8d6f8df1ec
  1. 3
      python/google/protobuf/internal/message_test.py
  2. 5
      python/google/protobuf/message.py

@ -139,9 +139,10 @@ class MessageTest(BaseTestCase):
def testGoldenPackedMessage(self, message_module): def testGoldenPackedMessage(self, message_module):
golden_data = test_util.GoldenFileData('golden_packed_fields_message') golden_data = test_util.GoldenFileData('golden_packed_fields_message')
golden_message = message_module.TestPackedTypes() golden_message = message_module.TestPackedTypes()
golden_message.ParseFromString(golden_data) parsed_bytes = golden_message.ParseFromString(golden_data)
all_set = message_module.TestPackedTypes() all_set = message_module.TestPackedTypes()
test_util.SetAllPackedFields(all_set) test_util.SetAllPackedFields(all_set)
self.assertEqual(parsed_bytes, len(golden_data))
self.assertEqual(all_set, golden_message) self.assertEqual(all_set, golden_message)
self.assertEqual(golden_data, all_set.SerializeToString()) self.assertEqual(golden_data, all_set.SerializeToString())
golden_copy = copy.deepcopy(golden_message) golden_copy = copy.deepcopy(golden_message)

@ -178,11 +178,10 @@ class Message(object):
def ParseFromString(self, serialized): def ParseFromString(self, serialized):
"""Parse serialized protocol buffer data into this message. """Parse serialized protocol buffer data into this message.
Like MergeFromString(), except we clear the object first and Like MergeFromString(), except we clear the object first.
do not return the value that MergeFromString returns.
""" """
self.Clear() self.Clear()
self.MergeFromString(serialized) return self.MergeFromString(serialized)
def SerializeToString(self, **kwargs): def SerializeToString(self, **kwargs):
"""Serializes the protocol message to a binary string. """Serializes the protocol message to a binary string.

Loading…
Cancel
Save