REPFiles: Add Scenarios and 'pamhyr_id' and update DB to 0.0.14.

scenarios
Pierre-Antoine Rouby 2024-07-22 14:16:42 +02:00
parent 4271fbb85f
commit 9c9fcc3dd8
3 changed files with 36 additions and 20 deletions

View File

@ -22,7 +22,6 @@ from tools import trace, timer
from Model.Tools.PamhyrDB import SQLSubModel from Model.Tools.PamhyrDB import SQLSubModel
from Model.Except import NotImplementedMethodeError from Model.Except import NotImplementedMethodeError
from Model.Scenario import Scenario from Model.Scenario import Scenario

View File

@ -22,31 +22,24 @@ from tools import trace, timer
from Model.Tools.PamhyrDB import SQLSubModel from Model.Tools.PamhyrDB import SQLSubModel
from Model.Except import NotImplementedMethodeError from Model.Except import NotImplementedMethodeError
from Model.Scenario import Scenario
class REPLine(SQLSubModel): class REPLine(SQLSubModel):
_sub_classes = [] _sub_classes = []
_id_cnt = 0
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):
super(REPLine, self).__init__() super(REPLine, self).__init__(id)
if id == -1:
self.id = REPLine._id_cnt
else:
self.id = id
self._status = status self._status = status
self._enabled = enabled self._enabled = enabled
self._name = f"Line{self.id}" if name == "" else name self._name = f"Line #{self._pamhyr_id}" if name == "" else name
self._line = line self._line = line
self._solvers = solvers self._solvers = solvers
REPLine._id_cnt = max(id, REPLine._id_cnt+1)
def __getitem__(self, key): def __getitem__(self, key):
value = None value = None
@ -113,14 +106,17 @@ class REPLine(SQLSubModel):
self._status.modified() self._status.modified()
@classmethod @classmethod
def _db_create(cls, execute): def _db_create(cls, execute, ext=""):
execute(""" execute(f"""
CREATE TABLE rep_lines( CREATE TABLE rep_lines{ext} (
id INTEGER NOT NULL PRIMARY KEY, {cls.create_db_add_pamhyr_id()},
enabled BOOLEAN NOT NULL, enabled BOOLEAN NOT NULL,
name TEXT NOT NULL, name TEXT NOT NULL,
line TEXT NOT NULL, line TEXT NOT NULL,
solvers TEXT NOT NULL solvers TEXT NOT NULL,
{Scenario.create_db_add_scenario()},
{Scenario.create_db_add_scenario_fk()},
PRIMARY KEY(pamhyr_id, scenario)
) )
""") """)
@ -133,14 +129,35 @@ class REPLine(SQLSubModel):
if int(release) < 9: if int(release) < 9:
cls._db_create(execute) cls._db_create(execute)
if 9 < int(release) < 14:
cls._db_update_to_0_0_14(execute)
return True return True
@classmethod
def _db_update_to_0_0_14(cls, execute):
table = "rep_lines"
cls.update_db_add_pamhyr_id(execute, table)
Scenario.update_db_add_scenario(execute, table)
cls._db_create(execute, ext="_tmp")
execute(
f"INSERT INTO {table}_tmp " +
"(pamhyr_id, enabled, name, line, solvers, scenario) " +
"SELECT pamhyr_id, enabled, name, line, solvers, scenario " +
f"FROM {table}"
)
execute(f"DROP TABLE {table}")
execute(f"ALTER TABLE {table}_tmp RENAME TO {table}")
@classmethod @classmethod
def _db_load(cls, execute, data=None): def _db_load(cls, execute, data=None):
new = [] new = []
table = execute( table = execute(
"SELECT id, enabled, name, line, solvers " + "SELECT pamhyr_id, enabled, name, line, solvers " +
"FROM rep_lines" "FROM rep_lines"
) )
@ -167,9 +184,9 @@ class REPLine(SQLSubModel):
sql = ( sql = (
"INSERT INTO " + "INSERT INTO " +
"rep_lines(id, enabled, name, line, solvers) " + "rep_lines(pamhyr_id, enabled, name, line, solvers) " +
"VALUES (" + "VALUES (" +
f"{self.id}, {self._enabled}, " + f"{self._pamhyr_id}, {self._enabled}, " +
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)}'" +

View File

@ -44,7 +44,7 @@ class Study(SQLModel):
def __init__(self, filename=None, init_new=True): def __init__(self, filename=None, init_new=True):
# Metadata # Metadata
self._version = "0.0.13" self._version = "0.0.14"
self.creation_date = datetime.now() self.creation_date = datetime.now()
self.last_modification_date = datetime.now() self.last_modification_date = datetime.now()
self.last_save_date = datetime.now() self.last_save_date = datetime.now()