Integrate WrappedClient into Thermostat model

This commit is contained in:
atse 2024-07-05 17:21:39 +08:00
parent 744dabb868
commit 3d41254f43
2 changed files with 11 additions and 19 deletions

View File

@ -1,4 +1,3 @@
from pytec.aioclient import Client
from PyQt6.QtCore import pyqtSignal, QObject, pyqtSlot from PyQt6.QtCore import pyqtSignal, QObject, pyqtSlot
from qasync import asyncSlot from qasync import asyncSlot
from pytec.gui.model.property import Property, PropertyMeta from pytec.gui.model.property import Property, PropertyMeta
@ -6,17 +5,6 @@ import asyncio
import logging import logging
class WrappedClient(QObject, Client):
connection_error = pyqtSignal()
async def _read_line(self):
try:
return await super()._read_line()
except (Exception, TimeoutError, asyncio.exceptions.TimeoutError):
logging.error("Client connection error, disconnecting", exc_info=True)
self.connection_error.emit()
class Thermostat(QObject, metaclass=PropertyMeta): class Thermostat(QObject, metaclass=PropertyMeta):
hw_rev = Property(dict) hw_rev = Property(dict)
fan = Property(dict) fan = Property(dict)
@ -27,6 +15,7 @@ class Thermostat(QObject, metaclass=PropertyMeta):
interval = Property(list) interval = Property(list)
report = Property(list) report = Property(list)
info_box_trigger = pyqtSignal(str, str) info_box_trigger = pyqtSignal(str, str)
connection_error = pyqtSignal()
def __init__(self, parent, client, update_s): def __init__(self, parent, client, update_s):
self._update_s = update_s self._update_s = update_s
@ -48,6 +37,8 @@ class Thermostat(QObject, metaclass=PropertyMeta):
"Encountered an error while updating parameter tree.", "Encountered an error while updating parameter tree.",
exc_info=True, exc_info=True,
) )
self.connection_error.emit()
return
self.task = asyncio.create_task(self.update_params()) self.task = asyncio.create_task(self.update_params())
await asyncio.sleep(self._update_s) await asyncio.sleep(self._update_s)

View File

@ -7,7 +7,8 @@ from pytec.gui.view.live_plot_view import LiveDataPlotter
from pytec.gui.view.ctrl_panel import CtrlPanel from pytec.gui.view.ctrl_panel import CtrlPanel
from pytec.gui.view.info_box import InfoBox from pytec.gui.view.info_box import InfoBox
from pytec.gui.model.pid_autotuner import PIDAutoTuner from pytec.gui.model.pid_autotuner import PIDAutoTuner
from pytec.gui.model.thermostat import WrappedClient, Thermostat from pytec.gui.model.thermostat import Thermostat
from pytec.aioclient import Client
import json import json
from autotune import PIDAutotuneState from autotune import PIDAutotuneState
from qasync import asyncSlot, asyncClose from qasync import asyncSlot, asyncClose
@ -63,7 +64,11 @@ class MainWindow(QtWidgets.QMainWindow):
self.hw_rev_data = None self.hw_rev_data = None
self.info_box = InfoBox() self.info_box = InfoBox()
self.client = WrappedClient(self) self.client = Client()
self.thermostat = Thermostat(
self, self.client, self.report_refresh_spin.value()
)
def handle_connection_error(): def handle_connection_error():
self.info_box.display_info_box( self.info_box.display_info_box(
@ -72,11 +77,7 @@ class MainWindow(QtWidgets.QMainWindow):
self.bail() self.bail()
self.client.connection_error.connect(handle_connection_error) self.thermostat.connection_error.connect(handle_connection_error)
self.thermostat = Thermostat(
self, self.client, self.report_refresh_spin.value()
)
self.client.connection_error.connect(self.thermostat.timed_out) self.client.connection_error.connect(self.thermostat.timed_out)
self.client.connection_error.connect(self.bail) self.client.connection_error.connect(self.bail)