From ee9dbb53913b90459cf1a09f4518a06c3dc5cd23 Mon Sep 17 00:00:00 2001 From: Sebastian Schleemilch Date: Fri, 30 Aug 2024 09:51:15 +0200 Subject: [PATCH 1/2] Added is_instance to branch attributes The info might be of interest to exporters. Signed-off-by: Sebastian Schleemilch --- src/vss_tools/vspec/model.py | 3 ++- src/vss_tools/vspec/tree.py | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/vss_tools/vspec/model.py b/src/vss_tools/vspec/model.py index f28aa582..e22df360 100644 --- a/src/vss_tools/vspec/model.py +++ b/src/vss_tools/vspec/model.py @@ -30,7 +30,7 @@ resolve_datatype, ) -EXPORT_EXCLUDE_ATTRIBUTES = ["delete", "instantiate", "fqn", "arraysize", "aggregate"] +EXPORT_EXCLUDE_ATTRIBUTES = ["delete", "instantiate", "fqn", "arraysize", "aggregate", "is_instance"] class ModelException(Exception): @@ -117,6 +117,7 @@ def check_const_uid_format(cls, v: str) -> str: class VSSDataBranch(VSSData): instances: Any = None aggregate: bool = False + is_instance: bool = False @field_validator("instances") @classmethod diff --git a/src/vss_tools/vspec/tree.py b/src/vss_tools/vspec/tree.py index b2241977..ce6072c1 100644 --- a/src/vss_tools/vspec/tree.py +++ b/src/vss_tools/vspec/tree.py @@ -436,6 +436,8 @@ def expand_instance( node = template.copy() node.name = name node.data.instances = [] # type: ignore + if isinstance(node.data, VSSDataBranch): + node.data.is_instance = True node.parent = root nodes.append(node) node.children = [] From df93801dffbc707ff44922b32bd58bc9b2f21a16 Mon Sep 17 00:00:00 2001 From: Sebastian Schleemilch Date: Mon, 2 Sep 2024 16:38:53 +0200 Subject: [PATCH 2/2] Added test for is_instance Signed-off-by: Sebastian Schleemilch --- tests/vspec/test_isinstance/test.vspec | 13 ++++++++++ .../vspec/test_isinstance/test_isinstance.py | 26 +++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 tests/vspec/test_isinstance/test.vspec create mode 100644 tests/vspec/test_isinstance/test_isinstance.py diff --git a/tests/vspec/test_isinstance/test.vspec b/tests/vspec/test_isinstance/test.vspec new file mode 100644 index 00000000..592dfb88 --- /dev/null +++ b/tests/vspec/test_isinstance/test.vspec @@ -0,0 +1,13 @@ +Vehicle: + description: Vehicle + type: branch + +Vehicle.Door: + description: Door + type: branch + instances: + - Row[1,2] + +Vehicle.Door.Row1.Special: + description: Special + type: branch diff --git a/tests/vspec/test_isinstance/test_isinstance.py b/tests/vspec/test_isinstance/test_isinstance.py new file mode 100644 index 00000000..49d82763 --- /dev/null +++ b/tests/vspec/test_isinstance/test_isinstance.py @@ -0,0 +1,26 @@ +# Copyright (c) 2022 Contributors to COVESA +# +# This program and the accompanying materials are made available under the +# terms of the Mozilla Public License 2.0 which is available at +# https://www.mozilla.org/en-US/MPL/2.0/ +# +# SPDX-License-Identifier: MPL-2.0 + +from pathlib import Path + +from vss_tools.vspec.main import get_trees + +HERE = Path(__file__).resolve().parent + + +def test_exporters(): + tree, _ = get_trees( + vspec=HERE / "test.vspec", + ) + door = tree.children[0] + row1 = door.children[0] + assert row1.data.is_instance + door.children[1] + assert row1.data.is_instance + special = row1.children[0] + assert not special.data.is_instance