Skip to content

Commit c74ef8e

Browse files
committed
wip refactor 2
1 parent c0dbd7a commit c74ef8e

3 files changed

Lines changed: 5 additions & 446 deletions

File tree

bec_widgets/widgets/progress/progress_backend.py

Lines changed: 3 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
from typing import Literal
77

88
import numpy as np
9-
from bec_lib import messages
109
from bec_lib.endpoints import MessageEndpoints
1110
from qtpy.QtCore import QObject, QTimer, Signal
1211

@@ -140,7 +139,6 @@ def __init__(self, bec_dispatcher, parent: QObject | None = None):
140139
self.bec_dispatcher = bec_dispatcher
141140
self._progress_source: ProgressSource | None = None
142141
self._progress_device: str | None = None
143-
self._queue_connected = False
144142
self.task: ProgressTask | None = None
145143
self.scan_number: int | None = None
146144
self._active_scan_id: str | None = None
@@ -167,30 +165,9 @@ def start(
167165
*,
168166
source: ProgressSource | None = ProgressSource.SCAN_PROGRESS,
169167
device: str | None = None,
170-
connect_queue: bool = False,
171-
refresh_queue: bool = False,
172168
) -> None:
173169
if source is not None:
174170
self.set_progress_source(source, device=device)
175-
if connect_queue:
176-
self.connect_to_queue()
177-
if refresh_queue:
178-
self.refresh_queue()
179-
180-
def connect_to_queue(self) -> None:
181-
if self._queue_connected:
182-
return
183-
self.bec_dispatcher.connect_slot(self.on_queue_update, MessageEndpoints.scan_queue_status())
184-
self._queue_connected = True
185-
186-
def refresh_queue(self) -> None:
187-
connector = getattr(self.bec_dispatcher.client, "connector", None)
188-
if connector is None:
189-
return
190-
msg = connector.get(MessageEndpoints.scan_queue_status())
191-
if msg is None:
192-
return
193-
self.on_queue_update(msg.content, msg.metadata)
194171

195172
def set_progress_source(self, source: ProgressSource, device: str | None = None) -> None:
196173
if source == ProgressSource.DEVICE_PROGRESS and not device:
@@ -264,42 +241,6 @@ def clear_task(self, *, emit_finished: bool = True) -> None:
264241
if emit_finished:
265242
self.progress_finished.emit(self.current_snapshot(value=0, max_value=100, done=True))
266243

267-
def on_queue_update(self, msg_content: dict, metadata: dict):
268-
queue_info = self._extract_active_queue_info(msg_content)
269-
if queue_info is None:
270-
self.clear_task()
271-
self.set_progress_source(ProgressSource.SCAN_PROGRESS)
272-
return
273-
274-
active_request_block = queue_info.active_request_block
275-
scan_id = active_request_block.scan_id or str(active_request_block.scan_number)
276-
rid = getattr(active_request_block, "RID", None) or metadata.get("RID")
277-
if self.task is None or self._active_scan_id != scan_id:
278-
self._start_task(scan_id, rid=rid)
279-
else:
280-
self._active_rid = rid or self._active_rid
281-
282-
self.scan_number = active_request_block.scan_number
283-
self.source_changed.emit(self.current_snapshot(value=0, max_value=100, done=False))
284-
285-
def _extract_active_queue_info(self, msg_content: dict):
286-
if "queue" not in msg_content:
287-
return None
288-
if "primary" not in msg_content["queue"]:
289-
return None
290-
primary_queue = msg_content.get("queue").get("primary")
291-
if primary_queue is None or not isinstance(primary_queue, messages.ScanQueueStatus):
292-
return None
293-
primary_queue_info = primary_queue.info
294-
if len(primary_queue_info) == 0:
295-
return None
296-
scan_info = primary_queue_info[0]
297-
if scan_info is None or scan_info.active_request_block is None:
298-
return None
299-
if scan_info.status.lower() != "running":
300-
return None
301-
return scan_info
302-
303244
def on_progress_update(self, msg_content: dict, metadata: dict):
304245
if self._progress_source is None:
305246
return
@@ -323,6 +264,9 @@ def process_progress_message(
323264
)
324265
scan_id = metadata.get("scan_id") or metadata.get("RID")
325266
rid = metadata.get("RID")
267+
scan_number = metadata.get("scan_number")
268+
if scan_number is not None:
269+
self.scan_number = scan_number
326270
is_new_scan = False
327271
previous_scan_id = self._active_scan_id
328272
previous_rid = self._active_rid
@@ -367,8 +311,3 @@ def process_progress_message(
367311
def cleanup(self) -> None:
368312
self.clear_task(emit_finished=False)
369313
self._disconnect_progress_source()
370-
if self._queue_connected:
371-
self.bec_dispatcher.disconnect_slot(
372-
self.on_queue_update, MessageEndpoints.scan_queue_status()
373-
)
374-
self._queue_connected = False

bec_widgets/widgets/progress/scan_progressbar/scan_progressbar.py

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,7 @@ def __init__(
6565
self.progress_tracker.progress_updated.connect(self._on_progress_snapshot)
6666
self.progress_tracker.progress_finished.connect(self._on_progress_finished)
6767
self.progress_tracker.source_changed.connect(self._on_progress_source_changed)
68-
self.progress_tracker.start(
69-
source=ProgressSource.SCAN_PROGRESS, connect_queue=True, refresh_queue=True
70-
)
68+
self.progress_tracker.start(source=ProgressSource.SCAN_PROGRESS)
7169

7270
@property
7371
def task(self):
@@ -109,12 +107,6 @@ def _progress_device(self):
109107
def _progress_device(self, value):
110108
self.progress_tracker._progress_device = value
111109

112-
def connect_to_queue(self):
113-
"""
114-
Connect to the queue status signal.
115-
"""
116-
self.progress_tracker.connect_to_queue()
117-
118110
def set_progress_source(self, source: ProgressSource, device=None):
119111
"""
120112
Set the source of the progress.
@@ -155,6 +147,7 @@ def _on_progress_source_changed(self, snapshot: ProgressSnapshot):
155147

156148
def _on_progress_snapshot(self, snapshot: ProgressSnapshot):
157149
self.update_labels()
150+
self.update_source_label(snapshot.source, device=snapshot.device)
158151
self.progressbar.set_maximum(snapshot.max_value)
159152
self.progressbar.state = ProgressState.from_bec_status(snapshot.status)
160153
self.progressbar.set_value(snapshot.value)
@@ -200,13 +193,6 @@ def update_labels(self):
200193
self.ui.elapsed_time_label.setText(self.task.time_elapsed)
201194
self.ui.remaining_time_label.setText(self.task.time_remaining)
202195

203-
@SafeSlot(dict, dict, verify_sender=True)
204-
def on_queue_update(self, msg_content, metadata):
205-
"""
206-
Update the progress bar based on the queue status.
207-
"""
208-
self.progress_tracker.on_queue_update(msg_content, metadata)
209-
210196
def cleanup(self):
211197
self.progress_tracker.cleanup()
212198
self.progressbar.close()

0 commit comments

Comments
 (0)