db.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. from tinydb import TinyDB
  2. class EventModel(object):
  3. def __init__(self, uri):
  4. self.uri = uri
  5. self.db = None
  6. self.reload()
  7. def reload(self):
  8. if self.db is not None:
  9. self.db.close()
  10. self.db = TinyDB(self.uri, indent=2)
  11. self._actions = self.db.table("actions")
  12. self._alarms = self.db.table("alarms")
  13. def get_action_by_id(self, action_id):
  14. return self._actions.get(eid=action_id)
  15. def get_alarm_by_id(self, alarm_id):
  16. return self._alarms.get(eid=alarm_id)
  17. def get_actions_by_alarm(self, alarm):
  18. for action_id in alarm.get("actions", []):
  19. action = self.get_action_by_id(action_id)
  20. if action is None:
  21. continue
  22. yield action
  23. def get_all_alarms(self):
  24. return self._alarms.all()
  25. def get_all_actions(self):
  26. return self._actions.all()
  27. def get_all_alarms_expanded(self):
  28. for alarm in self.get_all_alarms():
  29. for action in self.get_actions_by_alarm(alarm):
  30. yield alarm, action
  31. def add_event(self, alarm, actions):
  32. action_ids = [self.add_action(a) for a in actions]
  33. alarm["actions"] = action_ids
  34. return self._alarms.insert(alarm)
  35. def add_action(self, action):
  36. return self._actions.insert(action)
  37. def add_alarm(self, alarm):
  38. return self.add_event(alarm, [])
  39. def update_alarm(self, alarmid, new_fields={}):
  40. return self._alarms.update(new_fields, eids=[alarmid])
  41. def update_action(self, actionid, new_fields={}):
  42. return self._actions.update(new_fields, eids=[actionid])
  43. def delete_alarm(self, alarmid):
  44. return self._alarms.remove(eids=[alarmid])
  45. def delete_action(self, actionid):
  46. return self._actions.remove(eids=[actionid])