From 044b7297165ba3faaed6cc03079180a71da92b81 Mon Sep 17 00:00:00 2001 From: Thomas Sedlmayer Date: Fri, 24 Apr 2026 14:36:58 +0200 Subject: [PATCH 1/5] Migrate to is_repeated, enums removed in pb v34.0 Signed-off-by: Thomas Sedlmayer --- qc_ositrace/checks/osirules/osirules_checker.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/qc_ositrace/checks/osirules/osirules_checker.py b/qc_ositrace/checks/osirules/osirules_checker.py index 208dafb..41a4988 100644 --- a/qc_ositrace/checks/osirules/osirules_checker.py +++ b/qc_ositrace/checks/osirules/osirules_checker.py @@ -134,7 +134,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: values = getattr(message, field_name) else: values = [getattr(message, field_name)] if message.HasField(field_name) else [] @@ -198,7 +198,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: has_field = True values = getattr(message, field_name) else: @@ -264,7 +264,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.is_repeated 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] From 13a652d51162883c585a8226097d21500c4ba1e4 Mon Sep 17 00:00:00 2001 From: Thomas Sedlmayer Date: Fri, 24 Apr 2026 16:14:43 +0200 Subject: [PATCH 2/5] Require protobuf >=6.31.0 for FieldDescriptor.is_repeated Signed-off-by: Thomas Sedlmayer --- poetry.lock | 6 +++--- pyproject.toml | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 5cc4871..ef869a6 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 2.1.3 and should not be changed by hand. +# This file is automatically @generated by Poetry 2.3.1 and should not be changed by hand. [[package]] name = "annotated-types" @@ -935,9 +935,9 @@ files = [ ] [package.extras] -cffi = ["cffi (>=1.17,<2.0) ; platform_python_implementation != \"PyPy\" and python_version < \"3.14\"", "cffi (>=2.0.0b) ; platform_python_implementation != \"PyPy\" and python_version >= \"3.14\""] +cffi = ["cffi (>=1.17,<2.0) ; platform_python_implementation != \"PyPy\" and python_version < \"3.14\"", "cffi (>=2.0.0b0) ; platform_python_implementation != \"PyPy\" and python_version >= \"3.14\""] [metadata] lock-version = "2.1" python-versions = "^3.10" -content-hash = "062583db7ebaf0380273033b41ada3514af90a26b06d7ca44a24d92320883586" +content-hash = "a638470b19e79d02490f58e77bf4757133e912edb7f7763eac1a15ba8d567372" diff --git a/pyproject.toml b/pyproject.toml index 2d54c20..649d9ce 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -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.31.0" [tool.poetry.group.dev.dependencies] pytest = "^8.2.2" From 6e5157c1fde7a41a4f734ede7b7ad1d1047bdb0f Mon Sep 17 00:00:00 2001 From: "Pierre R. Mai" Date: Fri, 24 Apr 2026 17:31:47 +0200 Subject: [PATCH 3/5] Do definition time switch of repeated field detection Signed-off-by: Pierre R. Mai --- .../checks/osirules/osirules_checker.py | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/qc_ositrace/checks/osirules/osirules_checker.py b/qc_ositrace/checks/osirules/osirules_checker.py index 41a4988..cae05fb 100644 --- a/qc_ositrace/checks/osirules/osirules_checker.py +++ b/qc_ositrace/checks/osirules/osirules_checker.py @@ -10,6 +10,7 @@ ) from osi3trace.osi_trace import OSITrace +import google.protobuf.descriptor import google.protobuf.message from importlib import resources as impresources @@ -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: @@ -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.is_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 [] @@ -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.is_repeated: + if field_descriptor_is_repeated(field_descriptor): has_field = True values = getattr(message, field_name) else: @@ -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.is_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] From f15b131694867538d6733dfaf9998b4672c5c952 Mon Sep 17 00:00:00 2001 From: "Pierre R. Mai" Date: Thu, 7 May 2026 11:00:09 +0200 Subject: [PATCH 4/5] Align with osi-python --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 649d9ce..7ecb005 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -16,7 +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.31.0" +protobuf = ">=6.30.2" [tool.poetry.group.dev.dependencies] pytest = "^8.2.2" From 841db059b448ed345e578f7515dbb71ca60d7aeb Mon Sep 17 00:00:00 2001 From: "Pierre R. Mai" Date: Thu, 7 May 2026 11:05:49 +0200 Subject: [PATCH 5/5] Fix poetry.lock Signed-off-by: Pierre R. Mai --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index ef869a6..628c963 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 2.3.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 2.1.3 and should not be changed by hand. [[package]] name = "annotated-types" @@ -935,9 +935,9 @@ files = [ ] [package.extras] -cffi = ["cffi (>=1.17,<2.0) ; platform_python_implementation != \"PyPy\" and python_version < \"3.14\"", "cffi (>=2.0.0b0) ; platform_python_implementation != \"PyPy\" and python_version >= \"3.14\""] +cffi = ["cffi (>=1.17,<2.0) ; platform_python_implementation != \"PyPy\" and python_version < \"3.14\"", "cffi (>=2.0.0b) ; platform_python_implementation != \"PyPy\" and python_version >= \"3.14\""] [metadata] lock-version = "2.1" python-versions = "^3.10" -content-hash = "a638470b19e79d02490f58e77bf4757133e912edb7f7763eac1a15ba8d567372" +content-hash = "3c3f0f5ca716db37fdddecde7ea969bc8a21e7ee3576798f45a13cda003117de"