diff --git a/src/pydase/utils/helpers.py b/src/pydase/utils/helpers.py index f68f995..6124d2e 100644 --- a/src/pydase/utils/helpers.py +++ b/src/pydase/utils/helpers.py @@ -125,7 +125,9 @@ def parse_keyed_attribute(attr_string: str) -> tuple[str, str | float | int | No >>> parse_keyed_attribute('attr_name') ("attr_name", None) >>> parse_keyed_attribute('dict_attr["key"]') - ("dict_attr", 'key') + ("dict_attr", "key") + >>> parse_keyed_attribute("dict_attr['key']") + ("dict_attr", "key") >>> parse_keyed_attribute("dict_attr["0"]") ("dict_attr", "0") >>> parse_keyed_attribute("dict_attr[0]") @@ -139,7 +141,7 @@ def parse_keyed_attribute(attr_string: str) -> tuple[str, str | float | int | No attr_name, key_part = attr_string.split("[", 1) key_part = key_part.rstrip("]") # Remove quotes if present (supports both single and double quotes) - if key_part.startswith('"') and key_part.endswith('"'): + if key_part.startswith(('"', "'")) and key_part.endswith(('"', "'")): key = key_part[1:-1] elif "." in key_part: key = float(key_part) diff --git a/tests/utils/test_helpers.py b/tests/utils/test_helpers.py index e911944..dfbfb87 100644 --- a/tests/utils/test_helpers.py +++ b/tests/utils/test_helpers.py @@ -40,9 +40,18 @@ def test_is_property_attribute(attr_name: str, expected: bool) -> None: ("list_attr[2]", ("list_attr", 2)), ('dict_attr["2"]', ("dict_attr", "2")), ('dict_attr["some_key"]', ("dict_attr", "some_key")), + ("dict_attr['some_key']", ("dict_attr", "some_key")), ("dict_attr[2]", ("dict_attr", 2)), ("dict_attr[2.1]", ("dict_attr", 2.1)), ], ) def test_parse_keyed_attributes(attr_name: str, expected: tuple[str, Any]) -> None: assert parse_keyed_attribute(attr_name) == expected + + +# def test_get_nested_dict_by_path() -> None: +# obj = {"2.1": "foo", 2.1: "bar"} +# serialized_object = { +# "dict_attr": dump(obj=obj), +# } +# assert get_nested_dict_by_path(serialized_object, 'dict_attr["2.1"]') == {}