bec-widgets 0.71.1__py3-none-any.whl → 0.72.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- CHANGELOG.md +10 -10
- PKG-INFO +1 -1
- bec_widgets/utils/bec_connector.py +65 -2
- {bec_widgets-0.71.1.dist-info → bec_widgets-0.72.0.dist-info}/METADATA +1 -1
- {bec_widgets-0.71.1.dist-info → bec_widgets-0.72.0.dist-info}/RECORD +11 -11
- pyproject.toml +1 -1
- tests/unit_tests/test_bec_connector.py +23 -0
- tests/unit_tests/test_bec_status_box.py +152 -152
- {bec_widgets-0.71.1.dist-info → bec_widgets-0.72.0.dist-info}/WHEEL +0 -0
- {bec_widgets-0.71.1.dist-info → bec_widgets-0.72.0.dist-info}/entry_points.txt +0 -0
- {bec_widgets-0.71.1.dist-info → bec_widgets-0.72.0.dist-info}/licenses/LICENSE +0 -0
CHANGELOG.md
CHANGED
@@ -1,5 +1,15 @@
|
|
1
1
|
# CHANGELOG
|
2
2
|
|
3
|
+
## v0.72.0 (2024-06-24)
|
4
|
+
|
5
|
+
### Feature
|
6
|
+
|
7
|
+
* feat(connector): added threadpool wrapper ([`4ca1efe`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/4ca1efeeb8955604069f7b98374c7f82e1a8da67))
|
8
|
+
|
9
|
+
### Unknown
|
10
|
+
|
11
|
+
* tests(status_box_test): temporary disabled tests for status_box due to high rate of failures ([`aa7ce2e`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/aa7ce2ea27bb9564d4f5104bbff30725b8656453))
|
12
|
+
|
3
13
|
## v0.71.1 (2024-06-23)
|
4
14
|
|
5
15
|
### Fix
|
@@ -141,13 +151,3 @@ in their parent process ([`ce37416`](https://gitlab.psi.ch/bec/bec_widgets/-/com
|
|
141
151
|
* fix(pyqt): webengine must be imported before qcoreapplication ([`cbbd23a`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/cbbd23aa33095141e4c265719d176c4aa8c25996))
|
142
152
|
|
143
153
|
## v0.65.1 (2024-06-20)
|
144
|
-
|
145
|
-
### Fix
|
146
|
-
|
147
|
-
* fix: prevent segfault by closing the QCoreApplication, if any ([`fa344a5`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/fa344a5799b07a2d8ace63cc7010b69bc4ed6f1d))
|
148
|
-
|
149
|
-
## v0.65.0 (2024-06-20)
|
150
|
-
|
151
|
-
### Test
|
152
|
-
|
153
|
-
* test(device_input): tests added ([`1a0a98a`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/1a0a98a45367db414bed813bbd346b3e1ae8d550))
|
PKG-INFO
CHANGED
@@ -2,10 +2,11 @@
|
|
2
2
|
from __future__ import annotations
|
3
3
|
|
4
4
|
import time
|
5
|
-
from typing import Optional
|
5
|
+
from typing import Optional
|
6
6
|
|
7
|
-
from bec_lib.utils.import_utils import
|
7
|
+
from bec_lib.utils.import_utils import lazy_import_from
|
8
8
|
from pydantic import BaseModel, Field, field_validator
|
9
|
+
from qtpy.QtCore import QObject, QRunnable, QThreadPool, Signal
|
9
10
|
from qtpy.QtCore import Slot as pyqtSlot
|
10
11
|
|
11
12
|
from bec_widgets.cli.rpc_register import RPCRegister
|
@@ -33,6 +34,31 @@ class ConnectionConfig(BaseModel):
|
|
33
34
|
return v
|
34
35
|
|
35
36
|
|
37
|
+
class WorkerSignals(QObject):
|
38
|
+
progress = Signal(dict)
|
39
|
+
completed = Signal()
|
40
|
+
|
41
|
+
|
42
|
+
class Worker(QRunnable):
|
43
|
+
"""
|
44
|
+
Worker class to run a function in a separate thread.
|
45
|
+
"""
|
46
|
+
|
47
|
+
def __init__(self, func, *args, **kwargs):
|
48
|
+
super().__init__()
|
49
|
+
self.signals = WorkerSignals()
|
50
|
+
self.func = func
|
51
|
+
self.args = args
|
52
|
+
self.kwargs = kwargs
|
53
|
+
|
54
|
+
def run(self):
|
55
|
+
"""
|
56
|
+
Run the specified function in the thread.
|
57
|
+
"""
|
58
|
+
self.func(*self.args, **self.kwargs)
|
59
|
+
self.signals.completed.emit()
|
60
|
+
|
61
|
+
|
36
62
|
class BECConnector:
|
37
63
|
"""Connection mixin class for all BEC widgets, to handle BEC client and device manager"""
|
38
64
|
|
@@ -63,6 +89,43 @@ class BECConnector:
|
|
63
89
|
self.rpc_register = RPCRegister()
|
64
90
|
self.rpc_register.add_rpc(self)
|
65
91
|
|
92
|
+
self._thread_pool = QThreadPool.globalInstance()
|
93
|
+
|
94
|
+
def submit_task(self, fn, *args, on_complete: pyqtSlot = None, **kwargs) -> Worker:
|
95
|
+
"""
|
96
|
+
Submit a task to run in a separate thread. The task will run the specified
|
97
|
+
function with the provided arguments and emit the completed signal when done.
|
98
|
+
|
99
|
+
Use this method if you want to wait for a task to complete without blocking the
|
100
|
+
main thread.
|
101
|
+
|
102
|
+
Args:
|
103
|
+
fn: Function to run in a separate thread.
|
104
|
+
*args: Arguments for the function.
|
105
|
+
on_complete: Slot to run when the task is complete.
|
106
|
+
**kwargs: Keyword arguments for the function.
|
107
|
+
|
108
|
+
Returns:
|
109
|
+
worker: The worker object that will run the task.
|
110
|
+
|
111
|
+
Examples:
|
112
|
+
>>> def my_function(a, b):
|
113
|
+
>>> print(a + b)
|
114
|
+
>>> self.submit_task(my_function, 1, 2)
|
115
|
+
|
116
|
+
>>> def my_function(a, b):
|
117
|
+
>>> print(a + b)
|
118
|
+
>>> def on_complete():
|
119
|
+
>>> print("Task complete")
|
120
|
+
>>> self.submit_task(my_function, 1, 2, on_complete=on_complete)
|
121
|
+
|
122
|
+
"""
|
123
|
+
worker = Worker(fn, *args, **kwargs)
|
124
|
+
if on_complete:
|
125
|
+
worker.signals.completed.connect(on_complete)
|
126
|
+
self._thread_pool.start(worker)
|
127
|
+
return worker
|
128
|
+
|
66
129
|
def get_all_rpc(self) -> dict:
|
67
130
|
"""Get all registered RPC objects."""
|
68
131
|
all_connections = self.rpc_register.list_all_connections()
|
@@ -2,11 +2,11 @@
|
|
2
2
|
.gitlab-ci.yml,sha256=RnYDz4zKXjlqltTryprlB1s5vLXxI2-seW-Vb70NNF0,8162
|
3
3
|
.pylintrc,sha256=OstrgmEyP0smNFBKoIN5_26-UmNZgMHnbjvAWX0UrLs,18535
|
4
4
|
.readthedocs.yaml,sha256=aSOc277LqXcsTI6lgvm_JY80lMlr69GbPKgivua2cS0,603
|
5
|
-
CHANGELOG.md,sha256=
|
5
|
+
CHANGELOG.md,sha256=Hpp9o3G_M_6-ru7ExfVi1--dRJ-138pASV_8xmCIn7A,7298
|
6
6
|
LICENSE,sha256=YRKe85CBRyP7UpEAWwU8_qSIyuy5-l_9C-HKg5Qm8MQ,1511
|
7
|
-
PKG-INFO,sha256=
|
7
|
+
PKG-INFO,sha256=_PveLx124SA8eersO5ITTzS_2xKplHCFGru-agn7KQw,1302
|
8
8
|
README.md,sha256=y4jB6wvArS7N8_iTbKWnSM_oRAqLA2GqgzUR-FMh5sU,2645
|
9
|
-
pyproject.toml,sha256=
|
9
|
+
pyproject.toml,sha256=9C7-2994leTOnpF-9NTJHeZByhNwJrfAua42qgwAvQU,2215
|
10
10
|
.git_hooks/pre-commit,sha256=n3RofIZHJl8zfJJIUomcMyYGFi_rwq4CC19z0snz3FI,286
|
11
11
|
.gitlab/issue_templates/bug_report_template.md,sha256=gAuyEwl7XlnebBrkiJ9AqffSNOywmr8vygUFWKTuQeI,386
|
12
12
|
.gitlab/issue_templates/documentation_update_template.md,sha256=FHLdb3TS_D9aL4CYZCjyXSulbaW5mrN2CmwTaeLPbNw,860
|
@@ -38,7 +38,7 @@ bec_widgets/examples/plugin_example_pyside/tictactoe.py,sha256=s3rCurXloVcmMdzZi
|
|
38
38
|
bec_widgets/examples/plugin_example_pyside/tictactoeplugin.py,sha256=BBt3MD8oDLUMCCY3mioJa1QRR0WQdW6DuvVmK1Taovk,1734
|
39
39
|
bec_widgets/examples/plugin_example_pyside/tictactoetaskmenu.py,sha256=LNwplI6deUdKY6FOhUuWBanotxk9asF2G-6k7lFfA8Y,2301
|
40
40
|
bec_widgets/utils/__init__.py,sha256=1930ji1Jj6dVuY81Wd2kYBhHYNV-2R0bN_L4o9zBj1U,533
|
41
|
-
bec_widgets/utils/bec_connector.py,sha256=
|
41
|
+
bec_widgets/utils/bec_connector.py,sha256=3BNkb83HZDNL_fwbvMnG6FM28VTmlsndnc4z84E3v1w,7286
|
42
42
|
bec_widgets/utils/bec_designer.py,sha256=gaxNuxRu-3rQylUd5lGSysK1lqoRg8gtmfad0CnsUPU,2613
|
43
43
|
bec_widgets/utils/bec_dispatcher.py,sha256=yM9PG04O7ABhiA9Nzk38Rv9Qbjc5O93wi2xfSbOlOxc,6202
|
44
44
|
bec_widgets/utils/bec_table.py,sha256=nA2b8ukSeUfquFMAxGrUVOqdrzMoDYD6O_4EYbOG2zk,717
|
@@ -178,12 +178,12 @@ tests/end-2-end/test_scan_control_e2e.py,sha256=u7oLgFyltkMW2apSZKDukMIXvYrbhHrU
|
|
178
178
|
tests/unit_tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
179
179
|
tests/unit_tests/client_mocks.py,sha256=R71MJSu8IEyxcJjaIWCPACO_wOfx2Uv_qkmFVVmv7EQ,4195
|
180
180
|
tests/unit_tests/conftest.py,sha256=KrnktXPWmZhnKNue-xGWOLD1XGEvdz9Vf7V2eO3XQ3A,596
|
181
|
-
tests/unit_tests/test_bec_connector.py,sha256=
|
181
|
+
tests/unit_tests/test_bec_connector.py,sha256=zGDfNHwLFZTbpyX6-yc7Pwzr2jWO_HGZ8T4NFCNo4IE,2444
|
182
182
|
tests/unit_tests/test_bec_dispatcher.py,sha256=rYPiRizHaswhGZw55IBMneDFxmPiCCLAZQBqjEkpdyY,3992
|
183
183
|
tests/unit_tests/test_bec_dock.py,sha256=BXKXpuyIYj-l6KSyhQtM_p3kRFCRECIoXLzvkcJZDlM,3611
|
184
184
|
tests/unit_tests/test_bec_figure.py,sha256=aEd2R8K6fU2ON8QvPemGWpql_LaaYLipRlvnjBY2qFA,8009
|
185
185
|
tests/unit_tests/test_bec_motor_map.py,sha256=AfD_9-x6VV3TPnkQgNfFYRndPHDsGx-a_YknFeDr6hc,4588
|
186
|
-
tests/unit_tests/test_bec_status_box.py,sha256=
|
186
|
+
tests/unit_tests/test_bec_status_box.py,sha256=HbVk4VHlqJBMSqEl_D3gmeZS8gb0S1SK2h4qayH1tFw,6349
|
187
187
|
tests/unit_tests/test_client_utils.py,sha256=eViJ1Tz-HX9TkMvQH6W8cO-c3_1I8bUc4_Yen6LOc0E,830
|
188
188
|
tests/unit_tests/test_color_validation.py,sha256=csdvVKAohENZIRY-JQ97Hv-TShb1erj4oKMX7QRwo78,1883
|
189
189
|
tests/unit_tests/test_crosshair.py,sha256=3OMAJ2ZaISYXMOtkXf1rPdy94vCr8njeLi6uHblBL9Q,5045
|
@@ -210,8 +210,8 @@ tests/unit_tests/test_configs/config_device_no_entry.yaml,sha256=hdvue9KLc_kfNzG
|
|
210
210
|
tests/unit_tests/test_configs/config_scan.yaml,sha256=vo484BbWOjA_e-h6bTjSV9k7QaQHrlAvx-z8wtY-P4E,1915
|
211
211
|
tests/unit_tests/test_msgs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
212
212
|
tests/unit_tests/test_msgs/available_scans_message.py,sha256=m_z97hIrjHXXMa2Ex-UvsPmTxOYXfjxyJaGkIY6StTY,46532
|
213
|
-
bec_widgets-0.
|
214
|
-
bec_widgets-0.
|
215
|
-
bec_widgets-0.
|
216
|
-
bec_widgets-0.
|
217
|
-
bec_widgets-0.
|
213
|
+
bec_widgets-0.72.0.dist-info/METADATA,sha256=_PveLx124SA8eersO5ITTzS_2xKplHCFGru-agn7KQw,1302
|
214
|
+
bec_widgets-0.72.0.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
|
215
|
+
bec_widgets-0.72.0.dist-info/entry_points.txt,sha256=3otEkCdDB9LZJuBLzG4pFLK5Di0CVybN_12IsZrQ-58,166
|
216
|
+
bec_widgets-0.72.0.dist-info/licenses/LICENSE,sha256=YRKe85CBRyP7UpEAWwU8_qSIyuy5-l_9C-HKg5Qm8MQ,1511
|
217
|
+
bec_widgets-0.72.0.dist-info/RECORD,,
|
pyproject.toml
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
# pylint: disable = no-name-in-module,missing-class-docstring, missing-module-docstring
|
2
|
+
import time
|
3
|
+
|
2
4
|
import pytest
|
5
|
+
from qtpy.QtCore import Slot
|
6
|
+
from qtpy.QtWidgets import QApplication
|
3
7
|
|
4
8
|
from bec_widgets.utils import BECConnector, ConnectionConfig
|
5
9
|
|
@@ -55,3 +59,22 @@ def test_bec_connector_update_client(bec_connector, mocked_client):
|
|
55
59
|
def test_bec_connector_get_config(bec_connector):
|
56
60
|
assert bec_connector.get_config(dict_output=False) == bec_connector.config
|
57
61
|
assert bec_connector.get_config() == bec_connector.config.model_dump()
|
62
|
+
|
63
|
+
|
64
|
+
def test_bec_connector_submit_task(bec_connector):
|
65
|
+
def test_func():
|
66
|
+
time.sleep(2)
|
67
|
+
print("done")
|
68
|
+
|
69
|
+
completed = False
|
70
|
+
|
71
|
+
@Slot()
|
72
|
+
def complete_func():
|
73
|
+
nonlocal completed
|
74
|
+
completed = True
|
75
|
+
|
76
|
+
bec_connector.submit_task(test_func, on_complete=complete_func)
|
77
|
+
assert not completed
|
78
|
+
while not completed:
|
79
|
+
QApplication.processEvents()
|
80
|
+
time.sleep(0.1)
|
@@ -1,152 +1,152 @@
|
|
1
|
-
import re
|
2
|
-
from unittest import mock
|
3
|
-
|
4
|
-
import pytest
|
5
|
-
from bec_lib.messages import BECStatus, ServiceMetricMessage, StatusMessage
|
6
|
-
from qtpy.QtCore import QMetaMethod
|
7
|
-
|
8
|
-
from bec_widgets.widgets.bec_status_box.bec_status_box import BECServiceInfoContainer, BECStatusBox
|
9
|
-
|
10
|
-
from .client_mocks import mocked_client
|
11
|
-
|
12
|
-
|
13
|
-
@pytest.fixture
|
14
|
-
def status_box(qtbot, mocked_client):
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
def test_status_box_init(qtbot, mocked_client):
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
def test_update_top_item(qtbot, mocked_client):
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
def test_create_status_widget(status_box):
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
def test_bec_service_container(status_box):
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
def test_add_tree_item(status_box):
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
def test_update_service_status(status_box):
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
def test_update_core_services(qtbot, mocked_client):
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
def test_double_click_item(status_box):
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
1
|
+
# import re
|
2
|
+
# from unittest import mock
|
3
|
+
#
|
4
|
+
# import pytest
|
5
|
+
# from bec_lib.messages import BECStatus, ServiceMetricMessage, StatusMessage
|
6
|
+
# from qtpy.QtCore import QMetaMethod
|
7
|
+
#
|
8
|
+
# from bec_widgets.widgets.bec_status_box.bec_status_box import BECServiceInfoContainer, BECStatusBox
|
9
|
+
#
|
10
|
+
# from .client_mocks import mocked_client
|
11
|
+
#
|
12
|
+
#
|
13
|
+
# @pytest.fixture
|
14
|
+
# def status_box(qtbot, mocked_client):
|
15
|
+
# with mock.patch(
|
16
|
+
# "bec_widgets.widgets.bec_status_box.bec_status_box.BECServiceStatusMixin"
|
17
|
+
# ) as mock_service_status_mixin:
|
18
|
+
# widget = BECStatusBox(client=mocked_client)
|
19
|
+
# qtbot.addWidget(widget)
|
20
|
+
# qtbot.waitExposed(widget)
|
21
|
+
# yield widget
|
22
|
+
#
|
23
|
+
#
|
24
|
+
# def test_status_box_init(qtbot, mocked_client):
|
25
|
+
# with mock.patch(
|
26
|
+
# "bec_widgets.widgets.bec_status_box.bec_status_box.BECServiceStatusMixin"
|
27
|
+
# ) as mock_service_status_mixin:
|
28
|
+
# name = "my test"
|
29
|
+
# widget = BECStatusBox(parent=None, service_name=name, client=mocked_client)
|
30
|
+
# qtbot.addWidget(widget)
|
31
|
+
# qtbot.waitExposed(widget)
|
32
|
+
# assert widget.headerItem().DontShowIndicator.value == 1
|
33
|
+
# assert widget.children()[0].children()[0].config.service_name == name
|
34
|
+
#
|
35
|
+
#
|
36
|
+
# def test_update_top_item(qtbot, mocked_client):
|
37
|
+
# with (
|
38
|
+
# mock.patch(
|
39
|
+
# "bec_widgets.widgets.bec_status_box.bec_status_box.BECServiceStatusMixin"
|
40
|
+
# ) as mock_service_status_mixin,
|
41
|
+
# mock.patch(
|
42
|
+
# "bec_widgets.widgets.bec_status_box.status_item.StatusItem.update_config"
|
43
|
+
# ) as mock_update,
|
44
|
+
# ):
|
45
|
+
# name = "my test"
|
46
|
+
# widget = BECStatusBox(parent=None, service_name=name, client=mocked_client)
|
47
|
+
# qtbot.addWidget(widget)
|
48
|
+
# qtbot.waitExposed(widget)
|
49
|
+
# widget.update_top_item_status(status="RUNNING")
|
50
|
+
# assert widget.bec_service_info_container[name].status == "RUNNING"
|
51
|
+
# assert mock_update.call_args == mock.call(widget.bec_service_info_container[name].dict())
|
52
|
+
#
|
53
|
+
#
|
54
|
+
# def test_create_status_widget(status_box):
|
55
|
+
# name = "test_service"
|
56
|
+
# status = BECStatus.IDLE
|
57
|
+
# info = {"test": "test"}
|
58
|
+
# metrics = {"metric": "test_metric"}
|
59
|
+
# item = status_box._create_status_widget(name, status, info, metrics)
|
60
|
+
# assert item.config.service_name == name
|
61
|
+
# assert item.config.status == status.name
|
62
|
+
# assert item.config.info == info
|
63
|
+
# assert item.config.metrics == metrics
|
64
|
+
#
|
65
|
+
#
|
66
|
+
# def test_bec_service_container(status_box):
|
67
|
+
# name = "test_service"
|
68
|
+
# status = BECStatus.IDLE
|
69
|
+
# info = {"test": "test"}
|
70
|
+
# metrics = {"metric": "test_metric"}
|
71
|
+
# expected_return = BECServiceInfoContainer(
|
72
|
+
# service_name=name, status=status, info=info, metrics=metrics
|
73
|
+
# )
|
74
|
+
# assert status_box.service_name in status_box.bec_service_info_container
|
75
|
+
# assert len(status_box.bec_service_info_container) == 1
|
76
|
+
# status_box._update_bec_service_container(name, status, info, metrics)
|
77
|
+
# assert len(status_box.bec_service_info_container) == 2
|
78
|
+
# assert status_box.bec_service_info_container[name] == expected_return
|
79
|
+
#
|
80
|
+
#
|
81
|
+
# def test_add_tree_item(status_box):
|
82
|
+
# name = "test_service"
|
83
|
+
# status = BECStatus.IDLE
|
84
|
+
# info = {"test": "test"}
|
85
|
+
# metrics = {"metric": "test_metric"}
|
86
|
+
# assert len(status_box.children()[0].children()) == 1
|
87
|
+
# status_box.add_tree_item(name, status, info, metrics)
|
88
|
+
# assert len(status_box.children()[0].children()) == 2
|
89
|
+
# assert name in status_box.tree_items
|
90
|
+
#
|
91
|
+
#
|
92
|
+
# def test_update_service_status(status_box):
|
93
|
+
# """Also checks check redundant tree items"""
|
94
|
+
# name = "test_service"
|
95
|
+
# status = BECStatus.IDLE
|
96
|
+
# info = {"test": "test"}
|
97
|
+
# metrics = {"metric": "test_metric"}
|
98
|
+
# status_box.add_tree_item(name, status, info, {})
|
99
|
+
# not_connected_name = "invalid_service"
|
100
|
+
# status_box.add_tree_item(not_connected_name, status, info, metrics)
|
101
|
+
#
|
102
|
+
# services_status = {name: StatusMessage(name=name, status=status, info=info)}
|
103
|
+
# services_metrics = {name: ServiceMetricMessage(name=name, metrics=metrics)}
|
104
|
+
#
|
105
|
+
# with mock.patch.object(status_box, "update_core_services", return_value=services_status):
|
106
|
+
# assert not_connected_name in status_box.tree_items
|
107
|
+
# status_box.update_service_status(services_status, services_metrics)
|
108
|
+
# assert status_box.tree_items[name][1].config.metrics == metrics
|
109
|
+
# assert not_connected_name not in status_box.tree_items
|
110
|
+
#
|
111
|
+
#
|
112
|
+
# def test_update_core_services(qtbot, mocked_client):
|
113
|
+
# with (
|
114
|
+
# mock.patch(
|
115
|
+
# "bec_widgets.widgets.bec_status_box.bec_status_box.BECServiceStatusMixin"
|
116
|
+
# ) as mock_service_status_mixin,
|
117
|
+
# mock.patch(
|
118
|
+
# "bec_widgets.widgets.bec_status_box.bec_status_box.BECStatusBox.update_top_item_status"
|
119
|
+
# ) as mock_update,
|
120
|
+
# ):
|
121
|
+
# name = "my test"
|
122
|
+
# status_box = BECStatusBox(parent=None, service_name=name, client=mocked_client)
|
123
|
+
# qtbot.addWidget(status_box)
|
124
|
+
# qtbot.waitExposed(status_box)
|
125
|
+
# status_box.CORE_SERVICES = ["test_service"]
|
126
|
+
# name = "test_service"
|
127
|
+
# status = BECStatus.RUNNING
|
128
|
+
# info = {"test": "test"}
|
129
|
+
# metrics = {"metric": "test_metric"}
|
130
|
+
# services_status = {name: StatusMessage(name=name, status=status, info=info)}
|
131
|
+
# services_metrics = {name: ServiceMetricMessage(name=name, metrics=metrics)}
|
132
|
+
#
|
133
|
+
# status_box.update_core_services(services_status, services_metrics)
|
134
|
+
# assert mock_update.call_args == mock.call(status.name)
|
135
|
+
#
|
136
|
+
# status = BECStatus.IDLE
|
137
|
+
# services_status = {name: StatusMessage(name=name, status=status, info=info)}
|
138
|
+
# services_metrics = {name: ServiceMetricMessage(name=name, metrics=metrics)}
|
139
|
+
# status_box.update_core_services(services_status, services_metrics)
|
140
|
+
# assert mock_update.call_args == mock.call("ERROR")
|
141
|
+
#
|
142
|
+
#
|
143
|
+
# def test_double_click_item(status_box):
|
144
|
+
# name = "test_service"
|
145
|
+
# status = BECStatus.IDLE
|
146
|
+
# info = {"test": "test"}
|
147
|
+
# metrics = {"MyData": "This should be shown nicely"}
|
148
|
+
# status_box.add_tree_item(name, status, info, metrics)
|
149
|
+
# item, status_item = status_box.tree_items[name]
|
150
|
+
# with mock.patch.object(status_item, "show_popup") as mock_show_popup:
|
151
|
+
# status_box.itemDoubleClicked.emit(item, 0)
|
152
|
+
# assert mock_show_popup.call_count == 1
|
File without changes
|
File without changes
|
File without changes
|