Fix pydict serialization for optional fields (#495)
This commit is contained in:
parent
aad7d2ad76
commit
fcbd8a3759
@ -1373,6 +1373,9 @@ class Message(ABC):
|
|||||||
value = [i.to_pydict(casing, include_default_values) for i in value]
|
value = [i.to_pydict(casing, include_default_values) for i in value]
|
||||||
if value or include_default_values:
|
if value or include_default_values:
|
||||||
output[cased_name] = value
|
output[cased_name] = value
|
||||||
|
elif value is None:
|
||||||
|
if include_default_values:
|
||||||
|
output[cased_name] = None
|
||||||
elif (
|
elif (
|
||||||
value._serialized_on_wire
|
value._serialized_on_wire
|
||||||
or include_default_values
|
or include_default_values
|
||||||
|
@ -265,6 +265,32 @@ def test_optional_flag():
|
|||||||
assert Request().parse(b"\n\x00").flag is False
|
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():
|
def test_to_json_default_values():
|
||||||
@dataclass
|
@dataclass
|
||||||
class TestMessage(betterproto.Message):
|
class TestMessage(betterproto.Message):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user