mirror of
https://github.com/bec-project/bec_widgets.git
synced 2025-07-12 18:51:50 +02:00
wip
This commit is contained in:
@ -1191,7 +1191,7 @@ class Waveform(PlotBase):
|
||||
logger.info(f"Setup async curve {name}")
|
||||
|
||||
@SafeSlot(dict, dict)
|
||||
def on_async_readback(self, msg, metadata):
|
||||
def on_async_readback(self, msg, metadata, skip_sender_validation: bool = False):
|
||||
"""
|
||||
Get async data readback. This code needs to be fast, therefor we try
|
||||
to reduce the number of copies in between cycles. Be careful when refactoring
|
||||
@ -1208,6 +1208,7 @@ class Waveform(PlotBase):
|
||||
Args:
|
||||
msg(dict): Message with the async data.
|
||||
metadata(dict): Metadata of the message.
|
||||
skip_sender_validation(bool): Skip sender validation. Used for testing. Default is False.
|
||||
"""
|
||||
sender = self.sender()
|
||||
if sender and hasattr(sender, "cb_info"):
|
||||
@ -1216,9 +1217,10 @@ class Waveform(PlotBase):
|
||||
logger.warning("Scan ID mismatch, ignoring async readback.")
|
||||
return
|
||||
logger.info(f"Async readback for scan ID {scan_id}.")
|
||||
else:
|
||||
elif not skip_sender_validation:
|
||||
stack_trace = traceback.extract_stack()
|
||||
logger.warning(f"Async readback without scan ID, stack trace: {stack_trace}")
|
||||
return
|
||||
instruction = metadata.get("async_update", {}).get("type")
|
||||
if instruction not in ["add", "add_slice", "replace"]:
|
||||
logger.warning(f"Invalid async update instruction: {instruction}")
|
||||
|
@ -541,7 +541,7 @@ def test_on_async_readback_add_update(qtbot, mocked_client):
|
||||
|
||||
msg = {"signals": {"async_device": {"value": [100, 200], "timestamp": [1001, 1002]}}}
|
||||
metadata = {"async_update": {"max_shape": [None], "type": "add"}}
|
||||
wf.on_async_readback(msg, metadata)
|
||||
wf.on_async_readback(msg, metadata, skip_sender_validation=True)
|
||||
|
||||
x_data, y_data = c.get_data()
|
||||
assert len(x_data) == 5
|
||||
@ -553,7 +553,7 @@ def test_on_async_readback_add_update(qtbot, mocked_client):
|
||||
# instruction='replace'
|
||||
msg2 = {"signals": {"async_device": {"value": [999], "timestamp": [555]}}}
|
||||
metadata2 = {"async_update": {"max_shape": [None], "type": "replace"}}
|
||||
wf.on_async_readback(msg2, metadata2)
|
||||
wf.on_async_readback(msg2, metadata2, skip_sender_validation=True)
|
||||
x_data2, y_data2 = c.get_data()
|
||||
np.testing.assert_array_equal(x_data2, [0])
|
||||
|
||||
@ -568,7 +568,7 @@ def test_on_async_readback_add_update(qtbot, mocked_client):
|
||||
metadata = {
|
||||
"async_update": {"max_shape": [None, waveform_shape], "index": 0, "type": "add_slice"}
|
||||
}
|
||||
wf.on_async_readback(msg, metadata)
|
||||
wf.on_async_readback(msg, metadata, skip_sender_validation=True)
|
||||
|
||||
# Old data should be deleted since the slice_index did not match
|
||||
x_data, y_data = c.get_data()
|
||||
@ -595,7 +595,7 @@ def test_on_async_readback_add_update(qtbot, mocked_client):
|
||||
metadata = {
|
||||
"async_update": {"max_shape": [None, waveform_shape], "index": 0, "type": "add_slice"}
|
||||
}
|
||||
wf.on_async_readback(msg, metadata)
|
||||
wf.on_async_readback(msg, metadata, skip_sender_validation=True)
|
||||
x_data, y_data = c.get_data()
|
||||
assert len(y_data) == waveform_shape
|
||||
assert len(x_data) == waveform_shape
|
||||
@ -616,8 +616,7 @@ def test_on_async_readback_add_update(qtbot, mocked_client):
|
||||
}
|
||||
}
|
||||
metadata = {"async_update": {"type": "replace"}}
|
||||
wf.on_async_readback(msg, metadata)
|
||||
|
||||
wf.on_async_readback(msg, metadata, skip_sender_validation=True)
|
||||
x_data, y_data = c.get_data()
|
||||
assert np.array_equal(y_data, np.array(range(waveform_shape)))
|
||||
assert len(x_data) == waveform_shape
|
||||
|
Reference in New Issue
Block a user