Fix a python bug when assign an empty Struct at creation.

PiperOrigin-RevId: 689211445
pull/18967/head
Jie Luo 4 months ago committed by Copybara-Service
parent d2194efa9e
commit 47613cf7ad
  1. 2
      python/google/protobuf/internal/python_message.py
  2. 31
      python/google/protobuf/internal/well_known_types_test.py

@ -568,7 +568,7 @@ def _AddInitMethod(message_descriptor, cls):
) )
) )
if new_val: if new_val != None:
try: try:
field_copy.MergeFrom(new_val) field_copy.MergeFrom(new_val)
except TypeError: except TypeError:

@ -13,6 +13,7 @@ import collections.abc as collections_abc
import datetime import datetime
import unittest import unittest
from google.protobuf import json_format
from google.protobuf import text_format from google.protobuf import text_format
from google.protobuf.internal import more_messages_pb2 from google.protobuf.internal import more_messages_pb2
from google.protobuf.internal import well_known_types from google.protobuf.internal import well_known_types
@ -1040,6 +1041,36 @@ class AnyTest(unittest.TestCase):
b'\x0e\x1a\x05\n\x018\x10\x10\x1a\x05\n\x019\x10\x12') b'\x0e\x1a\x05\n\x018\x10\x10\x1a\x05\n\x019\x10\x12')
self.assertEqual(golden, serialized) self.assertEqual(golden, serialized)
def testJsonStruct(self):
value = struct_pb2.Value(struct_value=struct_pb2.Struct())
value_dict = json_format.MessageToDict(
value,
always_print_fields_with_no_presence=True,
preserving_proto_field_name=True,
use_integers_for_enums=True,
)
self.assertDictEqual(value_dict, {})
s = struct_pb2.Struct(
fields={
'a': struct_pb2.Value(struct_value=struct_pb2.Struct()),
},
)
sdict = json_format.MessageToDict(
s,
always_print_fields_with_no_presence=True,
preserving_proto_field_name=True,
use_integers_for_enums=True,
)
self.assertDictEqual(
sdict,
{
'a': {},
},
)
if __name__ == '__main__': if __name__ == '__main__':
unittest.main() unittest.main()

Loading…
Cancel
Save