Fix pydict serialization for optional fields (#495)

This commit is contained in:
Nick DeRobertis 2023-05-28 12:47:52 -04:00 committed by GitHub
parent aad7d2ad76
commit fcbd8a3759
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 29 additions and 0 deletions

View File

@ -1373,6 +1373,9 @@ class Message(ABC):
value = [i.to_pydict(casing, include_default_values) for i in value]
if value or include_default_values:
output[cased_name] = value
elif value is None:
if include_default_values:
output[cased_name] = None
elif (
value._serialized_on_wire
or include_default_values

View File

@ -265,6 +265,32 @@ def test_optional_flag():
assert Request().parse(b"\n\x00").flag is False
def test_optional_datetime_to_dict():
@dataclass
class Request(betterproto.Message):
date: Optional[datetime] = betterproto.message_field(1, optional=True)
# Check dict serialization
assert Request().to_dict() == {}
assert Request().to_dict(include_default_values=True) == {"date": None}
assert Request(date=datetime(2020, 1, 1)).to_dict() == {
"date": "2020-01-01T00:00:00Z"
}
assert Request(date=datetime(2020, 1, 1)).to_dict(include_default_values=True) == {
"date": "2020-01-01T00:00:00Z"
}
# Check pydict serialization
assert Request().to_pydict() == {}
assert Request().to_pydict(include_default_values=True) == {"date": None}
assert Request(date=datetime(2020, 1, 1)).to_pydict() == {
"date": datetime(2020, 1, 1)
}
assert Request(date=datetime(2020, 1, 1)).to_pydict(
include_default_values=True
) == {"date": datetime(2020, 1, 1)}
def test_to_json_default_values():
@dataclass
class TestMessage(betterproto.Message):