Skip to content

Commit 10a8f64

Browse files
authored
Fix a python bug when assign an empty Struct at creation. (#18978)
PiperOrigin-RevId: 689211445
1 parent 095dcf0 commit 10a8f64

2 files changed

Lines changed: 32 additions & 1 deletion

File tree

‎python/google/protobuf/internal/python_message.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -568,7 +568,7 @@ def init(self, **kwargs):
568568
)
569569
)
570570

571-
if new_val:
571+
if new_val != None:
572572
try:
573573
field_copy.MergeFrom(new_val)
574574
except TypeError:

‎python/google/protobuf/internal/well_known_types_test.py‎

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import datetime
1414
import unittest
1515

16+
from google.protobuf import json_format
1617
from google.protobuf import text_format
1718
from google.protobuf.internal import any_test_pb2
1819
from google.protobuf.internal import more_messages_pb2
@@ -1038,6 +1039,36 @@ def testPackDeterministic(self):
10381039
b'\x0e\x1a\x05\n\x018\x10\x10\x1a\x05\n\x019\x10\x12')
10391040
self.assertEqual(golden, serialized)
10401041

1042+
def testJsonStruct(self):
1043+
value = struct_pb2.Value(struct_value=struct_pb2.Struct())
1044+
value_dict = json_format.MessageToDict(
1045+
value,
1046+
always_print_fields_with_no_presence=True,
1047+
preserving_proto_field_name=True,
1048+
use_integers_for_enums=True,
1049+
)
1050+
self.assertDictEqual(value_dict, {})
1051+
1052+
s = struct_pb2.Struct(
1053+
fields={
1054+
'a': struct_pb2.Value(struct_value=struct_pb2.Struct()),
1055+
},
1056+
)
1057+
1058+
sdict = json_format.MessageToDict(
1059+
s,
1060+
always_print_fields_with_no_presence=True,
1061+
preserving_proto_field_name=True,
1062+
use_integers_for_enums=True,
1063+
)
1064+
1065+
self.assertDictEqual(
1066+
sdict,
1067+
{
1068+
'a': {},
1069+
},
1070+
)
1071+
10411072

10421073
if __name__ == '__main__':
10431074
unittest.main()

0 commit comments

Comments
 (0)