Source code for malcolm.core.alarm

from enum import Enum

import numpy as np
from annotypes import Anno, Serializable, deserialize_object


[docs]class AlarmSeverity(Enum): """An alarm severity""" NO_ALARM, MINOR_ALARM, MAJOR_ALARM, INVALID_ALARM, UNDEFINED_ALARM = np.arange( 5, dtype=np.int32 )
[docs]class AlarmStatus(Enum): """An alarm status""" ( NO_STATUS, DEVICE_STATUS, DRIVER_STATUS, RECORD_STATUS, DB_STATUS, CONF_STATUS, UNDEFINED_STATUS, CLIENT_STATUS, ) = np.arange(8, dtype=np.int32)
with Anno("The alarm severity"): AAlarmSeverity = AlarmSeverity with Anno("The alarm status"): AAlarmStatus = AlarmStatus with Anno("A descriptive alarm message"): AMessage = str
[docs]@Serializable.register_subclass("alarm_t") class Alarm(Serializable): """Model representing a alarm state with severity, status and message""" __slots__ = ["severity", "status", "message"] def __init__( self, severity: AAlarmSeverity = AlarmSeverity.NO_ALARM, status: AAlarmStatus = AlarmStatus.NO_STATUS, message: AMessage = "", ) -> None: if not isinstance(severity, AlarmSeverity): severity = AlarmSeverity(severity) self.severity = severity if not isinstance(status, AlarmStatus): status = AlarmStatus(status) self.status = status self.message = deserialize_object(message, str) @classmethod def major(cls, message: str) -> "Alarm": return cls(AlarmSeverity.MAJOR_ALARM, AlarmStatus.DEVICE_STATUS, message) @classmethod def invalid(cls, message: str) -> "Alarm": return cls(AlarmSeverity.INVALID_ALARM, AlarmStatus.DEVICE_STATUS, message) @classmethod def disconnected(cls, message: str) -> "Alarm": return cls(AlarmSeverity.UNDEFINED_ALARM, AlarmStatus.CLIENT_STATUS, message) def is_ok(self) -> bool: return self.severity == AlarmSeverity.NO_ALARM def __ne__(self, other): return type(other) != Alarm or other.to_dict() != self.to_dict() def __eq__(self, other): return not self != other ok: "Alarm" # filled in below
Alarm.ok = Alarm()