majuna/app/alarms.py

39 lines
1.2 KiB
Python

from datetime import datetime, timezone
from typing import List, Optional
from app.brm.brn import BRN
from app.extensions import db
from app.models.alarms import Alarm
def alarms_for(target: BRN) -> List[Alarm]:
return list(Alarm.query.filter(Alarm.target == str(target)).all())
def _get_alarm(
target: BRN, aspect: str, create_if_missing: bool = True
) -> Optional[Alarm]:
target_str = str(target)
alarm: Optional[Alarm] = Alarm.query.filter(
Alarm.aspect == aspect, Alarm.target == target_str
).first()
if create_if_missing and alarm is None:
alarm = Alarm()
alarm.aspect = aspect
alarm.target = target_str
alarm.text = "New alarm"
alarm.state_changed = datetime.now(tz=timezone.utc)
alarm.last_updated = datetime.now(tz=timezone.utc)
db.session.add(alarm)
return alarm
def get_alarm(target: BRN, aspect: str) -> Optional[Alarm]:
return _get_alarm(target, aspect, create_if_missing=False)
def get_or_create_alarm(target: BRN, aspect: str) -> Alarm:
alarm = _get_alarm(target, aspect, create_if_missing=True)
if alarm is None:
raise RuntimeError("Asked for an alarm to be created but got None.")
return alarm