From 3a78d6d6f725bffa414e27d2da82994eb1b357dd Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Rouby Date: Thu, 11 Sep 2025 14:39:28 +0200 Subject: [PATCH] MainWindow: Create a study file copy in current dire before update. --- src/Model/Study.py | 3 ++- src/View/MainWindow.py | 9 ++++++--- src/tools.py | 20 ++++++++++++++++++++ 3 files changed, 28 insertions(+), 4 deletions(-) diff --git a/src/Model/Study.py b/src/Model/Study.py index f5636241..6b96cc9e 100644 --- a/src/Model/Study.py +++ b/src/Model/Study.py @@ -37,6 +37,8 @@ logger = logging.getLogger() class Study(SQLModel): + _version = "0.2.0" + _sub_classes = [ Scenario, River, @@ -44,7 +46,6 @@ class Study(SQLModel): def __init__(self, filename=None, init_new=True): # Metadata - self._version = "0.2.0" self.creation_date = datetime.now() self.last_modification_date = datetime.now() self.last_save_date = datetime.now() diff --git a/src/View/MainWindow.py b/src/View/MainWindow.py index 2e4ce1e7..b0d8a49e 100644 --- a/src/View/MainWindow.py +++ b/src/View/MainWindow.py @@ -31,7 +31,7 @@ from platformdirs import user_cache_dir from Solver.AdisTS import AdisTS from Solver.Mage import Mage8 -from tools import logger_exception +from tools import logger_exception, pamhyr_db_need_update from PyQt5 import QtGui from PyQt5.QtGui import ( @@ -1087,10 +1087,13 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit): dialog.setDirectory(os.path.dirname(self.conf.last_study)) if dialog.exec_(): - file_name = dialog.selectedFiles() + file_name = dialog.selectedFiles()[0] + + if pamhyr_db_need_update(file_name, Study._version): + shutil.copyfile(file_name, file_name + ".old") def fn(): - self._tmp_study = Study.open(file_name[0]) + self._tmp_study = Study.open(file_name) dlg = WaitingDialog( payload_fn=fn, diff --git a/src/tools.py b/src/tools.py index 275eea6f..02a783de 100644 --- a/src/tools.py +++ b/src/tools.py @@ -19,6 +19,7 @@ import os import time import logging +import sqlite3 import traceback from datetime import datetime, timedelta @@ -456,3 +457,22 @@ def _parse_word_up_to_next_sep(words, sep=" "): rest = words[i+1:] return word, rest + + +###### +# DB # +###### + +def pamhyr_db_need_update(db_file, expected_version): + db = sqlite3.connect(db_file, check_same_thread=False) + cur = db.cursor() + + data = cur.execute( + "SELECT value FROM info WHERE key='version'" + ).fetchall() + + db.close() + if len(data) == 0: + return True + + return expected_version != data[0]