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:
@ -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(
|
||||
|
@ -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
|
||||
|
@ -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])
|
||||
|
Reference in New Issue
Block a user