From 17fa18d9d2acd7a8b0c98bbf3d5a246fe77f0ba0 Mon Sep 17 00:00:00 2001 From: wakonig_k Date: Thu, 30 Oct 2025 16:25:24 +0100 Subject: [PATCH] fix: add metadata to scan control export --- .../widgets/control/scan_control/scan_control.py | 3 ++- .../widgets/editors/monaco/scan_control_dialog.py | 2 +- tests/unit_tests/test_monaco_editor.py | 2 +- tests/unit_tests/test_scan_control.py | 10 ++++++++-- 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/bec_widgets/widgets/control/scan_control/scan_control.py b/bec_widgets/widgets/control/scan_control/scan_control.py index 8948e4ef..6bbef6e0 100644 --- a/bec_widgets/widgets/control/scan_control/scan_control.py +++ b/bec_widgets/widgets/control/scan_control/scan_control.py @@ -467,6 +467,8 @@ class ScanControl(BECWidget, QWidget): for box in self.kwarg_boxes: box_kwargs = box.get_parameters(bec_object) kwargs.update(box_kwargs) + if self._scan_metadata is not None: + kwargs["metadata"] = self._scan_metadata return args, kwargs def restore_scan_parameters(self, scan_name: str): @@ -519,7 +521,6 @@ class ScanControl(BECWidget, QWidget): def run_scan(self): """Starts the selected scan with the given parameters.""" args, kwargs = self.get_scan_parameters() - kwargs["metadata"] = self._scan_metadata self.scan_args.emit(args) scan_function = getattr(self.scans, self.comboBox_scan_selection.currentText()) if callable(scan_function): diff --git a/bec_widgets/widgets/editors/monaco/scan_control_dialog.py b/bec_widgets/widgets/editors/monaco/scan_control_dialog.py index 2cbb7121..f77e62c5 100644 --- a/bec_widgets/widgets/editors/monaco/scan_control_dialog.py +++ b/bec_widgets/widgets/editors/monaco/scan_control_dialog.py @@ -89,7 +89,7 @@ class ScanControlDialog(QDialog): # Add keyword arguments (excluding metadata) if processed_kwargs: - kwargs_strs = [f"{k}={v}" for k, v in processed_kwargs.items() if k != "metadata"] + kwargs_strs = [f"{k}={v}" for k, v in processed_kwargs.items()] all_args.extend(kwargs_strs) # Join all arguments and create the scan call diff --git a/tests/unit_tests/test_monaco_editor.py b/tests/unit_tests/test_monaco_editor.py index 3f1c24fc..f0b39506 100644 --- a/tests/unit_tests/test_monaco_editor.py +++ b/tests/unit_tests/test_monaco_editor.py @@ -116,5 +116,5 @@ def test_monaco_widget_get_scan_control_code(monaco_widget: MonacoWidget, qtbot, scan_control_dialog.accept() out = scan_control_dialog.get_scan_code() - expected_code = "scans.grid_scan(dev.samx, -10.0, 10.0, 20, dev.samy, -5.0, 5.0, 10, exp_time=0.2, settling_time=0.1, burst_at_each_point=2, relative=False, optim_trajectory=None)" + expected_code = "scans.grid_scan(dev.samx, -10.0, 10.0, 20, dev.samy, -5.0, 5.0, 10, exp_time=0.2, settling_time=0.1, burst_at_each_point=2, relative=False, optim_trajectory=None, metadata={'sample_name': ''})" assert out == expected_code diff --git a/tests/unit_tests/test_scan_control.py b/tests/unit_tests/test_scan_control.py index 30ce317d..75f48af1 100644 --- a/tests/unit_tests/test_scan_control.py +++ b/tests/unit_tests/test_scan_control.py @@ -505,7 +505,13 @@ def test_get_scan_parameters_from_redis(scan_control, mocked_client): args, kwargs = scan_control.get_scan_parameters(bec_object=False) assert args == ["samx", 0.0, 2.0] - assert kwargs == {"steps": 10, "relative": False, "exp_time": 2.0, "burst_at_each_point": 1} + assert kwargs == { + "steps": 10, + "relative": False, + "exp_time": 2.0, + "burst_at_each_point": 1, + "metadata": {"sample_name": ""}, + } TEST_MD = {"sample_name": "Test Sample", "test key 1": "test value 1", "test key 2": "test value 2"} @@ -557,7 +563,7 @@ def test_scan_metadata_is_passed_to_scan_function(scan_control: ScanControl): scans = SimpleNamespace(grid_scan=MagicMock()) with ( patch.object(scan_control, "scans", scans), - patch.object(scan_control, "get_scan_parameters", lambda: ((), {})), + patch.object(scan_control, "get_scan_parameters", lambda: ((), {"metadata": TEST_MD})), ): scan_control.run_scan() scans.grid_scan.assert_called_once_with(metadata=TEST_MD)