summaryrefslogtreecommitdiffstats
path: root/py/xas/status.py
diff options
context:
space:
mode:
Diffstat (limited to 'py/xas/status.py')
-rw-r--r--py/xas/status.py88
1 files changed, 88 insertions, 0 deletions
diff --git a/py/xas/status.py b/py/xas/status.py
new file mode 100644
index 0000000..1465616
--- /dev/null
+++ b/py/xas/status.py
@@ -0,0 +1,88 @@
+import sqlite3
+
+class StatusType():
+ def __init__(self, id, name):
+ self.id = id
+ self.name = name
+
+ def __str__(self):
+ return self.name
+
+class ErrorType(StatusType):
+ pass
+
+class Status():
+ def __init__(self, id: int, typeobj: StatusType, description: str):
+ self.id = id
+ self.typeobj = typeobj
+ self.description = description
+
+ def __str__(self):
+ return self.description
+
+class Error(Status):
+ pass
+
+class Database():
+ def __init__(self, filename: str):
+ self.db = sqlite3.connect(filename)
+ self.db.row_factory = sqlite3.Row
+
+ self.statusTypes = dict()
+ self.statuses = dict()
+
+ self.errorTypes = dict()
+ self.errors = dict()
+
+ self.load_types()
+ self.load_statuses()
+
+ def load_types(self):
+ targets = {
+ "xas_status_type": (StatusType, self.statusTypes),
+ "xas_error_type": (ErrorType, self.errorTypes)
+ }
+
+ for table in targets.keys():
+ typeof = targets[table][0]
+ target = targets[table][1]
+
+ cr = self.db.cursor()
+ cr.execute(f"select id, name from {table}")
+
+ for row in cr.fetchall():
+ typeobj = typeof(row['id'], row['name'])
+
+ target[typeobj.id] = typeobj
+
+ def status_type(self, id: int):
+ return self.statusTypes[id]
+
+ def error_type(self, id: int):
+ return self.errorTypes[id]
+
+ def load_statuses(self):
+ targets = {
+ "xas_status": (Status, self.statusTypes, self.statuses),
+ "xas_error": (Error, self.errorTypes, self.errors)
+ }
+
+ for table in targets.keys():
+ typeof = targets[table][0]
+ types = targets[table][1]
+ target = targets[table][2]
+
+ cr = self.db.cursor()
+ cr.execute(f"select id, type_id, description from {table}")
+
+ for row in cr.fetchall():
+ typeobj = types[row['type_id']]
+ obj = typeof(row['id'], types[row['type_id']], row['description'])
+
+ target[obj.id] = obj
+
+ def status(self, id):
+ return self.statuses[id]
+
+ def error(self, id):
+ return self.errors[id]