0
0
mirror of https://github.com/bec-project/bec_widgets.git synced 2025-07-14 03:31:50 +02:00

fix(cli): BECFigure takes the port to connect to redis from the current BECClient, supporting plugins

This commit is contained in:
2024-04-29 14:50:50 +02:00
parent 1d84bca753
commit 57cb136a09
3 changed files with 22 additions and 11 deletions

View File

@ -12,7 +12,7 @@ import uuid
from functools import wraps
from typing import TYPE_CHECKING
from bec_lib import MessageEndpoints, messages
from bec_lib import MessageEndpoints, ServiceConfig, messages
from bec_lib.connector import MessageObject
from bec_lib.device import DeviceBase
from qtpy.QtCore import QCoreApplication
@ -136,10 +136,11 @@ class BECFigureClientMixin:
"""
self._start_update_script()
# pylint: disable=subprocess-run-check
config = self._client._service_config.redis
monitor_module = importlib.import_module("bec_widgets.cli.server")
monitor_path = monitor_module.__file__
command = [sys.executable, "-u", monitor_path, "--id", self._gui_id]
command = [sys.executable, "-u", monitor_path, "--id", self._gui_id, "--config", config]
self._process = subprocess.Popen(
command, text=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE
)

View File

@ -15,8 +15,10 @@ from bec_widgets.widgets.plots import BECCurve, BECImageShow, BECWaveform
class BECWidgetsCLIServer:
WIDGETS = [BECWaveform, BECFigure, BECCurve, BECImageShow]
def __init__(self, gui_id: str = None, dispatcher: BECDispatcher = None, client=None) -> None:
self.dispatcher = BECDispatcher() if dispatcher is None else dispatcher
def __init__(
self, gui_id: str = None, dispatcher: BECDispatcher = None, client=None, config=None
) -> None:
self.dispatcher = BECDispatcher(config=config) if dispatcher is None else dispatcher
self.client = self.dispatcher.client if client is None else client
self.client.start()
self.gui_id = gui_id
@ -32,7 +34,7 @@ class BECWidgetsCLIServer:
self._shutdown_event = False
self._heartbeat_timer = QTimer()
self._heartbeat_timer.timeout.connect(self.emit_heartbeat)
self._heartbeat_timer.start(1000) # Emit heartbeat every 1 seconds
self._heartbeat_timer.start(200) # Emit heartbeat every 1 seconds
def on_rpc_update(self, msg: dict, metadata: dict):
request_id = metadata.get("request_id")
@ -125,11 +127,12 @@ if __name__ == "__main__": # pragma: no cover
parser = argparse.ArgumentParser(description="BEC Widgets CLI Server")
parser.add_argument("--id", type=str, help="The id of the server")
parser.add_argument("--config", type=str, help="Config to connect to redis.")
args = parser.parse_args()
server = BECWidgetsCLIServer(gui_id=args.id)
# server = BECWidgetsCLIServer(gui_id="test")
server = BECWidgetsCLIServer(gui_id=args.id, config=args.config)
# server = BECWidgetsCLIServer(gui_id="test",config="awi-bec-dev-01:6379")
fig = server.fig
win.setCentralWidget(fig)

View File

@ -6,7 +6,7 @@ from collections.abc import Callable
from typing import TYPE_CHECKING, Union
import redis
from bec_lib import BECClient
from bec_lib import BECClient, ServiceConfig
from bec_lib.redis_connector import MessageObject, RedisConnector
from qtpy.QtCore import QObject
from qtpy.QtCore import Signal as pyqtSignal
@ -71,13 +71,13 @@ class BECDispatcher:
_instance = None
_initialized = False
def __new__(cls, client=None, *args, **kwargs):
def __new__(cls, client=None, config: str = None, *args, **kwargs):
if cls._instance is None:
cls._instance = super(BECDispatcher, cls).__new__(cls)
cls._initialized = False
return cls._instance
def __init__(self, client=None):
def __init__(self, client=None, config: str = None):
if self._initialized:
return
@ -85,7 +85,14 @@ class BECDispatcher:
self.client = client
if self.client is None:
self.client = BECClient(connector_cls=QtRedisConnector, forced=True)
if config is not None:
host, port = config.split(":")
redis_config = {"host": host, "port": port}
self.client = BECClient(
config=ServiceConfig(redis=redis_config), connector_cls=QtRedisConnector
) # , forced=True)
else:
self.client = BECClient(connector_cls=QtRedisConnector) # , forced=True)
else:
if self.client.started:
# have to reinitialize client to use proper connector