REPLines: Add scenario support.

scenarios
Pierre-Antoine Rouby 2024-09-06 14:19:58 +02:00
parent e43c20c1e6
commit 5e3dbc18c3
2 changed files with 49 additions and 12 deletions

View File

@ -30,8 +30,11 @@ class REPLine(SQLSubModel):
def __init__(self, id: int = -1, enabled=True, def __init__(self, id: int = -1, enabled=True,
name="", line="", solvers=set(), name="", line="", solvers=set(),
status=None): status=None, owner_scenario=-1):
super(REPLine, self).__init__(id) super(REPLine, self).__init__(
id, status=status,
owner_scenario=owner_scenario
)
self._status = status self._status = status
@ -111,6 +114,7 @@ class REPLine(SQLSubModel):
CREATE TABLE rep_lines{ext} ( CREATE TABLE rep_lines{ext} (
{cls.create_db_add_pamhyr_id()}, {cls.create_db_add_pamhyr_id()},
enabled BOOLEAN NOT NULL, enabled BOOLEAN NOT NULL,
deleted BOOLEAN NOT NULL DEFAULT FALSE,
name TEXT NOT NULL, name TEXT NOT NULL,
line TEXT NOT NULL, line TEXT NOT NULL,
solvers TEXT NOT NULL, solvers TEXT NOT NULL,
@ -132,6 +136,13 @@ class REPLine(SQLSubModel):
else: else:
cls._db_update_to_0_0_14(execute, data) cls._db_update_to_0_0_14(execute, data)
if major == "0" and minor == "1":
if release < 2:
execute(
"ALTER TABLE rep_lines " +
"ADD COLUMN deleted BOOLEAN NOT NULL DEFAULT FALSE"
)
return True return True
@classmethod @classmethod
@ -155,10 +166,18 @@ class REPLine(SQLSubModel):
@classmethod @classmethod
def _db_load(cls, execute, data=None): def _db_load(cls, execute, data=None):
new = [] new = []
scenario = data["scenario"]
loaded = data['loaded_pid']
if scenario is None:
return new
table = execute( table = execute(
"SELECT pamhyr_id, enabled, name, line, solvers " + "SELECT pamhyr_id, enabled, deleted, name, line, "+
"FROM rep_lines" "solvers, scenario " +
"FROM rep_lines " +
f"WHERE scenario = {scenario.id} " +
f"AND pamhyr_id NOT IN ({', '.join(map(str, loaded))})"
) )
for row in table: for row in table:
@ -166,32 +185,47 @@ class REPLine(SQLSubModel):
id = next(it) id = next(it)
enabled = (next(it) == 1) enabled = (next(it) == 1)
deleted = (next(it) == 1)
name = next(it) name = next(it)
line = next(it) line = next(it)
solvers = set(next(it).split(";;")) solvers = set(next(it).split(";;"))
owner_scenario = next(it)
f = cls( f = cls(
id=id, enabled=enabled, name=name, line=line, id=id, enabled=enabled,
solvers=solvers, status=data['status'] name=name, line=line, solvers=solvers,
status=data['status'], owner_scenario=owner_scenario
) )
if deleted:
f.set_as_deleted()
loaded.add(id)
new.append(f) new.append(f)
data["scenario"] = scenario.parent
new += cls._db_load(execute, data)
data["scenario"] = scenario
return new return new
def _db_save(self, execute, data=None): def _db_save(self, execute, data=None):
if not self.must_be_saved():
return True
solvers = ";;".join(self._solvers) solvers = ";;".join(self._solvers)
sql = ( execute(
"INSERT INTO " + "INSERT INTO " +
"rep_lines(pamhyr_id, enabled, name, line, solvers) " + "rep_lines(pamhyr_id, enabled, deleted, " +
"name, line, solvers, scenario) " +
"VALUES (" + "VALUES (" +
f"{self._pamhyr_id}, {self._enabled}, " + f"{self._pamhyr_id}, {self._enabled}, " +
f"{self._db_format(self.is_deleted())}, " +
f"'{self._db_format(self._name)}', " + f"'{self._db_format(self._name)}', " +
f"'{self._db_format(self._line)}', " + f"'{self._db_format(self._line)}', " +
f"'{self._db_format(solvers)}'" + f"'{self._db_format(solvers)}', " +
f"{self._status.scenario_id}" +
")" ")"
) )
execute(sql)
return True return True

View File

@ -19,7 +19,7 @@
from tools import trace, timer from tools import trace, timer
from Model.Except import NotImplementedMethodeError from Model.Except import NotImplementedMethodeError
from Model.Tools.PamhyrList import PamhyrModelList from Model.Tools.PamhyrListExt import PamhyrModelList
from Model.REPLine.REPLine import REPLine from Model.REPLine.REPLine import REPLine
@ -38,7 +38,10 @@ class REPLineList(PamhyrModelList):
ok = True ok = True
# Delete previous data # Delete previous data
execute("DELETE FROM rep_lines") execute(
"DELETE FROM rep_lines " +
f"WHERE scenario = {self._status.scenario_id}"
)
for af in self._lst: for af in self._lst:
ok &= af._db_save(execute, data) ok &= af._db_save(execute, data)