From d1628ae8c903eb5bfbcc57916f99aa130c3b19f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mose=20M=C3=BCller?= Date: Tue, 5 Mar 2024 16:05:01 +0100 Subject: [PATCH] fixes updating task state --- src/pydase/utils/serializer.py | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/src/pydase/utils/serializer.py b/src/pydase/utils/serializer.py index e91ea77..c54504c 100644 --- a/src/pydase/utils/serializer.py +++ b/src/pydase/utils/serializer.py @@ -267,18 +267,24 @@ def set_nested_value_by_path( logger.error(e) return - # setting the new value serialized_value = dump(value) - serialized_value.pop("readonly", None) - value_type = serialized_value.pop("type") - if "readonly" in current_dict and current_dict["type"] != "method": - current_dict["type"] = value_type + keys_to_keep = set(serialized_value.keys()) + + if current_dict == {}: # adding an attribute / element to a list or dict + pass + elif current_dict["type"] == "method": # state change of task + keys_to_keep = set(current_dict.keys()) + + serialized_value = current_dict + serialized_value["value"] = value.name if isinstance(value, Enum) else None + else: + # attribute-specific information should not be overwritten by new value + serialized_value.pop("readonly") + serialized_value.pop("doc") current_dict.update(serialized_value) # removes keys that are not present in the serialized new value - keys_to_keep = set(serialized_value.keys()) | {"type", "readonly"} - for key in list(current_dict.keys()): if key not in keys_to_keep: current_dict.pop(key, None)