Skip to content

Commit 6e5157c

Browse files
committed
Do definition time switch of repeated field detection
Signed-off-by: Pierre R. Mai <pmai@pmsf.de>
1 parent 13a652d commit 6e5157c

1 file changed

Lines changed: 15 additions & 3 deletions

File tree

qc_ositrace/checks/osirules/osirules_checker.py

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
)
1111

1212
from osi3trace.osi_trace import OSITrace
13+
import google.protobuf.descriptor
1314
import google.protobuf.message
1415

1516
from importlib import resources as impresources
@@ -125,6 +126,17 @@ def register_issue(
125126
)
126127

127128

129+
if hasattr(google.protobuf.descriptor.FieldDescriptor, "is_repeated"):
130+
131+
def field_descriptor_is_repeated(field_descriptor) -> bool:
132+
return bool(field_descriptor.is_repeated)
133+
134+
else:
135+
136+
def field_descriptor_is_repeated(field_descriptor) -> bool:
137+
return field_descriptor.label == field_descriptor.LABEL_REPEATED
138+
139+
128140
def evaluate_rule_condition(
129141
message: google.protobuf.message.Message, field_name: str, rule: dict
130142
) -> bool:
@@ -134,7 +146,7 @@ def evaluate_rule_condition(
134146
f"Field '{field_name}' not found in message '{message.DESCRIPTOR.full_name}'. Rule evaluation skipped."
135147
)
136148
return False
137-
if field_descriptor.is_repeated:
149+
if field_descriptor_is_repeated(field_descriptor):
138150
values = getattr(message, field_name)
139151
else:
140152
values = [getattr(message, field_name)] if message.HasField(field_name) else []
@@ -198,7 +210,7 @@ def check_message_against_rules(
198210
f"Field '{field_name}' not found in message '{message.DESCRIPTOR.full_name}'. Skipping rules check."
199211
)
200212
continue
201-
if field_descriptor.is_repeated:
213+
if field_descriptor_is_repeated(field_descriptor):
202214
has_field = True
203215
values = getattr(message, field_name)
204216
else:
@@ -264,7 +276,7 @@ def check_message_against_rules(
264276

265277
# Process other rules for each set field
266278
for field, value in message.ListFields():
267-
values = value if field.is_repeated else [value]
279+
values = value if field_descriptor_is_repeated(field) else [value]
268280
for rule_uid, rule in field_rules.get(field.name, []):
269281
if "is_greater_than" in rule and not all(
270282
[value > rule["is_greater_than"] for value in values]

0 commit comments

Comments
 (0)