From 7274ff5e2d4e5f3ac1438f524ebf5192544cfc68 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Rouby Date: Wed, 21 Aug 2024 15:10:39 +0200 Subject: [PATCH] Pamhyr: Some fixe for db update to 0.1.1. --- .../Basic/HydraulicStructures.py | 3 +-- src/Model/HydraulicStructures/Basic/Value.py | 3 +-- .../HydraulicStructures.py | 5 ++-- .../InitialConditions/InitialConditions.py | 20 +++++++++++--- src/Model/Reservoir/Reservoir.py | 26 +++++++++---------- src/Solver/Mage.py | 5 +++- src/View/InitialConditions/Table.py | 14 ++++++---- 7 files changed, 47 insertions(+), 29 deletions(-) diff --git a/src/Model/HydraulicStructures/Basic/HydraulicStructures.py b/src/Model/HydraulicStructures/Basic/HydraulicStructures.py index 6572bd1e..400308a4 100644 --- a/src/Model/HydraulicStructures/Basic/HydraulicStructures.py +++ b/src/Model/HydraulicStructures/Basic/HydraulicStructures.py @@ -87,6 +87,7 @@ class BasicHS(SQLSubModel): hs = data['id2pid']['hydraulic_structures'] cls.update_db_add_pamhyr_id(execute, table, data) + cls._db_update_to_0_1_0_set_hs_pid(execute, table, hs) Scenario.update_db_add_scenario(execute, table) cls._db_create(execute, ext="_tmp") @@ -101,8 +102,6 @@ class BasicHS(SQLSubModel): execute(f"DROP TABLE {table}") execute(f"ALTER TABLE {table}_tmp RENAME TO {table}") - cls._db_update_to_0_1_0_set_hs_pid(execute, table, hs) - @classmethod def _db_update_to_0_1_0_set_hs_pid(cls, execute, table, hs): els = execute( diff --git a/src/Model/HydraulicStructures/Basic/Value.py b/src/Model/HydraulicStructures/Basic/Value.py index fd5b2727..1d4c870d 100644 --- a/src/Model/HydraulicStructures/Basic/Value.py +++ b/src/Model/HydraulicStructures/Basic/Value.py @@ -71,6 +71,7 @@ class BHSValue(SQLSubModel): bhs = data['id2pid']['hydraulic_structures_basic'] cls.update_db_add_pamhyr_id(execute, table, data) + cls._db_update_to_0_1_0_set_bhs_pid(execute, table, bhs) Scenario.update_db_add_scenario(execute, table) cls._db_create(execute, ext="_tmp") @@ -85,8 +86,6 @@ class BHSValue(SQLSubModel): execute(f"DROP TABLE {table}") execute(f"ALTER TABLE {table}_tmp RENAME TO {table}") - cls._db_update_to_0_1_0_set_bhs_pid(execute, table, bhs) - @classmethod def _db_update_to_0_1_0_set_bhs_pid(cls, execute, table, bhs): els = execute( diff --git a/src/Model/HydraulicStructures/HydraulicStructures.py b/src/Model/HydraulicStructures/HydraulicStructures.py index 0b36c408..1c93441e 100644 --- a/src/Model/HydraulicStructures/HydraulicStructures.py +++ b/src/Model/HydraulicStructures/HydraulicStructures.py @@ -113,11 +113,12 @@ class HydraulicStructure(SQLSubModel): table = "hydraulic_structures" reachs = data['id2pid']['river_reach'] + cls.update_db_add_pamhyr_id(execute, table, data) + cls._db_update_to_0_1_0_set_reach_pid(execute, table, reachs) cls._db_update_to_0_1_1( execute, data, origin_version="0.0.*" ) - cls.update_db_add_pamhyr_id(execute, table, data) Scenario.update_db_add_scenario(execute, table) cls._db_create(execute, ext="_tmp") @@ -135,8 +136,6 @@ class HydraulicStructure(SQLSubModel): execute(f"DROP TABLE {table}") execute(f"ALTER TABLE {table}_tmp RENAME TO {table}") - cls._db_update_to_0_1_0_set_reach_pid(execute, table, reachs) - @classmethod def _db_update_to_0_1_0_set_reach_pid(cls, execute, table, reachs): els = execute( diff --git a/src/Model/InitialConditions/InitialConditions.py b/src/Model/InitialConditions/InitialConditions.py index ce969516..9e56df46 100644 --- a/src/Model/InitialConditions/InitialConditions.py +++ b/src/Model/InitialConditions/InitialConditions.py @@ -100,11 +100,12 @@ class Data(SQLSubModel): table = "initial_conditions" reachs = data['id2pid']['river_reach'] + cls.update_db_add_pamhyr_id(execute, table, data) + cls._db_update_to_0_1_0_set_reach_pid(execute, table, reachs) cls._db_update_to_0_1_1( execute, data, origin_version="0.0.*" ) - cls.update_db_add_pamhyr_id(execute, table, data) Scenario.update_db_add_scenario(execute, table) cls._db_create(execute, ext="_tmp") @@ -121,8 +122,6 @@ class Data(SQLSubModel): execute(f"DROP TABLE {table}") execute(f"ALTER TABLE {table}_tmp RENAME TO {table}") - cls._db_update_to_0_1_0_set_reach_pid(execute, table, reachs) - @classmethod def _db_update_to_0_1_1(cls, execute, data, origin_version="0.1.0"): @@ -149,6 +148,7 @@ class Data(SQLSubModel): ) new = [] + ok = True for row in table: it = iter(row) @@ -169,6 +169,14 @@ class Data(SQLSubModel): None ) + if section is None: + logger.debug( + f"Section ID {section_id} do not exist in reach " + + f"{reach.name} ({reach.pamhyr_id})" + ) + ok = False + continue + d = cls( id=pid, reach=data["reach"], @@ -182,6 +190,12 @@ class Data(SQLSubModel): new.append(d) + if not ok: + logger.info( + "Please regenerate/defined the inital conditions " + + f"for reach {reach.name} ({reach.pamhyr_id})" + ) + return new def _db_save(self, execute, data=None): diff --git a/src/Model/Reservoir/Reservoir.py b/src/Model/Reservoir/Reservoir.py index 1b1b082b..d4e7a60b 100644 --- a/src/Model/Reservoir/Reservoir.py +++ b/src/Model/Reservoir/Reservoir.py @@ -59,7 +59,7 @@ class Data(SQLSubModel): major, minor, release = version.strip().split(".") if major == minor == "0": - if 5 < int(release): + if int(release) > 5: cls._db_update_to_0_1_0(execute, data) return cls._update_submodel(execute, version, data) @@ -77,7 +77,7 @@ class Data(SQLSubModel): cls._db_create(execute, ext="_tmp") execute( - f"INSERT INTO {table} " + + f"INSERT INTO {table}_tmp " + "(pamhyr_id, ind, elevation, surface, reservoir, scenario) " + "SELECT pamhyr_id, ind, elevation, surface, reservoir, scenario " + f"FROM {table}" @@ -143,7 +143,7 @@ class Data(SQLSubModel): ind = data["ind"] elevation = self._db_format(str(self[0])) surface = self._db_format(str(self[1])) - bc = data["bc"] + reservoir = data["reservoir"] execute( "INSERT INTO " + @@ -202,8 +202,8 @@ class Reservoir(SQLSubModel): if int(release) < 5: cls._db_create(execute) return True - else: - cls._db_update_to_0_1_0(execute, data) + + cls._db_update_to_0_1_0(execute, data) return cls._update_submodel(execute, version, data) @@ -212,15 +212,15 @@ class Reservoir(SQLSubModel): table = "reservoir" nodes = data['id2pid']['river_node'] - cls.update_db_add_pamhyr_id( - execute, table, - data=data - ) + cls.update_db_add_pamhyr_id(execute, table, data=data) + cls._db_update_to_0_1_0_set_node_pid(execute, table, nodes) Scenario.update_db_add_scenario(execute, table) + print(execute(f"SELECT * FROM {table}")) + cls._db_create(execute, ext="_tmp") execute( - f"INSERT INTO {table} " + + f"INSERT INTO {table}_tmp " + "(pamhyr_id, name, node, scenario) " + "SELECT pamhyr_id, name, node, scenario " + f"FROM {table}" @@ -229,8 +229,6 @@ class Reservoir(SQLSubModel): execute(f"DROP TABLE {table}") execute(f"ALTER TABLE {table}_tmp RENAME TO {table}") - cls._db_update_to_0_1_0_set_node_pid(execute, table, nodes) - @classmethod def _db_load(cls, execute, data=None): new = [] @@ -290,6 +288,8 @@ class Reservoir(SQLSubModel): ) execute(sql) + data["reservoir"] = self + ind = 0 for d in self._data: data["ind"] = ind @@ -387,7 +387,7 @@ class Reservoir(SQLSubModel): def sort(self, _reverse=False, key=None): if key is None: - self._data.sort(reverse=_reverse) + self._data.sort(reverse=_reverse, key=lambda d: d[0]) else: self._data.sort(reverse=_reverse, key=key) self._status.modified() diff --git a/src/Solver/Mage.py b/src/Solver/Mage.py index b35ac849..2bface0a 100644 --- a/src/Solver/Mage.py +++ b/src/Solver/Mage.py @@ -478,7 +478,10 @@ class Mage(CommandLineSolver): IS = f"{id_sec}" discharge = f"{d['discharge']:>10.5f}" elevation = f"{d['elevation']:>11.6f}" - rk = f"{d['rk']:>9.2f}" + section = d['rk'] + if section is None: + continue + rk = f"{section.rk:>9.2f}" f.write(f"{IR} {IS} {discharge} {elevation} {rk}\n") id_sec += 1 diff --git a/src/View/InitialConditions/Table.py b/src/View/InitialConditions/Table.py index c7b8ad53..69aa1799 100644 --- a/src/View/InitialConditions/Table.py +++ b/src/View/InitialConditions/Table.py @@ -111,14 +111,18 @@ class InitialConditionTableModel(PamhyrTableModel): row = index.row() column = index.column() - if self._headers[column] is "rk": - v = self._lst.get(row)[self._headers[column]] - return v.display_name() - elif self._headers[column] is "speed": + if self._headers[column] == "rk": + val = self._lst.get(row) + section = val[self._headers[column]] + if section is None: + return "" + + return section.display_name() + elif self._headers[column] == "speed": z = self._lst.get(row)["elevation"] q = self._lst.get(row)["discharge"] profile = self._lst.get(row)["rk"] - if len(profile) >= 1: + if profile is not None: speed = profile.speed(q, z) return f"{speed:.4f}"