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)
|
output[cased_name] = value.to_dict(casing, include_default_values)
|
||||||
elif meta.proto_type == TYPE_MAP:
|
elif meta.proto_type == TYPE_MAP:
|
||||||
|
output_map = {**value}
|
||||||
for k in value:
|
for k in value:
|
||||||
if hasattr(value[k], "to_dict"):
|
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:
|
if value or include_default_values:
|
||||||
output[cased_name] = value
|
output[cased_name] = output_map
|
||||||
elif (
|
elif (
|
||||||
value != self._get_field_default(field_name)
|
value != self._get_field_default(field_name)
|
||||||
or include_default_values
|
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