majuna/app/alarms.py

43 lines
1.2 KiB
Python
Raw Normal View History

import datetime
from typing import Optional, List
2022-06-17 13:24:51 +01:00
from app.brm.brn import BRN
2022-03-10 14:26:22 +00:00
from app.extensions import db
2022-04-22 14:01:16 +01:00
from app.models.alarms import Alarm
2022-03-10 14:26:22 +00:00
def alarms_for(target: str) -> List[Alarm]:
return list(Alarm.query.filter(
Alarm.target == target
).all())
2022-06-17 13:24:51 +01:00
def _get_alarm(target: BRN,
aspect: str,
2022-05-16 11:44:03 +01:00
create_if_missing: bool = True) -> Optional[Alarm]:
2022-06-17 13:24:51 +01:00
target_str = str(target)
alarm: Optional[Alarm] = Alarm.query.filter(
Alarm.aspect == aspect,
2022-06-17 13:24:51 +01:00
Alarm.target == target_str
).first()
2022-03-10 14:26:22 +00:00
if create_if_missing and alarm is None:
alarm = Alarm()
alarm.aspect = aspect
2022-06-17 13:24:51 +01:00
alarm.target = target_str
alarm.text = "New alarm"
alarm.state_changed = datetime.datetime.utcnow()
alarm.last_updated = datetime.datetime.utcnow()
2022-03-10 14:26:22 +00:00
db.session.add(alarm)
return alarm
2022-06-17 13:24:51 +01:00
def get_alarm(target: BRN, aspect: str) -> Optional[Alarm]:
return _get_alarm(target, aspect, create_if_missing=False)
2022-06-17 13:24:51 +01:00
def get_or_create_alarm(target: BRN, aspect: str) -> Alarm:
alarm = _get_alarm(target, aspect, create_if_missing=True)
2022-05-16 12:47:40 +01:00
if alarm is None:
raise RuntimeError("Asked for an alarm to be created but got None.")
2022-05-16 11:44:03 +01:00
return alarm