bec-widgets 0.94.4__py3-none-any.whl → 0.94.5__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 CHANGED
@@ -1,5 +1,19 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## v0.94.5 (2024-08-14)
4
+
5
+ ### Build
6
+
7
+ * build: increased min version of bec to 2.21.4
8
+
9
+ Since we now rely on reusing the BECClient singleton, we need the fix introduced with 2.21.4 in BEC. ([`4f96d0e`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/4f96d0e4a14edc4b2839c1dddeda384737dc7a8a))
10
+
11
+ ### Fix
12
+
13
+ * fix(rpc): use client singleton instead of dispatcher ([`ea9240d`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/ea9240d2f71931082f33fb6b68231469875c3d63))
14
+
15
+ * fix: removed qcoreapplication for polling events ([`4d02b42`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/4d02b42f11e9882b843317255a4975565c8a536f))
16
+
3
17
  ## v0.94.4 (2024-08-14)
4
18
 
5
19
  ### Documentation
@@ -141,15 +155,3 @@ This reverts commit fd6ae91993a23a7b8dbb2cf3c4b7c3eda6d2b0f6 ([`5aad401`](https:
141
155
  * fix: fix missmatch of signal/slot in image and motormap ([`dcc5fd7`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/dcc5fd71ee9f51767a7b2b1ed6200e89d1ef754c))
142
156
 
143
157
  ## v0.92.3 (2024-07-28)
144
-
145
- ### Fix
146
-
147
- * fix(docs): moved to pyside6 ([`71873dd`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/71873ddf359516ded8f74f4d2f73df4156aa1368))
148
-
149
- ## v0.92.2 (2024-07-28)
150
-
151
- ### Fix
152
-
153
- * fix(widgets): fixed import for tictactoe example ([`995a795`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/995a795060bebe25c17108d80ae0fa30463f03b1))
154
-
155
- ## v0.92.1 (2024-07-28)
PKG-INFO CHANGED
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: bec_widgets
3
- Version: 0.94.4
3
+ Version: 0.94.5
4
4
  Summary: BEC Widgets
5
5
  Project-URL: Bug Tracker, https://gitlab.psi.ch/bec/bec_widgets/issues
6
6
  Project-URL: Homepage, https://gitlab.psi.ch/bec/bec_widgets
@@ -9,8 +9,8 @@ Classifier: Development Status :: 3 - Alpha
9
9
  Classifier: Programming Language :: Python :: 3
10
10
  Classifier: Topic :: Scientific/Engineering
11
11
  Requires-Python: >=3.10
12
- Requires-Dist: bec-ipython-client~=2.16
13
- Requires-Dist: bec-lib~=2.16
12
+ Requires-Dist: bec-ipython-client>=2.21.4,~=2.21
13
+ Requires-Dist: bec-lib>=2.21.4,~=2.21
14
14
  Requires-Dist: bec-qthemes~=0.0
15
15
  Requires-Dist: black~=24.0
16
16
  Requires-Dist: isort>=5.13.2,~=5.13
@@ -1,5 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
+ import threading
4
+ from queue import Queue
3
5
  from typing import TYPE_CHECKING
4
6
 
5
7
  from pydantic import BaseModel
@@ -25,6 +27,17 @@ class AutoUpdates:
25
27
 
26
28
  def __init__(self, gui: BECDockArea):
27
29
  self.gui = gui
30
+ self.msg_queue = Queue()
31
+ self.auto_update_thread = None
32
+ self._shutdown_sentinel = object()
33
+ self.start()
34
+
35
+ def start(self):
36
+ """
37
+ Start the auto update thread.
38
+ """
39
+ self.auto_update_thread = threading.Thread(target=self.process_queue)
40
+ self.auto_update_thread.start()
28
41
 
29
42
  def start_default_dock(self):
30
43
  """
@@ -79,6 +92,16 @@ class AutoUpdates:
79
92
  info = self.get_scan_info(msg)
80
93
  self.handler(info)
81
94
 
95
+ def process_queue(self):
96
+ """
97
+ Process the message queue.
98
+ """
99
+ while True:
100
+ msg = self.msg_queue.get()
101
+ if msg is self._shutdown_sentinel:
102
+ break
103
+ self.run(msg)
104
+
82
105
  @staticmethod
83
106
  def get_selected_device(monitored_devices, selected_device):
84
107
  """
@@ -151,3 +174,11 @@ class AutoUpdates:
151
174
  fig.clear_all()
152
175
  plt = fig.plot(x_name=dev_x, y_name=dev_y, label=f"Scan {info.scan_number} - {dev_y}")
153
176
  plt.set(title=f"Scan {info.scan_number}", x_label=dev_x, y_label=dev_y)
177
+
178
+ def shutdown(self):
179
+ """
180
+ Shutdown the auto update thread.
181
+ """
182
+ self.msg_queue.put(self._shutdown_sentinel)
183
+ if self.auto_update_thread:
184
+ self.auto_update_thread.join()
@@ -6,17 +6,16 @@ import json
6
6
  import os
7
7
  import select
8
8
  import subprocess
9
- import sys
10
9
  import threading
11
10
  import time
12
11
  import uuid
13
12
  from functools import wraps
14
13
  from typing import TYPE_CHECKING
15
14
 
15
+ from bec_lib.client import BECClient
16
16
  from bec_lib.endpoints import MessageEndpoints
17
17
  from bec_lib.logger import bec_logger
18
18
  from bec_lib.utils.import_utils import isinstance_based_on_class_name, lazy_import, lazy_import_from
19
- from qtpy.QtCore import QEventLoop, QSocketNotifier, QTimer
20
19
 
21
20
  import bec_widgets.cli.client as client
22
21
  from bec_widgets.cli.auto_updates import AutoUpdates
@@ -24,10 +23,6 @@ from bec_widgets.cli.auto_updates import AutoUpdates
24
23
  if TYPE_CHECKING:
25
24
  from bec_lib.device import DeviceBase
26
25
 
27
- from bec_widgets.cli.client import BECDockArea, BECFigure
28
-
29
- from bec_lib.serialization import MsgpackSerialization
30
-
31
26
  messages = lazy_import("bec_lib.messages")
32
27
  # from bec_lib.connector import MessageObject
33
28
  MessageObject = lazy_import_from("bec_lib.connector", ("MessageObject",))
@@ -184,7 +179,7 @@ class BECGuiClientMixin:
184
179
  if isinstance(msg, messages.ScanStatusMessage):
185
180
  if not self.gui_is_alive():
186
181
  return
187
- self.auto_updates.run(msg)
182
+ self.auto_updates.msg_queue.put(msg)
188
183
 
189
184
  def show(self) -> None:
190
185
  """
@@ -213,6 +208,8 @@ class BECGuiClientMixin:
213
208
  self._process_output_processing_thread.join()
214
209
  self._process.wait()
215
210
  self._process = None
211
+ if self.auto_updates is not None:
212
+ self.auto_updates.shutdown()
216
213
 
217
214
 
218
215
  class RPCResponseTimeoutError(Exception):
@@ -224,54 +221,14 @@ class RPCResponseTimeoutError(Exception):
224
221
  )
225
222
 
226
223
 
227
- class QtRedisMessageWaiter:
228
- def __init__(self, redis_connector, message_to_wait):
229
- self.ev_loop = QEventLoop()
230
- self.response = None
231
- self.connector = redis_connector
232
- self.message_to_wait = message_to_wait
233
- self.pubsub = redis_connector._redis_conn.pubsub()
234
- self.pubsub.subscribe(self.message_to_wait.endpoint)
235
- fd = self.pubsub.connection._sock.fileno()
236
- self.notifier = QSocketNotifier(fd, QSocketNotifier.Read)
237
- self.notifier.activated.connect(self._pubsub_readable)
238
-
239
- def _msg_received(self, msg_obj):
240
- self.response = msg_obj.value
241
- self.ev_loop.quit()
242
-
243
- def wait(self, timeout=1):
244
- timer = QTimer()
245
- timer.singleShot(timeout * 1000, self.ev_loop.quit)
246
- self.ev_loop.exec_()
247
- timer.stop()
248
- self.notifier.setEnabled(False)
249
- self.pubsub.close()
250
- return self.response
251
-
252
- def _pubsub_readable(self, fd):
253
- while True:
254
- msg = self.pubsub.get_message()
255
- if msg:
256
- if msg["type"] == "subscribe":
257
- # get_message buffers, so we may already have the answer
258
- # let's check...
259
- continue
260
- else:
261
- break
262
- else:
263
- return
264
- channel = msg["channel"].decode()
265
- msg = MessageObject(topic=channel, value=MsgpackSerialization.loads(msg["data"]))
266
- self.connector._execute_callback(self._msg_received, msg, {})
267
-
268
-
269
224
  class RPCBase:
270
225
  def __init__(self, gui_id: str = None, config: dict = None, parent=None) -> None:
271
- self._client = BECDispatcher().client
226
+ self._client = BECClient() # BECClient is a singleton; here, we simply get the instance
272
227
  self._config = config if config is not None else {}
273
228
  self._gui_id = gui_id if gui_id is not None else str(uuid.uuid4())
274
229
  self._parent = parent
230
+ self._msg_wait_event = threading.Event()
231
+ self._rpc_response = None
275
232
  super().__init__()
276
233
  # print(f"RPCBase: {self._gui_id}")
277
234
 
@@ -315,24 +272,39 @@ class RPCBase:
315
272
  # pylint: disable=protected-access
316
273
  receiver = self._root._gui_id
317
274
  if wait_for_rpc_response:
318
- redis_msg = QtRedisMessageWaiter(
319
- self._client.connector, MessageEndpoints.gui_instruction_response(request_id)
275
+ self._rpc_response = None
276
+ self._msg_wait_event.clear()
277
+ self._client.connector.register(
278
+ MessageEndpoints.gui_instruction_response(request_id),
279
+ cb=self._on_rpc_response,
280
+ parent=self,
320
281
  )
321
282
 
322
283
  self._client.connector.set_and_publish(MessageEndpoints.gui_instructions(receiver), rpc_msg)
323
284
 
324
285
  if wait_for_rpc_response:
325
- response = redis_msg.wait(timeout)
326
-
327
- if response is None:
328
- raise RPCResponseTimeoutError(request_id, timeout)
329
-
286
+ try:
287
+ finished = self._msg_wait_event.wait(10)
288
+ if not finished:
289
+ raise RPCResponseTimeoutError(request_id, timeout)
290
+ finally:
291
+ self._msg_wait_event.clear()
292
+ self._client.connector.unregister(
293
+ MessageEndpoints.gui_instruction_response(request_id), cb=self._on_rpc_response
294
+ )
330
295
  # get class name
331
- if not response.accepted:
332
- raise ValueError(response.message["error"])
333
- msg_result = response.message.get("result")
296
+ if not self._rpc_response.accepted:
297
+ raise ValueError(self._rpc_response.message["error"])
298
+ msg_result = self._rpc_response.message.get("result")
299
+ self._rpc_response = None
334
300
  return self._create_widget_from_msg_result(msg_result)
335
301
 
302
+ @staticmethod
303
+ def _on_rpc_response(msg: MessageObject, parent: RPCBase) -> None:
304
+ msg = msg.value
305
+ parent._msg_wait_event.set()
306
+ parent._rpc_response = msg
307
+
336
308
  def _create_widget_from_msg_result(self, msg_result):
337
309
  if msg_result is None:
338
310
  return None
@@ -0,0 +1,47 @@
1
+ from bec_lib.serialization import MsgpackSerialization
2
+ from bec_lib.utils import lazy_import_from
3
+ from qtpy.QtCore import QEventLoop, QSocketNotifier, QTimer
4
+
5
+ MessageObject = lazy_import_from("bec_lib.connector", ("MessageObject",))
6
+
7
+
8
+ class QtRedisMessageWaiter:
9
+ def __init__(self, redis_connector, message_to_wait):
10
+ self.ev_loop = QEventLoop()
11
+ self.response = None
12
+ self.connector = redis_connector
13
+ self.message_to_wait = message_to_wait
14
+ self.pubsub = redis_connector._redis_conn.pubsub()
15
+ self.pubsub.subscribe(self.message_to_wait.endpoint)
16
+ fd = self.pubsub.connection._sock.fileno()
17
+ self.notifier = QSocketNotifier(fd, QSocketNotifier.Read)
18
+ self.notifier.activated.connect(self._pubsub_readable)
19
+
20
+ def _msg_received(self, msg_obj):
21
+ self.response = msg_obj.value
22
+ self.ev_loop.quit()
23
+
24
+ def wait(self, timeout=1):
25
+ timer = QTimer()
26
+ timer.singleShot(timeout * 1000, self.ev_loop.quit)
27
+ self.ev_loop.exec_()
28
+ timer.stop()
29
+ self.notifier.setEnabled(False)
30
+ self.pubsub.close()
31
+ return self.response
32
+
33
+ def _pubsub_readable(self, fd):
34
+ while True:
35
+ msg = self.pubsub.get_message()
36
+ if msg:
37
+ if msg["type"] == "subscribe":
38
+ # get_message buffers, so we may already have the answer
39
+ # let's check...
40
+ continue
41
+ else:
42
+ break
43
+ else:
44
+ return
45
+ channel = msg["channel"].decode()
46
+ msg = MessageObject(topic=channel, value=MsgpackSerialization.loads(msg["data"]))
47
+ self.connector._execute_callback(self._msg_received, msg, {})
@@ -8,7 +8,7 @@ import redis
8
8
  from bec_lib.client import BECClient
9
9
  from bec_lib.redis_connector import MessageObject, RedisConnector
10
10
  from bec_lib.service_config import ServiceConfig
11
- from qtpy.QtCore import PYQT6, PYSIDE6, QCoreApplication, QObject
11
+ from qtpy.QtCore import QObject
12
12
  from qtpy.QtCore import Signal as pyqtSignal
13
13
 
14
14
  if TYPE_CHECKING:
@@ -75,7 +75,6 @@ class BECDispatcher:
75
75
 
76
76
  _instance = None
77
77
  _initialized = False
78
- qapp = None
79
78
 
80
79
  def __new__(cls, client=None, config: str = None, *args, **kwargs):
81
80
  if cls._instance is None:
@@ -87,9 +86,6 @@ class BECDispatcher:
87
86
  if self._initialized:
88
87
  return
89
88
 
90
- if not QCoreApplication.instance():
91
- BECDispatcher.qapp = QCoreApplication([])
92
-
93
89
  self._slots = collections.defaultdict(set)
94
90
  self.client = client
95
91
 
@@ -123,16 +119,6 @@ class BECDispatcher:
123
119
  cls._instance = None
124
120
  cls._initialized = False
125
121
 
126
- if not cls.qapp:
127
- return
128
-
129
- # shutdown QCoreApp if it exists
130
- if PYQT6:
131
- cls.qapp.exit()
132
- elif PYSIDE6:
133
- cls.qapp.shutdown()
134
- cls.qapp = None
135
-
136
122
  def connect_slot(
137
123
  self,
138
124
  slot: Callable,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: bec_widgets
3
- Version: 0.94.4
3
+ Version: 0.94.5
4
4
  Summary: BEC Widgets
5
5
  Project-URL: Bug Tracker, https://gitlab.psi.ch/bec/bec_widgets/issues
6
6
  Project-URL: Homepage, https://gitlab.psi.ch/bec/bec_widgets
@@ -9,8 +9,8 @@ Classifier: Development Status :: 3 - Alpha
9
9
  Classifier: Programming Language :: Python :: 3
10
10
  Classifier: Topic :: Scientific/Engineering
11
11
  Requires-Python: >=3.10
12
- Requires-Dist: bec-ipython-client~=2.16
13
- Requires-Dist: bec-lib~=2.16
12
+ Requires-Dist: bec-ipython-client>=2.21.4,~=2.21
13
+ Requires-Dist: bec-lib>=2.21.4,~=2.21
14
14
  Requires-Dist: bec-qthemes~=0.0
15
15
  Requires-Dist: black~=24.0
16
16
  Requires-Dist: isort>=5.13.2,~=5.13
@@ -2,11 +2,11 @@
2
2
  .gitlab-ci.yml,sha256=BtKhZI3dhK09En1BfpglYi-ZJwG6ZdC-iJr7kXFVfCg,8346
3
3
  .pylintrc,sha256=eeY8YwSI74oFfq6IYIbCqnx3Vk8ZncKaatv96n_Y8Rs,18544
4
4
  .readthedocs.yaml,sha256=aSOc277LqXcsTI6lgvm_JY80lMlr69GbPKgivua2cS0,603
5
- CHANGELOG.md,sha256=ZgJSqE7XIvqpjlDINU3jRRCwL5__8y6FOftSs8VgNNs,6463
5
+ CHANGELOG.md,sha256=AyMvWke1tWeCvkvs9EWcNaIC75E7qlOfzgBNyQGO1ks,6719
6
6
  LICENSE,sha256=YRKe85CBRyP7UpEAWwU8_qSIyuy5-l_9C-HKg5Qm8MQ,1511
7
- PKG-INFO,sha256=Fr6w7cyPHrpWO62J-UES9e5wuB2OKrOMWOKshp4VYCM,1307
7
+ PKG-INFO,sha256=R5qONexTNA-N-SUHcQY1xSlCgOesmiI9osI0vnQIMec,1325
8
8
  README.md,sha256=Od69x-RS85Hph0-WwWACwal4yUd67XkEn4APEfHhHFw,2649
9
- pyproject.toml,sha256=wDEM1QP9Ii5M219IXkmWm2WSgs7BSJ-Wq3qtwQbFt9s,2356
9
+ pyproject.toml,sha256=32PfrgJSI6hyIzuMrPw4QtjsWpuLjvKkEZmQhMpR7ms,2416
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
@@ -81,9 +81,9 @@ bec_widgets/assets/toolbar_icons/terminal.svg,sha256=jV0cHThRmM1eXm3ETEWfSkEz8AX
81
81
  bec_widgets/assets/toolbar_icons/transform.svg,sha256=Fgug9wCi1FONy08nssEvnoDDDBbSrlNPu_pBF85GzgY,518
82
82
  bec_widgets/assets/toolbar_icons/waveform.svg,sha256=darXWaIww4HEu9skFUd8Vs1NSAgUo1d37xBNr6DX-bM,231
83
83
  bec_widgets/cli/__init__.py,sha256=d0Q6Fn44e7wFfLabDOBxpcJ1DPKWlFunGYDUBmO-4hA,22
84
- bec_widgets/cli/auto_updates.py,sha256=DyBV3HnjMSH-cvVkYNcDiYKVf0Xut4Qy2qGQqkW47Bw,4833
84
+ bec_widgets/cli/auto_updates.py,sha256=DwzRChcFIWPH2kCYvp8H7dXvyYSKGYv6LwCmK2sDR2E,5676
85
85
  bec_widgets/cli/client.py,sha256=HjBxjthimBvbyVrjvLZoeBN1NdezupowRYjZxqDlOX8,76261
86
- bec_widgets/cli/client_utils.py,sha256=cDhabblwaP88a0jlVpbn_RWWKVbsyjhmmGtMh9gesEw,12388
86
+ bec_widgets/cli/client_utils.py,sha256=isk0bUcubdbqzIstN3peQpjV9pLuNUBZsHlIedIhCCw,11594
87
87
  bec_widgets/cli/generate_cli.py,sha256=Ea5px9KblUlcGg-1JbJBTIU7laGg2n8PM7Efw9WVVzM,5889
88
88
  bec_widgets/cli/rpc_register.py,sha256=QxXUZu5XNg00Yf5O3UHWOXg3-f_pzKjjoZYMOa-MOJc,2216
89
89
  bec_widgets/cli/rpc_wigdet_handler.py,sha256=6kQng2DyS6rhLJqSJ7xa0kdgSxp-35A2upcf833dJRE,1483
@@ -104,12 +104,13 @@ bec_widgets/examples/plugin_example_pyside/tictactoeplugin.py,sha256=Hj-04Y3u_0H
104
104
  bec_widgets/examples/plugin_example_pyside/tictactoetaskmenu.py,sha256=V6OVnBTS-60zjQ2FAs88Ldjm1MfoMROfiQZZu6Guav8,2379
105
105
  bec_widgets/qt_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
106
106
  bec_widgets/qt_utils/error_popups.py,sha256=y9gKKWaafp468ioHr96nBhf02ZpEgjDc-BAVOTWh-e8,7680
107
+ bec_widgets/qt_utils/redis_message_waiter.py,sha256=fvL_QgC0cTDv_FPJdRyp5AKjf401EJU4z3r38p47ydY,1745
107
108
  bec_widgets/qt_utils/settings_dialog.py,sha256=NhtzTer_xzlB2lLLrGklkI1QYLJEWQpJoZbCz4o5daI,3645
108
109
  bec_widgets/qt_utils/toolbar.py,sha256=89WddOXPePby2CICUumdN_K_3DBgZPCR8HWUJAwrhDU,6503
109
110
  bec_widgets/utils/__init__.py,sha256=1930ji1Jj6dVuY81Wd2kYBhHYNV-2R0bN_L4o9zBj1U,533
110
111
  bec_widgets/utils/bec_connector.py,sha256=SivHKXVyNVqeu3kCXYEPpbleTVw8g1cW0FKq1QrQgco,9987
111
112
  bec_widgets/utils/bec_designer.py,sha256=ak3G8FdojUPjVBBwdPXw7tN5P2Uxr-SSoQt394jXeAA,4308
112
- bec_widgets/utils/bec_dispatcher.py,sha256=l2NRuiHGA-tr3gwJXSk7h5ZBKDuDqP8gmJKHJFc_n9I,6225
113
+ bec_widgets/utils/bec_dispatcher.py,sha256=F66edY3Ib_ZjTT24qoAbjwUOdOKt6CiWUUqN1I1xxZs,5865
113
114
  bec_widgets/utils/bec_table.py,sha256=nA2b8ukSeUfquFMAxGrUVOqdrzMoDYD6O_4EYbOG2zk,717
114
115
  bec_widgets/utils/bec_widget.py,sha256=Bo2v1aP7rgSAQajW8GBJbI3iovTn_hGCsmeFMo7bT10,707
115
116
  bec_widgets/utils/colors.py,sha256=hNIi99EpMv3t3hTJIL2jBe5nzh5f2fuCyEKXEPWSQSc,10501
@@ -322,7 +323,7 @@ docs/user/widgets/widgets.md,sha256=ZeRNmP7GUOu8kEoGu9XHsyF8Hb1foqZKEbwpgFP7ITk,
322
323
  tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
323
324
  tests/end-2-end/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
324
325
  tests/end-2-end/conftest.py,sha256=-BLnFE-NeCerf6xahGCkbZ4Ktactowi6RkBnboIzRvg,1767
325
- tests/end-2-end/test_bec_dock_rpc_e2e.py,sha256=FwbqHOlEcdimTiJaOJKfqHkOhqJY6R8Z9YNYnU8QCt4,9447
326
+ tests/end-2-end/test_bec_dock_rpc_e2e.py,sha256=jC-FjsmL7ZOy_a8zojyhbzsOLgpWC6PNogQ2_gxCO5I,9480
326
327
  tests/end-2-end/test_bec_figure_rpc_e2e.py,sha256=_OTyZfkF0D9cvdwRhHNfNadCpZPWybOCryN6EUs7tXI,6804
327
328
  tests/end-2-end/test_rpc_register_e2e.py,sha256=blhMiW7HVHX1kGm5dg8Sv0PeCuJ0gnBz3evznQFz_B8,1619
328
329
  tests/end-2-end/test_scan_control_e2e.py,sha256=u7oLgFyltkMW2apSZKDukMIXvYrbhHrU32p4mBdn8VE,2276
@@ -377,8 +378,8 @@ tests/unit_tests/test_configs/config_device_no_entry.yaml,sha256=hdvue9KLc_kfNzG
377
378
  tests/unit_tests/test_configs/config_scan.yaml,sha256=vo484BbWOjA_e-h6bTjSV9k7QaQHrlAvx-z8wtY-P4E,1915
378
379
  tests/unit_tests/test_msgs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
379
380
  tests/unit_tests/test_msgs/available_scans_message.py,sha256=m_z97hIrjHXXMa2Ex-UvsPmTxOYXfjxyJaGkIY6StTY,46532
380
- bec_widgets-0.94.4.dist-info/METADATA,sha256=Fr6w7cyPHrpWO62J-UES9e5wuB2OKrOMWOKshp4VYCM,1307
381
- bec_widgets-0.94.4.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
382
- bec_widgets-0.94.4.dist-info/entry_points.txt,sha256=3otEkCdDB9LZJuBLzG4pFLK5Di0CVybN_12IsZrQ-58,166
383
- bec_widgets-0.94.4.dist-info/licenses/LICENSE,sha256=YRKe85CBRyP7UpEAWwU8_qSIyuy5-l_9C-HKg5Qm8MQ,1511
384
- bec_widgets-0.94.4.dist-info/RECORD,,
381
+ bec_widgets-0.94.5.dist-info/METADATA,sha256=R5qONexTNA-N-SUHcQY1xSlCgOesmiI9osI0vnQIMec,1325
382
+ bec_widgets-0.94.5.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
383
+ bec_widgets-0.94.5.dist-info/entry_points.txt,sha256=3otEkCdDB9LZJuBLzG4pFLK5Di0CVybN_12IsZrQ-58,166
384
+ bec_widgets-0.94.5.dist-info/licenses/LICENSE,sha256=YRKe85CBRyP7UpEAWwU8_qSIyuy5-l_9C-HKg5Qm8MQ,1511
385
+ bec_widgets-0.94.5.dist-info/RECORD,,
pyproject.toml CHANGED
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "bec_widgets"
7
- version = "0.94.4"
7
+ version = "0.94.5"
8
8
  description = "BEC Widgets"
9
9
  requires-python = ">=3.10"
10
10
  classifiers = [
@@ -13,16 +13,16 @@ classifiers = [
13
13
  "Topic :: Scientific/Engineering",
14
14
  ]
15
15
  dependencies = [
16
- "bec_ipython_client~=2.16", # needed for jupyter console
17
- "bec_lib~=2.16",
18
- "black~=24.0", # needed for bw-generate-cli
19
- "isort~=5.13, >=5.13.2", # needed for bw-generate-cli
16
+ "bec_ipython_client~=2.21, >=2.21.4", # needed for jupyter console
17
+ "bec_lib~=2.21, >=2.21.4",
18
+ "black~=24.0", # needed for bw-generate-cli
19
+ "isort~=5.13, >=5.13.2", # needed for bw-generate-cli
20
20
  "pydantic~=2.0",
21
21
  "pyqtgraph~=0.13",
22
22
  "bec_qthemes~=0.0",
23
- "qtconsole~=5.5, >=5.5.1", # needed for jupyter console
23
+ "qtconsole~=5.5, >=5.5.1", # needed for jupyter console
24
24
  "qtpy~=2.4",
25
- "pyte", # needed for vt100 console
25
+ "pyte", # needed for vt100 console
26
26
  ]
27
27
 
28
28
 
@@ -295,3 +295,4 @@ def test_auto_update(bec_client_lib, rpc_server_dock, qtbot):
295
295
  plt_data[f"Scan {status.scan.scan_number} - {dock.selected_device}"]["y"]
296
296
  == last_scan_data["samy"]["samy"].val
297
297
  )
298
+ dock.auto_updates.shutdown()