0
0
mirror of https://github.com/bec-project/bec_widgets.git synced 2025-07-13 19:21:50 +02:00

fix(scan_control): scan parameters fetched from the scan_history, fix #707

This commit is contained in:
2025-06-22 21:19:37 +02:00
committed by Jan Wyzula
parent ae26b43fb1
commit 4456297beb
2 changed files with 34 additions and 83 deletions

View File

@ -206,26 +206,23 @@ class ScanControl(BECWidget, QWidget):
enabled = self.toggle.checked enabled = self.toggle.checked
current_scan = self.comboBox_scan_selection.currentText() current_scan = self.comboBox_scan_selection.currentText()
if enabled: if enabled:
history = self.client.connector.lrange(MessageEndpoints.scan_queue_history(), 0, -1) history = self.client.connector.xread(MessageEndpoints.scan_history(), from_start=True)
for scan in history: for scan in history:
scan_name = scan.content["info"]["request_blocks"][-1]["msg"].content["scan_type"] scan_data = scan.get("data")
if scan_data is None:
continue
scan_name = scan_data.scan_name
if scan_name == current_scan: if scan_name == current_scan:
args_dict = scan.content["info"]["request_blocks"][-1]["msg"].content[ args_list = scan_data.request_inputs.get("arg_bundle", [])
"parameter"
]["args"]
args_list = []
for key, value in args_dict.items():
args_list.append(key)
args_list.extend(value)
if len(args_list) > 1 and self.arg_box is not None: if len(args_list) > 1 and self.arg_box is not None:
self.arg_box.set_parameters(args_list) self.arg_box.set_parameters(args_list)
kwargs = scan.content["info"]["request_blocks"][-1]["msg"].content["parameter"][ inputs = scan_data.request_inputs.get("inputs", {})
"kwargs" kwargs = scan_data.request_inputs.get("kwargs", {})
] kwarg_box_inputs = {**inputs, **kwargs}
if kwargs and self.kwarg_boxes: if kwarg_box_inputs and self.kwarg_boxes:
for box in self.kwarg_boxes: for box in self.kwarg_boxes:
box.set_parameters(kwargs) box.set_parameters(kwarg_box_inputs)
self.last_scan_found = True self.last_scan_found = True
break break
else: else:

View File

@ -4,7 +4,7 @@ from unittest.mock import MagicMock, patch
import pytest import pytest
from bec_lib.endpoints import MessageEndpoints from bec_lib.endpoints import MessageEndpoints
from bec_lib.messages import AvailableResourceMessage, ScanQueueHistoryMessage, ScanQueueMessage from bec_lib.messages import AvailableResourceMessage, ScanHistoryMessage
from qtpy.QtCore import QModelIndex, Qt from qtpy.QtCore import QModelIndex, Qt
from bec_widgets.utils.forms_from_types.items import StrFormItem from bec_widgets.utils.forms_from_types.items import StrFormItem
@ -221,82 +221,36 @@ available_scans_message = AvailableResourceMessage(
} }
) )
scan_history = ScanQueueHistoryMessage( scan_history = ScanHistoryMessage(
metadata={}, metadata={},
status="COMPLETED", scan_id="79cbef20-9ebe-45bb-a44c-f518be27a25c",
queue_id="94d7cb39-aa70-4060-92de-addcfb64e3c0", scan_number=1,
info={ dataset_number=1,
"queue_id": "94d7cb39-aa70-4060-92de-addcfb64e3c0", file_path="/somepath/scan_1.h5",
"scan_id": ["bc2aa11f-24f6-44d6-8717-95e97fb43015"], exit_status="closed",
"is_scan": [True], start_time=1750618470.936856,
"request_blocks": [ end_time=1750618473.668227,
{ scan_name="line_scan",
"msg": ScanQueueMessage( num_points=100,
metadata={ request_inputs={
"file_suffix": None, "arg_bundle": ["samx", 0.0, 2.0],
"file_directory": None, "inputs": {},
"user_metadata": {}, "kwargs": {
"RID": "99321ef7-00ac-4e0c-9120-ce689bd88a4d", "steps": 10,
}, "exp_time": 2,
scan_type="line_scan", "relative": False,
parameter={ "system_config": {"file_suffix": None, "file_directory": None},
"args": {"samx": [0.0, 2.0]}, },
"kwargs": {
"steps": 10,
"relative": False,
"exp_time": 2.0,
"burst_at_each_point": 1,
"system_config": {"file_suffix": None, "file_directory": None},
},
},
queue="primary",
),
"RID": "99321ef7-00ac-4e0c-9120-ce689bd88a4d",
"scan_motors": ["samx"],
"readout_priority": {
"monitored": ["samx"],
"baseline": [],
"on_request": [],
"async": [],
},
"is_scan": True,
"scan_number": 176,
"scan_id": "bc2aa11f-24f6-44d6-8717-95e97fb43015",
"metadata": {
"file_suffix": None,
"file_directory": None,
"user_metadata": {},
"RID": "99321ef7-00ac-4e0c-9120-ce689bd88a4d",
},
"content": {
"scan_type": "line_scan",
"parameter": {
"args": {"samx": [0.0, 2.0]},
"kwargs": {
"steps": 10,
"relative": False,
"exp_time": 2.0,
"burst_at_each_point": 1,
"system_config": {"file_suffix": None, "file_directory": None},
},
},
"queue": "primary",
},
"report_instructions": [{"scan_progress": 10}],
}
],
"scan_number": [176],
"status": "COMPLETED",
"active_request_block": None,
}, },
queue="primary",
) )
@pytest.fixture(scope="function") @pytest.fixture(scope="function")
def scan_control(qtbot, mocked_client): # , mock_dev): def scan_control(qtbot, mocked_client): # , mock_dev):
mocked_client.connector.set(MessageEndpoints.available_scans(), available_scans_message) mocked_client.connector.set(MessageEndpoints.available_scans(), available_scans_message)
mocked_client.connector.lpush(MessageEndpoints.scan_queue_history(), scan_history) mocked_client.connector.xadd(
topic=MessageEndpoints.scan_history(), msg_dict={"data": scan_history}
)
widget = ScanControl(client=mocked_client) widget = ScanControl(client=mocked_client)
qtbot.addWidget(widget) qtbot.addWidget(widget)
qtbot.waitExposed(widget) qtbot.waitExposed(widget)