diff --git a/src/fastcs_odin/util.py b/src/fastcs_odin/util.py index 38dec4f..9defee7 100644 --- a/src/fastcs_odin/util.py +++ b/src/fastcs_odin/util.py @@ -274,17 +274,18 @@ def unpack_status_arrays(parameters: list[OdinParameter], uris: list[list[str]]) return parameters -def create_attribute(parameter: OdinParameter, api_prefix: str): +def create_attribute( + parameter: OdinParameter, api_prefix: str, group: str | None = None +): """Create ``Attribute`` from ``OdinParameter``.""" if parameter.metadata.writeable: attr_class = AttrRW else: attr_class = AttrR - if len(parameter.path) >= 2: - group = snake_to_pascal(f"{parameter.path[0]}") - else: - group = None + if group is None: + if len(parameter.path) >= 2: + group = snake_to_pascal(f"{parameter.path[0]}") return attr_class( parameter.metadata.fastcs_datatype, diff --git a/tests/test_util.py b/tests/test_util.py index c6aa855..034d836 100644 --- a/tests/test_util.py +++ b/tests/test_util.py @@ -1,4 +1,13 @@ -from fastcs_odin.util import create_odin_parameters +import pytest +from fastcs.attributes import AttrR, AttrRW +from fastcs.datatypes import Int + +from fastcs_odin.util import ( + OdinParameter, + OdinParameterMetadata, + create_attribute, + create_odin_parameters, +) def test_create_parameters(): @@ -15,3 +24,40 @@ def test_create_parameters(): } parameters = create_odin_parameters(data) assert len(parameters) == 0 + + +@pytest.mark.parametrize( + "metadata, uri, expected_attr, group", + [ + ( + OdinParameterMetadata(value=0, type="int", writeable=False), + ["name"], + AttrR(Int(), io_ref=None, group=None), + None, + ), + ( + OdinParameterMetadata(value=0, type="int", writeable=True), + ["name"], + AttrRW(Int(), io_ref=None, group=None), + None, + ), + ( + OdinParameterMetadata(value=0, type="int", writeable=False), + ["my_group", "name"], + AttrR(Int(), io_ref=None, group="MyGroup"), + None, + ), + ( + OdinParameterMetadata(value=0, type="int", writeable=True), + ["my_group", "name"], + AttrRW(Int(), io_ref=None, group="MyOtherGroup"), + "MyOtherGroup", + ), + ], +) +def test_create_parameters_groups(metadata, uri, expected_attr, group): + param = OdinParameter(uri, metadata) + + attr = create_attribute(param, "test", group=group) + + assert attr.group == expected_attr.group