From 9c9fcc3dd88d5c86039c0b72ffdde2a22f47cde2 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Rouby Date: Mon, 22 Jul 2024 14:16:42 +0200 Subject: [PATCH] REPFiles: Add Scenarios and 'pamhyr_id' and update DB to 0.0.14. --- src/Model/AdditionalFile/AddFile.py | 1 - src/Model/REPLine/REPLine.py | 53 +++++++++++++++++++---------- src/Model/Study.py | 2 +- 3 files changed, 36 insertions(+), 20 deletions(-) diff --git a/src/Model/AdditionalFile/AddFile.py b/src/Model/AdditionalFile/AddFile.py index 608fd8c3..f87abc69 100644 --- a/src/Model/AdditionalFile/AddFile.py +++ b/src/Model/AdditionalFile/AddFile.py @@ -22,7 +22,6 @@ from tools import trace, timer from Model.Tools.PamhyrDB import SQLSubModel from Model.Except import NotImplementedMethodeError - from Model.Scenario import Scenario diff --git a/src/Model/REPLine/REPLine.py b/src/Model/REPLine/REPLine.py index 336260f4..a803e8db 100644 --- a/src/Model/REPLine/REPLine.py +++ b/src/Model/REPLine/REPLine.py @@ -22,31 +22,24 @@ from tools import trace, timer from Model.Tools.PamhyrDB import SQLSubModel from Model.Except import NotImplementedMethodeError +from Model.Scenario import Scenario class REPLine(SQLSubModel): _sub_classes = [] - _id_cnt = 0 def __init__(self, id: int = -1, enabled=True, name="", line="", solvers=set(), status=None): - super(REPLine, self).__init__() - - if id == -1: - self.id = REPLine._id_cnt - else: - self.id = id + super(REPLine, self).__init__(id) self._status = status 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._solvers = solvers - REPLine._id_cnt = max(id, REPLine._id_cnt+1) - def __getitem__(self, key): value = None @@ -113,14 +106,17 @@ class REPLine(SQLSubModel): self._status.modified() @classmethod - def _db_create(cls, execute): - execute(""" - CREATE TABLE rep_lines( - id INTEGER NOT NULL PRIMARY KEY, + def _db_create(cls, execute, ext=""): + execute(f""" + CREATE TABLE rep_lines{ext} ( + {cls.create_db_add_pamhyr_id()}, enabled BOOLEAN NOT NULL, name 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: cls._db_create(execute) + if 9 < int(release) < 14: + cls._db_update_to_0_0_14(execute) + 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 def _db_load(cls, execute, data=None): new = [] table = execute( - "SELECT id, enabled, name, line, solvers " + + "SELECT pamhyr_id, enabled, name, line, solvers " + "FROM rep_lines" ) @@ -167,9 +184,9 @@ class REPLine(SQLSubModel): sql = ( "INSERT INTO " + - "rep_lines(id, enabled, name, line, solvers) " + + "rep_lines(pamhyr_id, enabled, name, line, solvers) " + "VALUES (" + - f"{self.id}, {self._enabled}, " + + f"{self._pamhyr_id}, {self._enabled}, " + f"'{self._db_format(self._name)}', " + f"'{self._db_format(self._line)}', " + f"'{self._db_format(solvers)}'" + diff --git a/src/Model/Study.py b/src/Model/Study.py index 963d2043..8267470e 100644 --- a/src/Model/Study.py +++ b/src/Model/Study.py @@ -44,7 +44,7 @@ class Study(SQLModel): def __init__(self, filename=None, init_new=True): # Metadata - self._version = "0.0.13" + self._version = "0.0.14" self.creation_date = datetime.now() self.last_modification_date = datetime.now() self.last_save_date = datetime.now()