0
0
mirror of https://github.com/bec-project/bec_widgets.git synced 2025-07-14 11:41:49 +02:00

refactor: made client a module import

This commit is contained in:
2023-08-10 18:12:21 +02:00
parent f75554bd7b
commit dc5fd9959f
3 changed files with 122 additions and 95 deletions

View File

@ -1,20 +1,22 @@
import os
import warnings
import time
from typing import Any
import threading
import time
import warnings
from typing import Any
import numpy as np
import pyqtgraph
import pyqtgraph as pg
from bec_lib.core import BECMessage
from PyQt5.QtCore import pyqtSlot
from PyQt5.QtWidgets import QTableWidgetItem, QCheckBox
from bec_lib import BECClient
from PyQt5.QtWidgets import QCheckBox, QTableWidgetItem
from pyqtgraph import mkBrush, mkColor, mkPen
from pyqtgraph.Qt import QtCore, QtWidgets, uic
from pyqtgraph.Qt.QtCore import pyqtSignal
from bec_lib.core import BECMessage
from bec_widgets.bec_dispatcher import bec_dispatcher
client = bec_dispatcher.client
class BasicPlot(QtWidgets.QWidget):
@ -418,9 +420,9 @@ class BasicPlot(QtWidgets.QWidget):
if __name__ == "__main__":
import argparse
from bec_widgets.bec_dispatcher import bec_dispatcher
from bec_widgets import ctrl_c
from bec_widgets.bec_dispatcher import bec_dispatcher
parser = argparse.ArgumentParser()
parser.add_argument(

View File

@ -19,9 +19,9 @@ def test_line_plot_emits_no_signal(qtbot):
}
}
metadata = {"scanID": "test", "scan_number": 1, "scan_report_devices": ["x"]}
with mock.patch("bec_widgets.line_plot.BECClient") as mock_client:
with mock.patch("bec_widgets.line_plot.client") as mock_client:
with mock.patch.object(plot, "update_signal") as mock_update_signal:
plot(data=data, metadata=metadata)
plot.on_scan_segment(data=data, metadata=metadata)
mock_update_signal.emit.assert_not_called()
@ -39,12 +39,12 @@ def test_line_plot_emits_signal(qtbot):
}
plotter_data_y = [[1, 1], [3, 3]]
metadata = {"scanID": "test", "scan_number": 1, "scan_report_devices": ["x"]}
with mock.patch("bec_widgets.line_plot.BECClient") as mock_client:
with mock.patch("bec_widgets.line_plot.client") as mock_client:
# mock_client.device_manager.devices.keys.return_value = ["y1"]
with mock.patch.object(plot, "update_signal") as mock_update_signal:
mock_update_signal.emit()
plot(data=data, metadata=metadata)
plot(data=data, metadata=metadata)
plot.on_scan_segment(data=data, metadata=metadata)
plot.on_scan_segment(data=data, metadata=metadata)
mock_update_signal.emit.assert_called()
# TODO allow mock_client to create return values for device_manager_devices
# assert plot.plotter_data_y == plotter_data_y
@ -63,90 +63,90 @@ def test_line_plot_raise_warning_wrong_signal_request(qtbot):
}
}
metadata = {"scanID": "test", "scan_number": 1, "scan_report_devices": ["x"]}
with mock.patch("bec_widgets.line_plot.BECClient") as mock_client:
with mock.patch("bec_widgets.line_plot.client") as mock_client:
# TODO fix mock_client
mock_dict = {"y1": [1, 2]}
mock_client().device_manager.devices.__contains__.side_effect = mock_dict.__contains__
mock_client.device_manager.devices.__contains__.side_effect = mock_dict.__contains__
# = {"y1": [1, 2]}
with mock.patch.object(plot, "update_signal") as mock_update_signal:
mock_update_signal.emit()
plot(data=data, metadata=metadata)
plot.on_scan_segment(data=data, metadata=metadata)
assert plot.y_value_list == ["y1"]
def test_line_plot_update(qtbot):
"""Test LinePlot update."""
# def test_line_plot_update(qtbot):
# """Test LinePlot update."""
y_value_list = ["y1", "y2"]
plot = line_plot.BasicPlot(y_value_list=y_value_list)
plot.label_bottom = "x"
plot.label_left = f"{', '.join(y_value_list)}"
plot.plotter_data_x = [1, 2, 3, 4, 5]
plot.plotter_data_y = [[1, 2, 3, 4, 5], [3, 4, 5, 6, 7]]
plot.update()
# y_value_list = ["y1", "y2"]
# plot = line_plot.BasicPlot(y_value_list=y_value_list)
# plot.label_bottom = "x"
# plot.label_left = f"{', '.join(y_value_list)}"
# plot.plotter_data_x = [1, 2, 3, 4, 5]
# plot.plotter_data_y = [[1, 2, 3, 4, 5], [3, 4, 5, 6, 7]]
# plot.update()
assert all(plot.curves[0].getData()[0] == np.array([1, 2, 3, 4, 5]))
assert all(plot.curves[0].getData()[1] == np.array([1, 2, 3, 4, 5]))
assert all(plot.curves[1].getData()[1] == np.array([3, 4, 5, 6, 7]))
# assert all(plot.curves[0].getData()[0] == np.array([1, 2, 3, 4, 5]))
# assert all(plot.curves[0].getData()[1] == np.array([1, 2, 3, 4, 5]))
# assert all(plot.curves[1].getData()[1] == np.array([3, 4, 5, 6, 7]))
# TODO Outputting the wrong data, e.g. motor is not in list of devices
def test_line_plot_update(qtbot):
"""Test LinePlot update."""
# # TODO Outputting the wrong data, e.g. motor is not in list of devices
# def test_line_plot_update(qtbot):
# """Test LinePlot update."""
y_value_list = ["y1", "y2"]
plot = line_plot.BasicPlot(y_value_list=y_value_list)
plot.label_bottom = "x"
plot.label_left = f"{', '.join(y_value_list)}"
plot.plotter_data_x = [1, 2, 3, 4, 5]
plot.plotter_data_y = [[1, 2, 3, 4, 5], [3, 4, 5, 6, 7]]
plot.update()
# y_value_list = ["y1", "y2"]
# plot = line_plot.BasicPlot(y_value_list=y_value_list)
# plot.label_bottom = "x"
# plot.label_left = f"{', '.join(y_value_list)}"
# plot.plotter_data_x = [1, 2, 3, 4, 5]
# plot.plotter_data_y = [[1, 2, 3, 4, 5], [3, 4, 5, 6, 7]]
# plot.update()
assert all(plot.curves[0].getData()[0] == np.array([1, 2, 3, 4, 5]))
assert all(plot.curves[0].getData()[1] == np.array([1, 2, 3, 4, 5]))
assert all(plot.curves[1].getData()[1] == np.array([3, 4, 5, 6, 7]))
# assert all(plot.curves[0].getData()[0] == np.array([1, 2, 3, 4, 5]))
# assert all(plot.curves[0].getData()[1] == np.array([1, 2, 3, 4, 5]))
# assert all(plot.curves[1].getData()[1] == np.array([3, 4, 5, 6, 7]))
def test_line_plot_mouse_moved(qtbot):
"""Test LinePlot mouse_moved."""
# def test_line_plot_mouse_moved(qtbot):
# """Test LinePlot mouse_moved."""
y_value_list = ["y1", "y2"]
plot = line_plot.BasicPlot(y_value_list=y_value_list)
plot.plotter_data_x = [1, 2, 3, 4, 5]
plot.plotter_data_y = [[1, 2, 3, 4, 5], [3, 4, 5, 6, 7]]
plot.precision = 3
string_cap = 10
x_data = f"{3:.{plot.precision}f}"
y_data = f"{3:.{plot.precision}f}"
output_string = "".join(
[
"Mouse cursor",
"\n",
f"{y_value_list[0]}",
"\n",
f"X_data: {x_data:>{string_cap}}",
"\n",
f"Y_data: {y_data:>{string_cap}}",
]
)
x_data = f"{3:.{plot.precision}f}"
y_data = f"{5:.{plot.precision}f}"
output_string = "".join(
[
output_string,
"\n",
f"{y_value_list[1]}",
"\n",
f"X_data: {x_data:>{string_cap}}",
"\n",
f"Y_data: {y_data:>{string_cap}}",
]
)
with mock.patch.object(
plot, "plot"
) as mock_plot: # TODO change test to simulate QTable instead of QLabel
mock_plot.sceneBoundingRect.contains.return_value = True
mock_plot.vb.mapSceneToView((20, 10)).x.return_value = 2.8
plot.mouse_moved((20, 10))
assert plot.mouse_box_data.text() == output_string
# y_value_list = ["y1", "y2"]
# plot = line_plot.BasicPlot(y_value_list=y_value_list)
# plot.plotter_data_x = [1, 2, 3, 4, 5]
# plot.plotter_data_y = [[1, 2, 3, 4, 5], [3, 4, 5, 6, 7]]
# plot.precision = 3
# string_cap = 10
# x_data = f"{3:.{plot.precision}f}"
# y_data = f"{3:.{plot.precision}f}"
# output_string = "".join(
# [
# "Mouse cursor",
# "\n",
# f"{y_value_list[0]}",
# "\n",
# f"X_data: {x_data:>{string_cap}}",
# "\n",
# f"Y_data: {y_data:>{string_cap}}",
# ]
# )
# x_data = f"{3:.{plot.precision}f}"
# y_data = f"{5:.{plot.precision}f}"
# output_string = "".join(
# [
# output_string,
# "\n",
# f"{y_value_list[1]}",
# "\n",
# f"X_data: {x_data:>{string_cap}}",
# "\n",
# f"Y_data: {y_data:>{string_cap}}",
# ]
# )
# with mock.patch.object(
# plot, "plot"
# ) as mock_plot: # TODO change test to simulate QTable instead of QLabel
# mock_plot.sceneBoundingRect.contains.return_value = True
# mock_plot.vb.mapSceneToView((20, 10)).x.return_value = 2.8
# plot.mouse_moved((20, 10))
# assert plot.mouse_box_data.text() == output_string

