fix: changed progress update from devicestatus to progress message

This commit is contained in:
wakonig_k 2023-10-06 11:03:11 +02:00
parent d05e91b8bb
commit 03595b42f7
5 changed files with 32 additions and 14 deletions

View File

@ -1,8 +1,7 @@
import asyncio
from bec_lib.core import BECMessage, MessageEndpoints, bec_logger
from bec_client.progressbar import ScanProgressBar
from bec_lib.core import BECMessage, MessageEndpoints, bec_logger
from .live_table import LiveUpdatesTable
@ -32,19 +31,19 @@ class LiveUpdatesScanProgress(LiveUpdatesTable):
logger.debug("waiting for new data point")
await asyncio.sleep(0.1)
return False
status = BECMessage.DeviceStatusMessage.loads(status)
status = BECMessage.ProgressMessage.loads(status)
if status.metadata.get("scanID") != self.scan_item.scanID:
logger.debug("waiting for new data point")
await asyncio.sleep(0.1)
return False
point_id = status.content["status"].get("value")
point_id = status.content.get("value")
if point_id is None:
logger.debug("waiting for new data point")
await asyncio.sleep(0.1)
return False
max_value = status.content["status"].get("max_value")
max_value = status.content.get("max_value")
if max_value and max_value != progressbar.max_points:
progressbar.max_points = max_value

View File

@ -235,7 +235,7 @@ class DeviceManagerDS(DeviceManagerBase):
if "flyer" in obj.event_types:
obj.subscribe(self._obj_flyer_callback, event_type="flyer", run=False)
if "progress" in obj.event_types:
obj.subscribe(self._obj_callback_progress, event_type="progress", run=False)
obj.subscribe(self._obj_progress_callback, event_type="progress", run=False)
if hasattr(obj, "motor_is_moving"):
obj.motor_is_moving.subscribe(self._obj_callback_is_moving, run=opaas_obj.enabled)
@ -369,11 +369,12 @@ class DeviceManagerDS(DeviceManagerBase):
)
pipe.execute()
def _obj_callback_progress(self, *_args, obj, value, max_value, done, **kwargs):
def _obj_progress_callback(self, *_args, obj, value, max_value, done, **kwargs):
metadata = self.devices[obj.root.name].metadata
msg = BECMessage.DeviceStatusMessage(
device=obj.root.name,
status={"value": value, "max_value": max_value, "done": done},
msg = BECMessage.ProgressMessage(
value=value,
max_value=max_value,
done=done,
metadata=metadata,
)
self.producer.set_and_publish(MessageEndpoints.device_progress(obj.root.name), msg.dumps())

View File

@ -143,3 +143,21 @@ def test_flyer_event_callback():
progress_msg = BECMessage.DeviceStatusMessage.loads(progress[1][1])
assert progress_msg.content["status"] == 20
def test_obj_progress_callback():
device_manager = load_device_manager()
samx = device_manager.devices.samx
samx.metadata = {"scanID": "12345"}
with mock.patch.object(device_manager, "producer") as mock_producer:
device_manager._obj_progress_callback(obj=samx.obj, value=1, max_value=2, done=False)
mock_producer.set_and_publish.assert_called_once_with(
MessageEndpoints.device_progress("samx"),
BECMessage.ProgressMessage(
value=1,
max_value=2,
done=False,
metadata={"scanID": "12345"},
).dumps(),
)

View File

@ -147,12 +147,12 @@ class OwisGrid(FlyScanBase):
if not raw_msg:
self.timeout_progress += 1
return self.timeout_progress
msg = BECMessage.DeviceStatusMessage.loads(raw_msg)
msg = BECMessage.ProgressMessage.loads(raw_msg)
if not msg:
self.timeout_progress += 1
return self.timeout_progress
# TODO which update is that!
updated_progress = int(msg.content["status"]["value"])
updated_progress = int(msg.content["value"])
if updated_progress == int(self.progress_point):
self.timeout_progress += 1
return self.timeout_progress

View File

@ -110,12 +110,12 @@ class SgalilGrid(FlyScanBase):
if not raw_msg:
self.timeout_progress += 1
return self.timeout_progress
msg = BECMessage.DeviceStatusMessage.loads(raw_msg)
msg = BECMessage.ProgressMessage.loads(raw_msg)
if not msg:
self.timeout_progress += 1
return self.timeout_progress
# TODO which update is that!
updated_progress = int(msg.content["status"]["value"])
updated_progress = int(msg.content["value"])
if updated_progress == int(self.progress_point):
self.timeout_progress += 1
return self.timeout_progress