mirror of
https://github.com/tiqi-group/pydase.git
synced 2025-04-20 00:10:03 +02:00
simplifies serializer logic
This commit is contained in:
parent
a88a0c6133
commit
51ffd8be4d
@ -295,31 +295,22 @@ def set_nested_value_by_path(
|
|||||||
logger.error(e)
|
logger.error(e)
|
||||||
return
|
return
|
||||||
|
|
||||||
serialized_value = dump(value)
|
if next_level_serialized_object["type"] == "method": # state change of task
|
||||||
keys_to_keep = set(serialized_value.keys())
|
|
||||||
|
|
||||||
if (
|
|
||||||
next_level_serialized_object == {}
|
|
||||||
): # adding an attribute / element to a list or dict
|
|
||||||
pass
|
|
||||||
elif next_level_serialized_object["type"] == "method": # state change of task
|
|
||||||
keys_to_keep = set(next_level_serialized_object.keys())
|
|
||||||
|
|
||||||
serialized_value = {} # type: ignore
|
|
||||||
next_level_serialized_object["value"] = (
|
next_level_serialized_object["value"] = (
|
||||||
value.name if isinstance(value, Enum) else None
|
value.name if isinstance(value, Enum) else None
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
# attribute-specific information should not be overwritten by new value
|
serialized_value = dump(value)
|
||||||
serialized_value.pop("readonly") # type: ignore
|
keys_to_keep = set(serialized_value.keys())
|
||||||
serialized_value.pop("doc") # type: ignore
|
|
||||||
|
|
||||||
next_level_serialized_object.update(serialized_value)
|
# TODO: you might want to pop "readonly" and/or "doc" from serialized_value if
|
||||||
|
# it is overwriting the values of the current dict
|
||||||
|
next_level_serialized_object.update(serialized_value)
|
||||||
|
|
||||||
# removes keys that are not present in the serialized new value
|
# removes keys that are not present in the serialized new value
|
||||||
for key in list(next_level_serialized_object.keys()):
|
for key in list(next_level_serialized_object.keys()):
|
||||||
if key not in keys_to_keep:
|
if key not in keys_to_keep:
|
||||||
next_level_serialized_object.pop(key, None) # type: ignore
|
next_level_serialized_object.pop(key, None) # type: ignore
|
||||||
|
|
||||||
|
|
||||||
def get_nested_dict_by_path(
|
def get_nested_dict_by_path(
|
||||||
@ -383,7 +374,12 @@ def get_next_level_dict_by_key(
|
|||||||
):
|
):
|
||||||
# Appending to list
|
# Appending to list
|
||||||
cast(list[SerializedObject], serialization_dict[attr_name]["value"]).append(
|
cast(list[SerializedObject], serialization_dict[attr_name]["value"]).append(
|
||||||
{} # type: ignore
|
{
|
||||||
|
"value": None,
|
||||||
|
"type": None,
|
||||||
|
"doc": None,
|
||||||
|
"readonly": False,
|
||||||
|
}
|
||||||
)
|
)
|
||||||
next_level_serialized_object = cast(
|
next_level_serialized_object = cast(
|
||||||
list[SerializedObject], serialization_dict[attr_name]["value"]
|
list[SerializedObject], serialization_dict[attr_name]["value"]
|
||||||
|
@ -21,6 +21,8 @@ from pydase.utils.serializer import (
|
|||||||
|
|
||||||
|
|
||||||
class MyEnum(enum.Enum):
|
class MyEnum(enum.Enum):
|
||||||
|
"""MyEnum description"""
|
||||||
|
|
||||||
RUNNING = "running"
|
RUNNING = "running"
|
||||||
FINISHED = "finished"
|
FINISHED = "finished"
|
||||||
|
|
||||||
@ -425,7 +427,7 @@ def test_update_nested_attribute(setup_dict: dict[str, Any]) -> None:
|
|||||||
def test_update_float_attribute_to_enum(setup_dict: dict[str, Any]) -> None:
|
def test_update_float_attribute_to_enum(setup_dict: dict[str, Any]) -> None:
|
||||||
set_nested_value_by_path(setup_dict, "attr2.attr3", MyEnum.RUNNING)
|
set_nested_value_by_path(setup_dict, "attr2.attr3", MyEnum.RUNNING)
|
||||||
assert setup_dict["attr2"]["value"]["attr3"] == {
|
assert setup_dict["attr2"]["value"]["attr3"] == {
|
||||||
"doc": None,
|
"doc": "MyEnum description",
|
||||||
"enum": {"FINISHED": "finished", "RUNNING": "running"},
|
"enum": {"FINISHED": "finished", "RUNNING": "running"},
|
||||||
"readonly": False,
|
"readonly": False,
|
||||||
"type": "Enum",
|
"type": "Enum",
|
||||||
@ -471,8 +473,14 @@ def test_update_list_entry(setup_dict: dict[str, SerializedObject]) -> None:
|
|||||||
|
|
||||||
|
|
||||||
def test_update_list_append(setup_dict: dict[str, SerializedObject]) -> None:
|
def test_update_list_append(setup_dict: dict[str, SerializedObject]) -> None:
|
||||||
set_nested_value_by_path(setup_dict, "attr_list[3]", 20)
|
set_nested_value_by_path(setup_dict, "attr_list[3]", MyEnum.RUNNING)
|
||||||
assert setup_dict["attr_list"]["value"][3]["value"] == 20
|
assert setup_dict["attr_list"]["value"][3] == {
|
||||||
|
"doc": "MyEnum description",
|
||||||
|
"enum": {"FINISHED": "finished", "RUNNING": "running"},
|
||||||
|
"readonly": False,
|
||||||
|
"type": "Enum",
|
||||||
|
"value": "RUNNING",
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
def test_update_invalid_list_index(
|
def test_update_invalid_list_index(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user