From 49b5a023f1aebfa99c4225e48ddf4cdca76a2d94 Mon Sep 17 00:00:00 2001 From: Alex Dewar Date: Wed, 11 Dec 2024 10:43:31 +0000 Subject: [PATCH 1/2] Don't sort keys when saving measure scripts It's more readable if the version field is at the top. --- finesse/gui/measure_script/script_edit_dialog.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/finesse/gui/measure_script/script_edit_dialog.py b/finesse/gui/measure_script/script_edit_dialog.py index 459f37db..d53aa677 100644 --- a/finesse/gui/measure_script/script_edit_dialog.py +++ b/finesse/gui/measure_script/script_edit_dialog.py @@ -103,7 +103,7 @@ def _try_save(self) -> bool: try: with open(file_path, "w") as f: - yaml.safe_dump(script, f) + yaml.safe_dump(script, f, sort_keys=False) except Exception as e: show_error_message( self, f"Error occurred while saving file {file_path}:\n{e!s}" From 4016f562ef2608ab609930746af19490180c9c68 Mon Sep 17 00:00:00 2001 From: Alex Dewar Date: Wed, 11 Dec 2024 13:50:07 +0000 Subject: [PATCH 2/2] Accept measure scripts with missing version field Closes #741. --- finesse/gui/measure_script/script.py | 9 ++++++++- tests/gui/measure_script/test_script.py | 4 ++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/finesse/gui/measure_script/script.py b/finesse/gui/measure_script/script.py index 8dcdeac1..ace7e70f 100644 --- a/finesse/gui/measure_script/script.py +++ b/finesse/gui/measure_script/script.py @@ -127,7 +127,14 @@ def parse_script(script: str | TextIOBase) -> dict[str, Any]: ) try: - output = schema.validate(yaml.safe_load(script)) + output = yaml.safe_load(script) + + # v2.0.0 and older didn't have a version field, but the file formats are + # otherwise identical + if "version" not in output: + output["version"] = 1 + + output = schema.validate(output) output.pop("version") return output except (yaml.YAMLError, SchemaError) as e: diff --git a/tests/gui/measure_script/test_script.py b/tests/gui/measure_script/test_script.py index 6917cf28..0c3feb4f 100644 --- a/tests/gui/measure_script/test_script.py +++ b/tests/gui/measure_script/test_script.py @@ -44,9 +44,9 @@ def get_data(repeats: int, angle: Any, num_attributes: int) -> dict[str, Any]: {"angle": 4.0, "measurements": 1}, ] data = { - "version": CURRENT_SCRIPT_VERSION, "repeats": repeats, "sequence": angles, + "version": CURRENT_SCRIPT_VERSION, "extra_attribute": "hello", } @@ -59,7 +59,7 @@ def get_data(repeats: int, angle: Any, num_attributes: int) -> dict[str, Any]: ( get_data(repeats, angle, num_attributes), does_not_raise() - if repeats > 0 and is_valid_angle(angle) and num_attributes == 3 + if repeats > 0 and is_valid_angle(angle) and 2 <= num_attributes <= 3 else pytest.raises(ParseError), ) for repeats in range(-5, 5)