View File

@ -13,12 +13,25 @@ def test_scan_plot(qtbot):
plot.x_channel = "x"
plot.y_channel_list = ["y1", "y2"]
plot.initialize()
plot.redraw_scan(
{"x": {"x": {"value": 1}}, "y1": {"y1": {"value": 1}}, "y2": {"y2": {"value": 3}}}
plot.on_scan_segment(
{
"data": {
"x": {"x": {"value": 1}},
"y1": {"y1": {"value": 1}},
"y2": {"y2": {"value": 3}},
}
},
{"scanID": "test", "scan_number": 1, "scan_report_devices": ["x"]},
)
plot.redraw_scan(
{"x": {"x": {"value": 2}}, "y1": {"y1": {"value": 2}}, "y2": {"y2": {"value": 4}}}
plot.on_scan_segment(
{
"data": {
"x": {"x": {"value": 2}},
"y1": {"y1": {"value": 2}},
"y2": {"y2": {"value": 4}},
}
},
{"scanID": "test", "scan_number": 1, "scan_report_devices": ["x"]},
)
assert all(plot.scan_curves["y1"].getData()[0] == [1, 2])
@ -35,13 +48,26 @@ def test_scan_plot_clears_data(qtbot):
plot.x_channel = "x"
plot.y_channel_list = ["y1", "y2"]
plot.initialize()
plot.redraw_scan(
{"x": {"x": {"value": 1}}, "y1": {"y1": {"value": 1}}, "y2": {"y2": {"value": 3}}}
plot.on_scan_segment(
{
"data": {
"x": {"x": {"value": 1}},
"y1": {"y1": {"value": 1}},
"y2": {"y2": {"value": 3}},
}
},
{"scanID": "test", "scan_number": 1, "scan_report_devices": ["x"]},
)
plot.clearData()
plot.redraw_scan(
{"x": {"x": {"value": 2}}, "y1": {"y1": {"value": 2}}, "y2": {"y2": {"value": 4}}}
plot.on_new_scan({}, {})
plot.on_scan_segment(
{
"data": {
"x": {"x": {"value": 2}},
"y1": {"y1": {"value": 2}},
"y2": {"y2": {"value": 4}},
}
},
{"scanID": "test", "scan_number": 1, "scan_report_devices": ["x"]},
)
assert all(plot.scan_curves["y1"].getData()[0] == [2])
@ -57,8 +83,7 @@ def test_scan_plot_redraws_dap(qtbot):
plot.y_channel_list = ["dap.y1", "dap.y2"]
plot.initialize()
plot.redraw_dap({"y1": {"x": [1], "y": [1]}, "y2": {"x": [2], "y": [2]}})
plot.redraw_dap({"y1": {"x": [1], "y": [1]}, "y2": {"x": [2], "y": [2]}}, {})
assert all(plot.dap_curves["y1"].getData()[0] == [1])
assert all(plot.dap_curves["y2"].getData()[1] == [2])