From 09f4f1d192fc8bcd3eb406b95eb0ff67f4d1c043 Mon Sep 17 00:00:00 2001 From: Markus Zolliker Date: Mon, 24 Jun 2024 13:30:49 +0200 Subject: [PATCH] frappy_psi.sea: use ReadFailedError change error class on reading parameters in SEA from HardwareError to ReadFailed. This is in most cases more appropriate. TODO: find errors in SEA that should be should be HardwareErrors and a mechanism to indicate this + for errors related to disabled modules use the DISABLED status Change-Id: I0342a34185a66dcf874c6ca034b7cefc98bf9c8a Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/34022 Tested-by: Jenkins Automated Tests Reviewed-by: Markus Zolliker --- frappy_psi/sea.py | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/frappy_psi/sea.py b/frappy_psi/sea.py index 5e47c2e..45a0f47 100644 --- a/frappy_psi/sea.py +++ b/frappy_psi/sea.py @@ -38,9 +38,9 @@ from os.path import expanduser, join, exists from frappy.client import ProxyClient from frappy.datatypes import ArrayOf, BoolType, \ - EnumType, FloatRange, IntRange, StringType -from frappy.core import IDLE, BUSY, ERROR -from frappy.errors import ConfigError, HardwareError, CommunicationFailedError + EnumType, FloatRange, IntRange, StringType, StatusType +from frappy.core import IDLE, BUSY, ERROR, DISABLED +from frappy.errors import ConfigError, HardwareError, ReadFailedError, CommunicationFailedError from frappy.lib import generalConfig, mkthread from frappy.lib.asynconn import AsynConn, ConnectionClosed from frappy.modulebase import Done @@ -307,7 +307,8 @@ class SeaClient(ProxyClient, Module): readerror = None if path.endswith('.geterror'): if value: - readerror = HardwareError(value) + # TODO: add mechanism in SEA to indicate hardware errors + readerror = ReadFailedError(value) path = path.rsplit('.', 1)[0] value = None mplist = self.path2param.get(path) @@ -422,9 +423,9 @@ class SeaEnum(EnumType): def __call__(self, value): try: value = int(value) - except TypeError: - pass - return super().__call__(value) + return super().__call__(value) + except Exception as e: + raise ReadFailedError(e) def get_datatype(paramdesc): @@ -658,6 +659,8 @@ class SeaReadable(SeaModule, Readable): _readerror = None _status = IDLE, '' + status = Parameter(datatype=StatusType(Readable, 'DISABLED')) + def update_value(self, value, timestamp, readerror): # make sure status is always ERROR when reading value fails self._readerror = readerror @@ -669,9 +672,9 @@ class SeaReadable(SeaModule, Readable): self.read_status() # send event for ordinary self._status def update_status(self, value, timestamp, readerror): - if readerror: - value = f'{readerror.name} - {readerror}' - if value == '': + if 'disable' in value.lower(): + self._status = DISABLED, value + elif value == '': self._status = IDLE, '' else: self._status = ERROR, value @@ -679,6 +682,8 @@ class SeaReadable(SeaModule, Readable): def read_status(self): if self._readerror: + if 'disable' in str(self._readerror).lower(): + return DISABLED, str(self._readerror) return ERROR, f'{self._readerror.name} - {self._readerror}' return self._status @@ -696,6 +701,8 @@ class SeaWritable(SeaReadable, Writable): class SeaDrivable(SeaReadable, Drivable): _is_running = 0 + status = Parameter(datatype=StatusType(Drivable, 'DISABLED')) + def earlyInit(self): super().earlyInit() self._run_event = threading.Event()