Skip to content

Commit 9fc2b6f

Browse files
srikrsna-bufSteve Ayers
authored andcommitted
Add implicit IGNORE_IF_UNPOPULATED for MessageOneofRule fields (#321)
bufbuild/protovalidate#382 --------- Signed-off-by: Sri Krishna <[email protected]>
1 parent e923050 commit 9fc2b6f

File tree

6 files changed

+58
-8
lines changed

6 files changed

+58
-8
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ ADD_LICENSE_HEADER := $(BIN)/license-header \
1717
--copyright-holder "Buf Technologies, Inc." \
1818
--year-range "2023-2025"
1919
# This version should be kept in sync with the version in buf.yaml
20-
PROTOVALIDATE_VERSION ?= v0.13.1
20+
PROTOVALIDATE_VERSION ?= v0.13.3
2121
# Version of the cel-spec that this implementation is conformant with
2222
# This should be kept in sync with the version in format_test.py
2323
CEL_SPEC_VERSION ?= v0.24.0

buf.lock

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
version: v2
33
deps:
44
- name: buf.build/bufbuild/protovalidate
5-
commit: c6451e2c05a64a659a0835011a72516c
6-
digest: b5:826b8be86c1bc691afb751fb33c513cb90a9b9d03699b366a7812737e72fe06132d13ca4b2f5fdb9c5784594b0f65b20b850003349a556e8f020b84ce6787bd1
5+
commit: 9f2d3c737feb481a83375159c0733275
6+
digest: b5:19d3b83f7df2d284ff5935f4622d7f27e7464a93c210edb536e92a52bcc69b2a18da1312e96b5461601eba7b3764d5e90321bd62e6966870e7dbc2e4dedd98d6
77
- name: buf.build/bufbuild/protovalidate-testing
8-
commit: 33dd956ff33d4a4085b2fa05cd7a14b8
9-
digest: b5:d142307939a7b8486fe7698e7d244c7e9c4a9c7ef812c97b46e8a7cc362f9c666f94f84dd66ad72fdb272ec23ed0cc415deed365318efdc9b24b92ef4e9ec415
8+
commit: 64cb206b26e840bcaacabae7b19bdf33
9+
digest: b5:f0abbad11668a70061ec8870c8c6b71f56e033ff97e0c22264648504e9a9c9f636304a01e27485eeacf7256f9bf25abc48503836948609f537a0fbc136be839b

buf.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ version: v2
22
modules:
33
- path: proto
44
deps:
5-
- buf.build/bufbuild/protovalidate:v0.13.1
6-
- buf.build/bufbuild/protovalidate-testing:v0.13.1
5+
- buf.build/bufbuild/protovalidate:v0.13.3
6+
- buf.build/bufbuild/protovalidate-testing:v0.13.3
77
lint:
88
use:
99
- STANDARD

gen/buf/validate/conformance/cases/messages_pb2.py

Lines changed: 19 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

gen/buf/validate/conformance/cases/messages_pb2.pyi

Lines changed: 24 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

protovalidate/internal/rules.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1047,10 +1047,13 @@ def _new_field_rule(
10471047
def _new_rules(self, desc: descriptor.Descriptor) -> list[Rules]:
10481048
result: list[Rules] = []
10491049
rule: typing.Optional[Rules] = None
1050+
all_msg_oneof_fields = set()
10501051
if validate_pb2.message in desc.GetOptions().Extensions:
10511052
message_level = desc.GetOptions().Extensions[validate_pb2.message]
10521053
if message_level.disabled:
10531054
return []
1055+
for oneof in message_level.oneof:
1056+
all_msg_oneof_fields.update(oneof.fields)
10541057
if rule := self._new_message_rule(message_level, desc):
10551058
result.append(rule)
10561059

@@ -1062,6 +1065,11 @@ def _new_rules(self, desc: descriptor.Descriptor) -> list[Rules]:
10621065
for field in desc.fields:
10631066
if validate_pb2.field in field.GetOptions().Extensions:
10641067
field_level = field.GetOptions().Extensions[validate_pb2.field]
1068+
if not field_level.HasField("ignore") and field.name in all_msg_oneof_fields:
1069+
field_level_override = validate_pb2.FieldRules()
1070+
field_level_override.CopyFrom(field_level)
1071+
field_level_override.ignore = validate_pb2.IGNORE_IF_UNPOPULATED
1072+
field_level = field_level_override
10651073
if field_level.ignore == validate_pb2.IGNORE_ALWAYS:
10661074
continue
10671075
result.append(self._new_field_rule(field, field_level))

0 commit comments

Comments
 (0)