Config: Add SQLite command abstraction.

mesh
Pierre-Antoine Rouby 2023-06-27 09:48:24 +02:00
parent a8321e0ef0
commit 25c39ac4e6
2 changed files with 43 additions and 41 deletions

View File

@ -22,17 +22,15 @@ class Config(SQL):
super(Config, self).__init__(db = self.filename) super(Config, self).__init__(db = self.filename)
def _create(self): def _create(self):
cur = self._db.cursor()
# Info (meta data) # Info (meta data)
cur.execute("CREATE TABLE info(key TEXT NOT NULL UNIQUE, value TEXT NOT NULL)") self.execute("CREATE TABLE info(key TEXT NOT NULL UNIQUE, value TEXT NOT NULL)")
cur.execute(f"INSERT INTO info VALUES ('version', '{self._version}')") self.execute(f"INSERT INTO info VALUES ('version', '{self._version}')")
# Key / Value (data) # Key / Value (data)
cur.execute("CREATE TABLE data(key TEXT NOT NULL UNIQUE, value TEXT NOT NULL)") self.execute("CREATE TABLE data(key TEXT NOT NULL UNIQUE, value TEXT NOT NULL)")
# Solver # Solver
cur.execute(""" self.execute("""
CREATE TABLE solver( CREATE TABLE solver(
type TEXT NOT NULL, type TEXT NOT NULL,
name TEXT NOT NULL UNIQUE, name TEXT NOT NULL UNIQUE,
@ -49,7 +47,7 @@ class Config(SQL):
""") """)
# Stricklers # Stricklers
cur.execute(""" self.execute("""
CREATE TABLE stricklers( CREATE TABLE stricklers(
name TEXT NOT NULL UNIQUE, name TEXT NOT NULL UNIQUE,
comment TEXT NOT NULL, comment TEXT NOT NULL,
@ -58,20 +56,18 @@ class Config(SQL):
) )
""") """)
self._db.commit() self.commit()
def _update(self): def _update(self):
cur = self._db.cursor() version = self.execute(f"SELECT value FROM info WHERE key='version'")
version = cur.execute(f"SELECT value FROM info WHERE key='version'")
if version.fetchone()[0] != self._version: if version.fetchone()[0] != self._version:
print("update") print("update")
def _load_solver(self): def _load_solver(self):
cur = self._db.cursor()
self._solvers = [] self._solvers = []
solvers = cur.execute("SELECT * FROM solver") solvers = self.execute("SELECT * FROM solver")
for solver in solvers.fetchall(): for solver in solvers.fetchall():
solver_type = solver[0] solver_type = solver[0]
ctor = solver_type_list[solver_type] ctor = solver_type_list[solver_type]
@ -88,11 +84,10 @@ class Config(SQL):
self._solvers.append(new) self._solvers.append(new)
def _load_stricklers(self): def _load_stricklers(self):
cur = self._db.cursor()
self.stricklers = StricklersList() self.stricklers = StricklersList()
id = 0 id = 0
stricklers = cur.execute("SELECT * FROM stricklers") stricklers = self.execute("SELECT * FROM stricklers")
for strickler in stricklers.fetchall(): for strickler in stricklers.fetchall():
new = Stricklers() new = Stricklers()
new._name = strickler[0] new._name = strickler[0]
@ -104,45 +99,42 @@ class Config(SQL):
id += 1 id += 1
def _load(self): def _load(self):
cur = self._db.cursor()
# Meshing tool # Meshing tool
v = cur.execute("SELECT value FROM data WHERE key='meshing_tool'") v = self.execute("SELECT value FROM data WHERE key='meshing_tool'")
self.meshing_tool = v.fetchone()[0] self.meshing_tool = v.fetchone()[0]
# Const # Const
v = cur.execute("SELECT value FROM data WHERE key='segment'") v = self.execute("SELECT value FROM data WHERE key='segment'")
self.segment = int(v.fetchone()[0]) self.segment = int(v.fetchone()[0])
v = cur.execute("SELECT value FROM data WHERE key='max_listing'") v = self.execute("SELECT value FROM data WHERE key='max_listing'")
self.max_listing = int(v.fetchone()[0]) self.max_listing = int(v.fetchone()[0])
# Backup # Backup
v = cur.execute("SELECT value FROM data WHERE key='backup_enable'") v = self.execute("SELECT value FROM data WHERE key='backup_enable'")
self.backup_enable = v.fetchone()[0] == "True" self.backup_enable = v.fetchone()[0] == "True"
v = cur.execute("SELECT value FROM data WHERE key='backup_path'") v = self.execute("SELECT value FROM data WHERE key='backup_path'")
self.backup_path = v.fetchone()[0] self.backup_path = v.fetchone()[0]
v = cur.execute("SELECT value FROM data WHERE key='backup_frequence'") v = self.execute("SELECT value FROM data WHERE key='backup_frequence'")
self.backup_frequence = v.fetchone()[0] self.backup_frequence = v.fetchone()[0]
v = cur.execute("SELECT value FROM data WHERE key='backup_max'") v = self.execute("SELECT value FROM data WHERE key='backup_max'")
self.backup_max = int(v.fetchone()[0]) self.backup_max = int(v.fetchone()[0])
# Editor # Editor
v = cur.execute("SELECT value FROM data WHERE key='editor'") v = self.execute("SELECT value FROM data WHERE key='editor'")
self.editor = v.fetchone()[0] self.editor = v.fetchone()[0]
# Languages # Languages
v = cur.execute("SELECT value FROM data WHERE key='lang'") v = self.execute("SELECT value FROM data WHERE key='lang'")
self.lang = v.fetchone()[0] self.lang = v.fetchone()[0]
self._load_solver() self._load_solver()
self._load_stricklers() self._load_stricklers()
def _save_solver(self): def _save_solver(self):
cur = self._db.cursor() self.execute(f"DELETE FROM solver")
cur.execute(f"DELETE FROM solver")
for solver in self.solvers: for solver in self.solvers:
cur.execute(f""" self.execute(f"""
INSERT INTO solver VALUES ( INSERT INTO solver VALUES (
'{solver._type}', '{solver._type}',
'{solver._name}', '{solver._name}',
@ -156,14 +148,13 @@ class Config(SQL):
) )
""") """)
self._db.commit() self.commit()
def _save_stricklers(self): def _save_stricklers(self):
cur = self._db.cursor() self.execute(f"DELETE FROM stricklers")
cur.execute(f"DELETE FROM stricklers")
for stricklers in self.stricklers.stricklers: for stricklers in self.stricklers.stricklers:
cur.execute(f""" self.execute(f"""
INSERT INTO stricklers VALUES ( INSERT INTO stricklers VALUES (
'{stricklers._name}', '{stricklers._name}',
'{stricklers._comment}', '{stricklers._comment}',
@ -172,10 +163,9 @@ class Config(SQL):
) )
""") """)
self._db.commit() self.commit()
def _save(self): def _save(self):
cur = self._db.cursor()
data = { data = {
"segment": self.segment, "segment": self.segment,
"meshing_tool": self.meshing_tool, "meshing_tool": self.meshing_tool,
@ -189,10 +179,10 @@ class Config(SQL):
} }
for key in data: for key in data:
cur.execute(f"INSERT OR IGNORE INTO data VALUES ('{key}', '{data[key]}')") self.execute(f"INSERT OR IGNORE INTO data VALUES ('{key}', '{data[key]}')")
cur.execute(f"UPDATE data SET value='{data[key]}' WHERE key='{key}'") self.execute(f"UPDATE data SET value='{data[key]}' WHERE key='{key}'")
self._db.commit() self.commit()
self._save_solver() self._save_solver()
self._save_stricklers() self._save_stricklers()

View File

@ -167,7 +167,10 @@ def old_pamhyr_date_to_timestamp(date:str):
class SQL(object): class SQL(object):
def __init__(self, db = "db.sqlite3"): def __init__(self, db = "db.sqlite3"):
exists = Path(db).exists() exists = Path(db).exists()
self._db = sqlite3.connect(db) self._db = sqlite3.connect(db)
self._cur = self._db.cursor()
if not exists: if not exists:
self._create() # Create db self._create() # Create db
self._save() # Save self._save() # Save
@ -175,14 +178,23 @@ class SQL(object):
self._update() # Update db scheme if necessary self._update() # Update db scheme if necessary
self._load() # Load data self._load() # Load data
def commit(self):
self._db.commit()
def execute(self, cmd, commit = False):
value = self._cur.execute(cmd)
if commit:
self._db.commit()
return value
def _create(self): def _create(self):
print("Create") print("TODO: Create")
def _update(self): def _update(self):
print("Update") print("TODO: Update")
def _save(self): def _save(self):
print("Save") print("TODO: Save")
def _load(self): def _load(self):
print("Load") print("TODO: Load")