fix Message.to_dict mutating the underlying Message (#378)
* [fix] to_dict modifies the underlying message (#151) * add test for mapmessage * fix for to_dict * formatting * Apply suggestions from code review Co-authored-by: Arun Babu Neelicattu <arun.neelicattu@gmail.com> * change to_json to to_dict Co-authored-by: Arun Babu Neelicattu <arun.neelicattu@gmail.com>
This commit is contained in:
parent
06c26ba60d
commit
85e4be96d8
@ -1123,12 +1123,13 @@ class Message(ABC):
|
||||
):
|
||||
output[cased_name] = value.to_dict(casing, include_default_values)
|
||||
elif meta.proto_type == TYPE_MAP:
|
||||
output_map = {**value}
|
||||
for k in value:
|
||||
if hasattr(value[k], "to_dict"):
|
||||
value[k] = value[k].to_dict(casing, include_default_values)
|
||||
output_map[k] = value[k].to_dict(casing, include_default_values)
|
||||
|
||||
if value or include_default_values:
|
||||
output[cased_name] = value
|
||||
output[cased_name] = output_map
|
||||
elif (
|
||||
value != self._get_field_default(field_name)
|
||||
or include_default_values
|
||||
|
18
tests/test_mapmessage.py
Normal file
18
tests/test_mapmessage.py
Normal file
@ -0,0 +1,18 @@
|
||||
from tests.output_betterproto.mapmessage import (
|
||||
Nested,
|
||||
Test,
|
||||
)
|
||||
|
||||
|
||||
def test_mapmessage_to_dict_preserves_message():
|
||||
message = Test(
|
||||
items={
|
||||
"test": Nested(
|
||||
count=1,
|
||||
)
|
||||
}
|
||||
)
|
||||
|
||||
message.to_dict()
|
||||
|
||||
assert isinstance(message.items["test"], Nested), "Wrong nested type after to_dict"
|
Loading…
x
Reference in New Issue
Block a user