1
0
mirror of https://github.com/bec-project/bec_widgets.git synced 2026-03-09 18:27:52 +01:00

feat(admin-view): add admin view to views

This commit is contained in:
2026-02-17 15:46:50 +01:00
parent f57238d416
commit 8e7bbf45c0
3 changed files with 82 additions and 0 deletions

View File

@@ -0,0 +1,42 @@
"""Module for Admin View."""
from qtpy.QtWidgets import QWidget
from bec_widgets.applications.views.admin_view.admin_widget import AdminWidget
from bec_widgets.applications.views.view import ViewBase
from bec_widgets.utils.error_popups import SafeSlot
class AdminView(ViewBase):
"""
A view for administrators to change the current active experiment, manage messaging
services, and more tasks reserved for users with admin privileges.
"""
def __init__(
self,
parent: QWidget | None = None,
content: QWidget | None = None,
*,
id: str | None = None,
title: str | None = None,
):
super().__init__(parent=parent, content=content, id=id, title=title)
self.admin_widget = AdminWidget(parent=self)
self.set_content(self.admin_widget)
@SafeSlot()
def on_enter(self) -> None:
"""Called after the view becomes current/visible.
Default implementation does nothing. Override in subclasses.
"""
self.admin_widget.on_enter()
@SafeSlot()
def on_exit(self) -> None:
"""Called before the view is hidden.
Default implementation does nothing. Override in subclasses.
"""
self.admin_widget.on_exit()

View File

@@ -0,0 +1,40 @@
"""Module to define a widget for the admin view."""
from __future__ import annotations
from typing import TYPE_CHECKING
from bec_lib.endpoints import MessageEndpoints
from bec_lib.messages import DeploymentInfoMessage
from qtpy.QtWidgets import QStackedLayout, QWidget
from bec_widgets.utils.bec_widget import BECWidget
from bec_widgets.utils.error_popups import SafeSlot
class AdminWidget(BECWidget, QWidget):
"""Widget for admin view."""
RPC = False
def __init__(self, parent=None, client=None):
super().__init__(parent=parent, client=client)
self._current_deployment_info: DeploymentInfoMessage | None = None
self.stacked_layout = QStackedLayout()
self.stacked_layout.setContentsMargins(0, 0, 0, 0)
self.stacked_layout.setSpacing(0)
self.stacked_layout.setStackingMode(QStackedLayout.StackingMode.StackAll)
self.setLayout(self.stacked_layout)
self.bec_dispatcher.connect_slot(
slot=self._update_deployment_info,
endpoint=MessageEndpoints.deployment_info(),
from_start=True,
)
@SafeSlot(dict, dict)
def _update_deployment_info(self, msg: dict, metadata: dict) -> None:
"""Fetch current deployment info from the server."""
deployment = DeploymentInfoMessage.model_validate(msg)
self._current_deployment_info = deployment