From e87b019b57f4a746837caefa6ec1fe18ff33639b Mon Sep 17 00:00:00 2001 From: David Perl Date: Tue, 3 Nov 2026 09:30:25 +0100 Subject: [PATCH] feat: add queue widget --- pxii_bec/bec_widgets/widgets/__init__.py | 3 +- pxii_bec/bec_widgets/widgets/client.py | 11 ++++ .../bec_widgets/widgets/designer_plugins.py | 2 + pxii_bec/bec_widgets/widgets/imported.py | 4 ++ .../widgets/px_ii_task_queue_widget.pyproject | 1 + .../widgets/px_ii_task_queue_widget_plugin.py | 57 +++++++++++++++++++ .../register_px_ii_task_queue_widget.py | 15 +++++ pxii_bec/messages.py | 8 ++- 8 files changed, 99 insertions(+), 2 deletions(-) create mode 100644 pxii_bec/bec_widgets/widgets/px_ii_task_queue_widget.pyproject create mode 100644 pxii_bec/bec_widgets/widgets/px_ii_task_queue_widget_plugin.py create mode 100644 pxii_bec/bec_widgets/widgets/register_px_ii_task_queue_widget.py diff --git a/pxii_bec/bec_widgets/widgets/__init__.py b/pxii_bec/bec_widgets/widgets/__init__.py index f91753b..f670d94 100644 --- a/pxii_bec/bec_widgets/widgets/__init__.py +++ b/pxii_bec/bec_widgets/widgets/__init__.py @@ -1,3 +1,4 @@ from mx_bec.bec_widgets.widgets.aare_bec.actors_config import MxActorConfigWidget +from mx_bec.bec_widgets.widgets.aare_bec.task_queue import MxTaskQueueWidget -__all__ = ["MxActorConfigWidget"] +__all__ = ["MxActorConfigWidget", "MxTaskQueueWidget"] diff --git a/pxii_bec/bec_widgets/widgets/client.py b/pxii_bec/bec_widgets/widgets/client.py index 6fab2ee..c1d0216 100644 --- a/pxii_bec/bec_widgets/widgets/client.py +++ b/pxii_bec/bec_widgets/widgets/client.py @@ -14,6 +14,7 @@ logger = bec_logger.logger _Widgets = { "PxIIActorConfigWiget": "PxIIActorConfigWiget", + "PxIITaskQueueWidget": "PxIITaskQueueWidget", "ScanHistory": "ScanHistory", } @@ -28,6 +29,16 @@ class PxIIActorConfigWiget(RPCBase): """ +class PxIITaskQueueWidget(RPCBase): + _IMPORT_MODULE = "pxii_bec.bec_widgets.widgets.imported" + + @rpc_call + def refresh(self): + """ + Reload the queued tasks from Redis. + """ + + class ScanHistory(RPCBase): _IMPORT_MODULE = "pxii_bec.bec_widgets.widgets.scan_history.scan_history" diff --git a/pxii_bec/bec_widgets/widgets/designer_plugins.py b/pxii_bec/bec_widgets/widgets/designer_plugins.py index 1fccac6..162c451 100644 --- a/pxii_bec/bec_widgets/widgets/designer_plugins.py +++ b/pxii_bec/bec_widgets/widgets/designer_plugins.py @@ -6,10 +6,12 @@ from __future__ import annotations designer_plugins = { "PxIIActorConfigWiget": ("pxii_bec.bec_widgets.widgets.imported", "PxIIActorConfigWiget"), + "PxIITaskQueueWidget": ("pxii_bec.bec_widgets.widgets.imported", "PxIITaskQueueWidget"), "ScanHistory": ("pxii_bec.bec_widgets.widgets.scan_history.scan_history", "ScanHistory"), } widget_icons = { "PxIIActorConfigWiget": "format_list_bulleted", + "PxIITaskQueueWidget": "pending_actions", "ScanHistory": "widgets", } diff --git a/pxii_bec/bec_widgets/widgets/imported.py b/pxii_bec/bec_widgets/widgets/imported.py index 60e64cf..6c95f0a 100644 --- a/pxii_bec/bec_widgets/widgets/imported.py +++ b/pxii_bec/bec_widgets/widgets/imported.py @@ -1,4 +1,8 @@ from mx_bec.bec_widgets.widgets.aare_bec.actors_config import MxActorConfigWidget +from mx_bec.bec_widgets.widgets.aare_bec.task_queue import MxTaskQueueWidget class PxIIActorConfigWiget(MxActorConfigWidget): ... + + +class PxIITaskQueueWidget(MxTaskQueueWidget): ... diff --git a/pxii_bec/bec_widgets/widgets/px_ii_task_queue_widget.pyproject b/pxii_bec/bec_widgets/widgets/px_ii_task_queue_widget.pyproject new file mode 100644 index 0000000..4cbb48d --- /dev/null +++ b/pxii_bec/bec_widgets/widgets/px_ii_task_queue_widget.pyproject @@ -0,0 +1 @@ +{'files': ['imported.py']} \ No newline at end of file diff --git a/pxii_bec/bec_widgets/widgets/px_ii_task_queue_widget_plugin.py b/pxii_bec/bec_widgets/widgets/px_ii_task_queue_widget_plugin.py new file mode 100644 index 0000000..52f293e --- /dev/null +++ b/pxii_bec/bec_widgets/widgets/px_ii_task_queue_widget_plugin.py @@ -0,0 +1,57 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause + +from qtpy.QtDesigner import QDesignerCustomWidgetInterface +from qtpy.QtWidgets import QWidget + +from bec_widgets.utils.bec_designer import designer_material_icon +from pxii_bec.bec_widgets.widgets.imported import PxIITaskQueueWidget + +DOM_XML = """ + + + + +""" + + +class PxIITaskQueueWidgetPlugin(QDesignerCustomWidgetInterface): # pragma: no cover + def __init__(self): + super().__init__() + self._form_editor = None + + def createWidget(self, parent): + if parent is None: + return QWidget() + t = PxIITaskQueueWidget(parent) + return t + + def domXml(self): + return DOM_XML + + def group(self): + return "" + + def icon(self): + return designer_material_icon(PxIITaskQueueWidget.ICON_NAME) + + def includeFile(self): + return "px_ii_task_queue_widget" + + def initialize(self, form_editor): + self._form_editor = form_editor + + def isContainer(self): + return False + + def isInitialized(self): + return self._form_editor is not None + + def name(self): + return "PxIITaskQueueWidget" + + def toolTip(self): + return "PxIITaskQueueWidget" + + def whatsThis(self): + return self.toolTip() diff --git a/pxii_bec/bec_widgets/widgets/register_px_ii_task_queue_widget.py b/pxii_bec/bec_widgets/widgets/register_px_ii_task_queue_widget.py new file mode 100644 index 0000000..8e94f05 --- /dev/null +++ b/pxii_bec/bec_widgets/widgets/register_px_ii_task_queue_widget.py @@ -0,0 +1,15 @@ +def main(): # pragma: no cover + from qtpy import PYSIDE6 + + if not PYSIDE6: + print("PYSIDE6 is not available in the environment. Cannot patch designer.") + return + from PySide6.QtDesigner import QPyDesignerCustomWidgetCollection + + from pxii_bec.bec_widgets.widgets.px_ii_task_queue_widget_plugin import PxIITaskQueueWidgetPlugin + + QPyDesignerCustomWidgetCollection.addCustomWidget(PxIITaskQueueWidgetPlugin()) + + +if __name__ == "__main__": # pragma: no cover + main() diff --git a/pxii_bec/messages.py b/pxii_bec/messages.py index 4975034..faaeee5 100644 --- a/pxii_bec/messages.py +++ b/pxii_bec/messages.py @@ -4,7 +4,13 @@ find them through the `bec.messages` entry point registered by this package.""" from mx_bec.messages import ( MXMeasurementSequenceMessage, MXTaskExecutionMessage, + MXTaskQueueChangedMessage, OpticalPredictionMessage, ) -__all__ = ["MXMeasurementSequenceMessage", "MXTaskExecutionMessage", "OpticalPredictionMessage"] +__all__ = [ + "MXMeasurementSequenceMessage", + "MXTaskExecutionMessage", + "MXTaskQueueChangedMessage", + "OpticalPredictionMessage", +]