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]