Fix is_set for optional proto3 fields
This commit is contained in:
parent
6f7d706a8e
commit
3ca092a724
@ -1319,7 +1319,12 @@ class Message(ABC):
|
|||||||
:class:`bool`
|
:class:`bool`
|
||||||
`True` if field has been set, otherwise `False`.
|
`True` if field has been set, otherwise `False`.
|
||||||
"""
|
"""
|
||||||
return self.__raw_get(name) is not PLACEHOLDER
|
default = (
|
||||||
|
PLACEHOLDER
|
||||||
|
if not self._betterproto.meta_by_field_name[name].optional
|
||||||
|
else None
|
||||||
|
)
|
||||||
|
return self.__raw_get(name) is not default
|
||||||
|
|
||||||
|
|
||||||
def serialized_on_wire(message: Message) -> bool:
|
def serialized_on_wire(message: Message) -> bool:
|
||||||
|
@ -517,3 +517,15 @@ def test_copyability():
|
|||||||
assert spam == deepcopied
|
assert spam == deepcopied
|
||||||
assert spam is not deepcopied
|
assert spam is not deepcopied
|
||||||
assert spam.baz is not deepcopied.baz
|
assert spam.baz is not deepcopied.baz
|
||||||
|
|
||||||
|
|
||||||
|
def test_is_set():
|
||||||
|
@dataclass
|
||||||
|
class Spam(betterproto.Message):
|
||||||
|
foo: bool = betterproto.bool_field(1)
|
||||||
|
bar: Optional[int] = betterproto.int32_field(2, optional=True)
|
||||||
|
|
||||||
|
assert not Spam().is_set("foo")
|
||||||
|
assert not Spam().is_set("bar")
|
||||||
|
assert Spam(foo=True).is_set("foo")
|
||||||
|
assert Spam(foo=True, bar=0).is_set("bar")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user