diff --git a/ankaios_sdk/_components/workload.py b/ankaios_sdk/_components/workload.py index 012cf62a..82b61aad 100644 --- a/ankaios_sdk/_components/workload.py +++ b/ankaios_sdk/_components/workload.py @@ -49,7 +49,7 @@ .. code-block:: python tags = workload.get_tags() - tags.pop("key1") + del tags["key1"] workload.update_tags(tags) - Print the updated workload: @@ -246,34 +246,33 @@ def add_tag(self, key: str, value: str) -> None: key (str): The key of the tag. value (str): The value of the tag. """ - tag = _ank_base.Tag(key=key, value=value) - self._workload.tags.tags.append(tag) + tag = {key: value} + self._workload.tags.tags.update(tag) if f"{self._main_mask}.tags" not in self.masks: self._add_mask(f"{self._main_mask}.tags.{key}") - def get_tags(self) -> list[tuple[str, str]]: + def get_tags(self) -> dict[str, str]: """ Return the tags of the workload. Returns: - list: A list of tuples containing tag keys and values. + dict: A dict containing tag keys and values. """ - tags = [] - for tag in self._workload.tags.tags: - tags.append((tag.key, tag.value)) + tags = {} + for key, value in self._workload.tags.tags.items(): + tags.update({key: value}) return tags - def update_tags(self, tags: list) -> None: + def update_tags(self, tags: dict) -> None: """ Update the tags of the workload. Args: - tags (list): A list of tuples containing tag keys and values. + tags (dict): A dict containing tag keys and values. """ - del self._workload.tags.tags[:] - for key, value in tags: - tag = _ank_base.Tag(key=key, value=value) - self._workload.tags.tags.append(tag) + self._workload.tags.tags.clear() + for key, value in tags.items(): + self._workload.tags.tags.update({key: value}) self.masks = [ mask for mask in self.masks @@ -436,12 +435,10 @@ def to_dict(self) -> dict: workload_dict["dependencies"][dep_key] = ( _ank_base.AddCondition.Name(dep_value) ) - workload_dict["tags"] = [] + workload_dict["tags"] = {} if self._workload.tags: - for tag in self._workload.tags.tags: - workload_dict["tags"].append( - {"key": tag.key, "value": tag.value} - ) + for key, value in self._workload.tags.tags.items(): + workload_dict["tags"].update({key: value}) workload_dict["controlInterfaceAccess"] = {} if self._workload.controlInterfaceAccess: workload_dict["controlInterfaceAccess"]["allowRules"] = [] @@ -490,8 +487,8 @@ def _from_dict(workload_name: str, dict_workload: dict) -> "Workload": for dep_key, dep_value in dict_workload["dependencies"].items(): workload = workload.add_dependency(dep_key, dep_value) if "tags" in dict_workload: - for tag in dict_workload["tags"]: - workload = workload.add_tag(tag["key"], tag["value"]) + for key, value in dict_workload["tags"].items(): + workload = workload.add_tag(key, value) if "controlInterfaceAccess" in dict_workload: if "allowRules" in dict_workload["controlInterfaceAccess"]: for rule in dict_workload["controlInterfaceAccess"][ diff --git a/ankaios_sdk/_components/workload_builder.py b/ankaios_sdk/_components/workload_builder.py index 25260001..1e347462 100644 --- a/ankaios_sdk/_components/workload_builder.py +++ b/ankaios_sdk/_components/workload_builder.py @@ -61,7 +61,7 @@ class WorkloadBuilder: wl_runtime_config (str): The runtime configuration. wl_restart_policy (str): The restart policy. dependencies (dict): The dependencies. - tags (list): The tags. + tags (dict): The tags. """ def __init__(self) -> None: @@ -74,7 +74,7 @@ def __init__(self) -> None: self.wl_runtime_config = None self.wl_restart_policy = None self.dependencies = {} - self.tags = [] + self.tags = {} self.allow_rules = [] self.deny_rules = [] self.configs = {} @@ -188,7 +188,7 @@ def add_tag(self, key: str, value: str) -> "WorkloadBuilder": Returns: WorkloadBuilder: The builder object. """ - self.tags.append((key, value)) + self.tags.update({key: value}) return self def add_allow_state_rule( diff --git a/tests/test_complete_state.py b/tests/test_complete_state.py index 0d780feb..80544874 100644 --- a/tests/test_complete_state.py +++ b/tests/test_complete_state.py @@ -189,7 +189,7 @@ def test_to_dict(): "runtimeConfig": "image: control_interface_prod:0.1\\n", "dependencies": {"nginx": "ADD_COND_RUNNING"}, "restartPolicy": "ALWAYS", - "tags": [{"key": "owner", "value": "Ankaios team"}], + "tags": {"owner": "Ankaios team"}, "controlInterfaceAccess": { "allowRules": [ { diff --git a/tests/test_workload_builder.py b/tests/test_workload_builder.py index 5f9404dd..8a29d6df 100644 --- a/tests/test_workload_builder.py +++ b/tests/test_workload_builder.py @@ -109,11 +109,11 @@ def test_add_tag( """ assert len(builder.tags) == 0 - assert builder.add_tag("key_test", "abc") == builder - assert builder.tags == [("key_test", "abc")] + assert builder.add_tag("key_test_1", "abc") == builder + assert builder.tags == {"key_test_1": "abc"} - assert builder.add_tag("key_test", "bcd") == builder - assert builder.tags == [("key_test", "abc"), ("key_test", "bcd")] + assert builder.add_tag("key_test_2", "bcd") == builder + assert builder.tags == {"key_test_1": "abc", "key_test_2": "bcd"} def test_add_state_rule( @@ -278,9 +278,7 @@ def test_build( "workload_test_other": _ank_base.AddCondition.ADD_COND_RUNNING } ) - assert workload._workload.tags == _ank_base.Tags( - tags=[_ank_base.Tag(key="key_test", value="abc")] - ) + assert workload._workload.tags == _ank_base.Tags(tags={"key_test": "abc"}) assert workload._workload.controlInterfaceAccess.allowRules == [ _ank_base.AccessRightsRule( stateRule=_ank_base.StateRule( diff --git a/tests/workload/test_workload.py b/tests/workload/test_workload.py index 7687d823..bc7c19c9 100644 --- a/tests/workload/test_workload.py +++ b/tests/workload/test_workload.py @@ -43,9 +43,7 @@ runtime="podman", runtimeConfig=r"image: control_interface_prod:0.1\n", restartPolicy=_ank_base.ALWAYS, - tags=_ank_base.Tags( - tags=[_ank_base.Tag(key="owner", value="Ankaios team")] - ), + tags=_ank_base.Tags(tags={"owner": "Ankaios team"}), dependencies=_ank_base.Dependencies( dependencies={"nginx": _ank_base.ADD_COND_RUNNING} ), @@ -217,15 +215,15 @@ def test_tags(workload: Workload): # pylint: disable=redefined-outer-name """ assert len(workload.get_tags()) == 2 - # Allow duplicate tags + # Disallow duplicate tags workload.add_tag("key1", "new_value1") - assert len(workload.get_tags()) == 3 + assert len(workload.get_tags()) == 2 tags = workload.get_tags() - tags = tags[1:] + _ = tags.pop(list(tags.keys())[0]) workload.update_tags(tags) - assert len(workload.get_tags()) == 2 + assert len(workload.get_tags()) == 1 def test_rules(workload: Workload): # pylint: disable=redefined-outer-name @@ -334,10 +332,7 @@ def test_to_proto(workload: Workload): # pylint: disable=redefined-outer-name "workload_test_other": _ank_base.ADD_COND_RUNNING } assert proto.tags == _ank_base.Tags( - tags=[ - _ank_base.Tag(key="key1", value="value1"), - _ank_base.Tag(key="key2", value="value2"), - ] + tags={"key1": "value1", "key2": "value2"}, ) @@ -401,7 +396,7 @@ def test_from_to_dict(): ), ( "update_tags", - {"tags": [("key1", "value1"), ("key2", "value2")]}, + {"tags": {"key1": "value1", "key2": "value2"}}, f"{WORKLOADS_PREFIX}.workload_test.tags", ), (