From 62a1726ef13e9b7e57d96bebab3ea08b52576535 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Rouby Date: Fri, 19 Jul 2024 16:29:47 +0200 Subject: [PATCH] PamhyrDB, PamhyrID, AddFile: Fix some bugs. --- src/Model/AdditionalFile/AddFile.py | 38 ++++++++++++++++++----------- src/Model/Scenario.py | 13 ++++++++++ src/Model/Study.py | 4 +-- src/Model/Tools/PamhyrID.py | 29 ++++++++++++---------- 4 files changed, 55 insertions(+), 29 deletions(-) diff --git a/src/Model/AdditionalFile/AddFile.py b/src/Model/AdditionalFile/AddFile.py index c77bbb3f..2432805c 100644 --- a/src/Model/AdditionalFile/AddFile.py +++ b/src/Model/AdditionalFile/AddFile.py @@ -28,27 +28,19 @@ from Model.Scenario import Scenario class AddFile(SQLSubModel): _sub_classes = [] - _id_cnt = 0 def __init__(self, id: int = -1, enabled=True, name="", path="", text="", status=None): - super(AddFile, self).__init__() - - if id == -1: - self.id = AddFile._id_cnt - else: - self.id = id + super(AddFile, self).__init__(id) self._status = status self._enabled = enabled - self._name = f"File {self.id}" if name == "" else name + self._name = f"File #{self._pamhyr_id}" if name == "" else name self._path = path self._text = text - AddFile._id_cnt = max(id, AddFile._id_cnt+1) - def __getitem__(self, key): value = None @@ -115,9 +107,9 @@ class AddFile(SQLSubModel): self._status.modified() @classmethod - def _db_create(cls, execute): + def _db_create(cls, execute, ext=""): execute(f""" - CREATE TABLE additional_files( + CREATE TABLE additional_files{ext} ( {cls.create_db_add_pamhyr_id()}, enabled BOOLEAN NOT NULL, name TEXT NOT NULL, @@ -141,10 +133,28 @@ class AddFile(SQLSubModel): cls._db_create(execute) if release < 13: - cls.update_db_add_pamhyr_id(execute) + cls._db_update_to_0_0_13(execute) return True + @classmethod + def _db_update_to_0_0_13(cls, execute): + table = "additional_files" + + cls.update_db_add_pamhyr_id(execute, table) + Scenario.update_db_add_scenario(execute, table) + + cls._db_create(execute, ext="_tmp") + execute( + "INSERT INTO additional_files_tmp " + + "(pamhyr_id, enabled, name, path, text, scenario) " + + "SELECT pamhyr_id, enabled, name, path, text, scenario " + + "FROM additional_files" + ) + + execute(f"DROP TABLE {table}") + execute(f"ALTER TABLE {table}_tmp RENAME TO {table}") + @classmethod def _db_load(cls, execute, data=None): new = [] @@ -177,7 +187,7 @@ class AddFile(SQLSubModel): "INSERT INTO " + "additional_files(pamhyr_id, enabled, name, path, text) " + "VALUES (" + - f"{self.id}, {self._enabled}, " + + f"{self._pamhyr_id}, {self._enabled}, " + f"'{self._db_format(self._name)}', " + f"'{self._db_format(self._path)}', " + f"'{self._db_format(self._text)}'" + diff --git a/src/Model/Scenario.py b/src/Model/Scenario.py index f522515b..95c571fd 100644 --- a/src/Model/Scenario.py +++ b/src/Model/Scenario.py @@ -95,6 +95,19 @@ class Scenario(SQLSubModel): return True + @classmethod + def update_db_add_scenario(cls, execute, table): + execute( + f"ALTER TABLE {table} " + + "ADD COLUMN scenario INTEGER NOT NULL DEFAULT 0" + ) + + execute( + f"ALTER TABLE {table} " + + "ADD CONSTRAINT fk_scenario FOREIGN KEY (scenario) " + + "REFERENCES scenario(id)" + ) + @classmethod def _db_load(cls, execute, data=None): scenarios = {} diff --git a/src/Model/Study.py b/src/Model/Study.py index 99236463..14168af0 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.12" + self._version = "0.0.13" self.creation_date = datetime.now() self.last_modification_date = datetime.now() self.last_save_date = datetime.now() @@ -322,7 +322,7 @@ class Study(SQLModel): commit=True ) - new.scenarios = Scenario._db_load( + new.scenarios = Scenarios._db_load( sql_exec, data=data ) diff --git a/src/Model/Tools/PamhyrID.py b/src/Model/Tools/PamhyrID.py index 3a77a6d2..4cffab93 100644 --- a/src/Model/Tools/PamhyrID.py +++ b/src/Model/Tools/PamhyrID.py @@ -26,10 +26,11 @@ class PamhyrID(object): self._pamhyr_id = self.get_new_pamhyr_id(id) - def get_new_pamhyr_id(self, id): + @classmethod + def get_new_pamhyr_id(cls, id): pid = id - if pid == -1: + if pid < 0: pid = PamhyrID._pamhyr_id_cnt PamhyrID._pamhyr_id_cnt = max( @@ -37,6 +38,8 @@ class PamhyrID(object): PamhyrID._pamhyr_id_cnt + 1 ) + return pid + @property def pamhyr_id(self): return self._pamhyr_id @@ -46,22 +49,22 @@ class PamhyrID(object): autoset=True): execute( f"ALTER TABLE {table} " + - f"ADD COLUMN pamhyr_id INTEGER" + f"ADD COLUMN pamhyr_id INTEGER NOT NULL DEFAULT -1" ) - if not autoset: - return True + if autoset: + table = execute(f"SELECT id FROM {table}") - table = execute(f"SELECT id FROM {table}") + for row in table: + pid = cls.get_new_pamhyr_id(-1) - for row in table: - pid = cls.get_new_pamhyr_id(-1) + execute( + f"UPDATE {table} " + + f"SET pamhyr_id = {pid} " + + f"WHERE id = {row[0]}" + ) - execute( - f"UPDATE {table} " + - f"SET pamhyr_id = {pid} " + - f"WHERE id = {row[0]}" - ) + return True @classmethod def create_db_add_pamhyr_id(cls):