Skip to content

Commit 347db91

Browse files
Migrate field label to is_repeated, enums removed in protobuf v34.0 (#33)
* Migrate to is_repeated, enums removed in pb v34.0 Signed-off-by: Thomas Sedlmayer <tsedlmayer@pmsfit.de> * Require protobuf >=6.31.0 for FieldDescriptor.is_repeated Signed-off-by: Thomas Sedlmayer <tsedlmayer@pmsfit.de> * Do definition time switch of repeated field detection Signed-off-by: Pierre R. Mai <pmai@pmsf.de> * Align with osi-python * Fix poetry.lock Signed-off-by: Pierre R. Mai <pmai@pmsf.de> --------- Signed-off-by: Thomas Sedlmayer <tsedlmayer@pmsfit.de> Signed-off-by: Pierre R. Mai <pmai@pmsf.de> Co-authored-by: Pierre R. Mai <pmai@pmsf.de>
1 parent 26bd9dd commit 347db91

3 files changed

Lines changed: 17 additions & 4 deletions

File tree

poetry.lock

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

pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ asam-qc-baselib = {git = "https://github.com/asam-ev/qc-baselib-py.git", rev = "
1616
osi-python = {git = "https://github.com/OpenSimulationInterface/osi-python.git", rev = "main"}
1717
pyyaml = "^6.0.0"
1818
iso3166 = "^2.1.1"
19+
protobuf = ">=6.30.2"
1920

2021
[tool.poetry.group.dev.dependencies]
2122
pytest = "^8.2.2"

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.label == field_descriptor.LABEL_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.label == field_descriptor.LABEL_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.label == field.LABEL_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)