Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion poetry.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ asam-qc-baselib = {git = "https://github.com/asam-ev/qc-baselib-py.git", rev = "
osi-python = {git = "https://github.com/OpenSimulationInterface/osi-python.git", rev = "main"}
pyyaml = "^6.0.0"
iso3166 = "^2.1.1"
protobuf = ">=6.30.2"

[tool.poetry.group.dev.dependencies]
pytest = "^8.2.2"
Expand Down
18 changes: 15 additions & 3 deletions qc_ositrace/checks/osirules/osirules_checker.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
)

from osi3trace.osi_trace import OSITrace
import google.protobuf.descriptor
import google.protobuf.message

from importlib import resources as impresources
Expand Down Expand Up @@ -125,6 +126,17 @@ def register_issue(
)


if hasattr(google.protobuf.descriptor.FieldDescriptor, "is_repeated"):

def field_descriptor_is_repeated(field_descriptor) -> bool:
return bool(field_descriptor.is_repeated)

else:

def field_descriptor_is_repeated(field_descriptor) -> bool:
return field_descriptor.label == field_descriptor.LABEL_REPEATED


def evaluate_rule_condition(
message: google.protobuf.message.Message, field_name: str, rule: dict
) -> bool:
Expand All @@ -134,7 +146,7 @@ def evaluate_rule_condition(
f"Field '{field_name}' not found in message '{message.DESCRIPTOR.full_name}'. Rule evaluation skipped."
)
return False
if field_descriptor.label == field_descriptor.LABEL_REPEATED:
if field_descriptor_is_repeated(field_descriptor):
values = getattr(message, field_name)
else:
values = [getattr(message, field_name)] if message.HasField(field_name) else []
Expand Down Expand Up @@ -198,7 +210,7 @@ def check_message_against_rules(
f"Field '{field_name}' not found in message '{message.DESCRIPTOR.full_name}'. Skipping rules check."
)
continue
if field_descriptor.label == field_descriptor.LABEL_REPEATED:
if field_descriptor_is_repeated(field_descriptor):
has_field = True
values = getattr(message, field_name)
else:
Expand Down Expand Up @@ -264,7 +276,7 @@ def check_message_against_rules(

# Process other rules for each set field
for field, value in message.ListFields():
values = value if field.label == field.LABEL_REPEATED else [value]
values = value if field_descriptor_is_repeated(field) else [value]
for rule_uid, rule in field_rules.get(field.name, []):
if "is_greater_than" in rule and not all(
[value > rule["is_greater_than"] for value in values]
Expand Down
Loading