From 5ab06dbe514afb0e42c4d815fecfecf378527d65 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Rouby Date: Wed, 6 Dec 2023 09:20:18 +0100 Subject: [PATCH 1/6] HydraulicStructure: Fix db export. --- src/Model/HydraulicStructures/HydraulicStructures.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Model/HydraulicStructures/HydraulicStructures.py b/src/Model/HydraulicStructures/HydraulicStructures.py index ca55e05c..f5fa356c 100644 --- a/src/Model/HydraulicStructures/HydraulicStructures.py +++ b/src/Model/HydraulicStructures/HydraulicStructures.py @@ -149,7 +149,7 @@ class HydraulicStructure(SQLSubModel): "VALUES (" + f"{self.id}, '{self._db_format(self._name)}', " + f"{self._db_format(self.enabled)}, " + - f"{self.input_kp}, {self.input_kp}, " + + f"{self.input_kp}, {self.output_kp}, " + f"{input_reach_id}, {output_reach_id}" + ")" ) From 45ee8a96628cc5926ea91240101cdf125a49412b Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Rouby Date: Wed, 6 Dec 2023 11:05:55 +0100 Subject: [PATCH 2/6] Friction: Fix load method in case of multiple reaches. --- src/Model/Friction/Friction.py | 21 ++++++++++++++----- src/Model/Friction/FrictionList.py | 4 +++- src/Model/Geometry/PointXYZ.py | 2 +- src/Model/Geometry/ProfileXYZ.py | 9 +------- src/Model/Geometry/Reach.py | 2 +- .../HydraulicStructures.py | 10 ++++++++- src/Model/River.py | 9 ++++---- 7 files changed, 36 insertions(+), 21 deletions(-) diff --git a/src/Model/Friction/Friction.py b/src/Model/Friction/Friction.py index db1a60db..2e6ec259 100644 --- a/src/Model/Friction/Friction.py +++ b/src/Model/Friction/Friction.py @@ -16,10 +16,13 @@ # -*- coding: utf-8 -*- +import logging + from tools import trace, timer from Model.Tools.PamhyrDB import SQLSubModel +logger = logging.getLogger() class Friction(SQLSubModel): def __init__(self, name: str = "", status=None): @@ -60,7 +63,10 @@ class Friction(SQLSubModel): @classmethod def _db_load(cls, execute, data=None): new = [] - reach = data["parent"] # Reach object + + logger.info(data) + + reach = data["reach"] status = data["status"] stricklers = data["stricklers"].stricklers @@ -69,9 +75,6 @@ class Friction(SQLSubModel): f"FROM friction WHERE reach = {reach.id}" ) - for _ in table: - new.append(None) - for row in table: ind = row[0] # Get stricklers @@ -86,7 +89,11 @@ class Friction(SQLSubModel): sec.begin_strickler = bs sec.end_strickler = es - yield ind, sec + new.append((ind, sec)) + + logger.info(new) + + return new def _db_save(self, execute, data=None): ind = data["ind"] @@ -116,6 +123,10 @@ class Friction(SQLSubModel): def edge(self): return self._edge + @property + def reach(self): + return self._edge + @edge.setter def edge(self, edge): self._edge = edge diff --git a/src/Model/Friction/FrictionList.py b/src/Model/Friction/FrictionList.py index 20c33197..6a5a6c09 100644 --- a/src/Model/Friction/FrictionList.py +++ b/src/Model/Friction/FrictionList.py @@ -50,10 +50,12 @@ class FrictionList(PamhyrModelList): def _db_load(cls, execute, data=None): new = cls(status=data['status']) - new._lst = Friction._db_load( + ilst = Friction._db_load( execute, data ) + new._lst = list(map(lambda x: x[1], sorted(ilst))) + return new def _db_save(self, execute, data=None): diff --git a/src/Model/Geometry/PointXYZ.py b/src/Model/Geometry/PointXYZ.py index 06a6ccf6..57c13a37 100644 --- a/src/Model/Geometry/PointXYZ.py +++ b/src/Model/Geometry/PointXYZ.py @@ -116,7 +116,7 @@ class PointXYZ(Point, SQLSubModel): sl = self._sl.id if self._sl is not None else -1 sql = ( - "INSERT OR REPLACE INTO " + + "INSERT INTO " + "geometry_pointXYZ(ind, name, x, y, z, profile, sl) " + "VALUES (" + f"{ind}, '{self._db_format(self._name)}', " + diff --git a/src/Model/Geometry/ProfileXYZ.py b/src/Model/Geometry/ProfileXYZ.py index ad3ebb5e..495fbac1 100644 --- a/src/Model/Geometry/ProfileXYZ.py +++ b/src/Model/Geometry/ProfileXYZ.py @@ -115,9 +115,6 @@ class ProfileXYZ(Profile, SQLSubModel): f"WHERE reach = {reach.id}" ) - for _ in table: - profiles.append(None) - for row in table: id = row[0] ind = row[1] @@ -132,7 +129,7 @@ class ProfileXYZ(Profile, SQLSubModel): id=id, num=num, name=name, kp=kp, code1=code1, code2=code2, - reach=data["parent"], + reach=reach, status=status ) @@ -151,10 +148,6 @@ class ProfileXYZ(Profile, SQLSubModel): yield ind, new - # profiles[ind] = new - - # return profiles - def _db_save(self, execute, data=None): ok = True ind = data["ind"] diff --git a/src/Model/Geometry/Reach.py b/src/Model/Geometry/Reach.py index 5351a9cb..3c02f16a 100644 --- a/src/Model/Geometry/Reach.py +++ b/src/Model/Geometry/Reach.py @@ -61,7 +61,7 @@ class Reach(SQLSubModel): @classmethod def _db_load(cls, execute, data=None): - new = cls(status=data["status"], parent=data["parent"]) + new = cls(status=data["status"], parent=data["reach"]) new._profiles = ProfileXYZ._db_load( execute, diff --git a/src/Model/HydraulicStructures/HydraulicStructures.py b/src/Model/HydraulicStructures/HydraulicStructures.py index f5fa356c..9234d511 100644 --- a/src/Model/HydraulicStructures/HydraulicStructures.py +++ b/src/Model/HydraulicStructures/HydraulicStructures.py @@ -140,6 +140,14 @@ class HydraulicStructure(SQLSubModel): if self._output_reach is not None: output_reach_id = self._output_reach.id + input_kp = -1 + if self.input_kp is not None: + input_kp = self.input_kp + + output_kp = -1 + if self.output_kp is not None: + output_kp = self.output_kp + sql = ( "INSERT INTO " + "hydraulic_structures(" + @@ -149,7 +157,7 @@ class HydraulicStructure(SQLSubModel): "VALUES (" + f"{self.id}, '{self._db_format(self._name)}', " + f"{self._db_format(self.enabled)}, " + - f"{self.input_kp}, {self.output_kp}, " + + f"{input_kp}, {output_kp}, " + f"{input_reach_id}, {output_reach_id}" + ")" ) diff --git a/src/Model/River.py b/src/Model/River.py index d995d2c3..2ba5a54f 100644 --- a/src/Model/River.py +++ b/src/Model/River.py @@ -157,7 +157,9 @@ class RiverReach(Edge, SQLSubModel): data = {} table = execute( - "SELECT id, name, enable, node1, node2 FROM river_reach") + "SELECT id, name, enable, node1, node2 FROM river_reach" + ) + for row in table: # Update id counter cls._id_cnt = max(cls._id_cnt, row[0]) @@ -172,10 +174,9 @@ class RiverReach(Edge, SQLSubModel): new = cls(id, name, node1, node2, status=data["status"]) new.enable(enable=enable) - data["reach"] = id - data["parent"] = new - new._reach = Reach._db_load(execute, data) + data["reach"] = new + new._reach = Reach._db_load(execute, data) new._frictions = FrictionList._db_load(execute, data) reachs.append(new) From d85e5c46666bd00d130d546ec0d25fa50e03cfc8 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Rouby Date: Wed, 6 Dec 2023 11:28:24 +0100 Subject: [PATCH 3/6] PamhyrDialog: Fix window list delete whene dialog is done. --- src/View/Study/Window.py | 1 + src/View/Tools/ListedSubWindow.py | 3 ++- src/View/Tools/PamhyrWindow.py | 5 +++++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/View/Study/Window.py b/src/View/Study/Window.py index e8b9c7f8..bfb615d1 100644 --- a/src/View/Study/Window.py +++ b/src/View/Study/Window.py @@ -101,4 +101,5 @@ class NewStudyWindow(PamhyrDialog): self._study.use_date(date) else: self._study.use_time() + self.done(True) diff --git a/src/View/Tools/ListedSubWindow.py b/src/View/Tools/ListedSubWindow.py index 7fe21bb7..d0b833b8 100644 --- a/src/View/Tools/ListedSubWindow.py +++ b/src/View/Tools/ListedSubWindow.py @@ -55,11 +55,12 @@ class ListedSubWindow(object): logger.info(f"Close window: ({h}) {self.sub_win_cnt}") def _sub_win_exists(self, h): - return reduce( + res = reduce( lambda acc, el: (acc or (h == (el[1].hash()))), self.sub_win_list, False ) + return res def sub_win_exists(self, h): return self._sub_win_exists(h) diff --git a/src/View/Tools/PamhyrWindow.py b/src/View/Tools/PamhyrWindow.py index 74756167..87829b8d 100644 --- a/src/View/Tools/PamhyrWindow.py +++ b/src/View/Tools/PamhyrWindow.py @@ -186,3 +186,8 @@ class PamhyrDialog(ASubWindow, ListedSubWindow, PamhyrWindowTools): self._hash_data.append(self._config) self._set_title() + + def done(self, result): + if self.parent is not None: + self.parent.sub_win_del(self.hash()) + super(PamhyrDialog, self).done(result) From db11c9d968196f3a104e7ae30656508b16e5fb17 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Rouby Date: Wed, 6 Dec 2023 11:44:09 +0100 Subject: [PATCH 4/6] Geometry: Resize window to respect 16:9 ratio. --- src/View/ui/GeometryReach.ui | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/View/ui/GeometryReach.ui b/src/View/ui/GeometryReach.ui index a11a2279..d18d0e14 100644 --- a/src/View/ui/GeometryReach.ui +++ b/src/View/ui/GeometryReach.ui @@ -6,7 +6,7 @@ 0 0 - 868 + 1280 720 @@ -101,7 +101,7 @@ 0 0 - 868 + 1280 22 From 0307927fa9054e5593081732b642d1de9d068579 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Rouby Date: Wed, 6 Dec 2023 14:15:47 +0100 Subject: [PATCH 5/6] PamhyrTable: Fix editable column. --- src/View/LateralContribution/Window.py | 2 +- src/View/Tools/PamhyrTable.py | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/View/LateralContribution/Window.py b/src/View/LateralContribution/Window.py index 8a9a2e8e..a6f04af5 100644 --- a/src/View/LateralContribution/Window.py +++ b/src/View/LateralContribution/Window.py @@ -107,7 +107,7 @@ class LateralContributionWindow(PamhyrWindow): self._table[t] = TableModel( table_view=table, table_headers=self._trad.get_dict("table_headers"), - editable_headers=True, + editable_headers=self._trad.get_dict("table_headers"), delegates={ "type": self._delegate_type, "edge": self._delegate_edge, diff --git a/src/View/Tools/PamhyrTable.py b/src/View/Tools/PamhyrTable.py index b77e26b9..6ce66a42 100644 --- a/src/View/Tools/PamhyrTable.py +++ b/src/View/Tools/PamhyrTable.py @@ -119,8 +119,7 @@ class PamhyrTableModel(QAbstractTableModel): options = Qt.ItemIsEnabled | Qt.ItemIsSelectable - if (self._editable_headers or - self._headers[column] in self._editable_headers): + if self._headers[column] in self._editable_headers: options |= Qt.ItemIsEditable return options From 4a43653d7faf57091da601d6e699921d39fba5b6 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Rouby Date: Wed, 6 Dec 2023 14:49:50 +0100 Subject: [PATCH 6/6] HydraulicStructure: Fix KP db type. --- src/Model/HydraulicStructures/HydraulicStructures.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Model/HydraulicStructures/HydraulicStructures.py b/src/Model/HydraulicStructures/HydraulicStructures.py index 9234d511..99dc2dc7 100644 --- a/src/Model/HydraulicStructures/HydraulicStructures.py +++ b/src/Model/HydraulicStructures/HydraulicStructures.py @@ -61,8 +61,8 @@ class HydraulicStructure(SQLSubModel): id INTEGER NOT NULL PRIMARY KEY, name TEXT NOT NULL, enabled BOOLEAN NOT NULL, - input_kp INTEGER, - output_kp INTEGER, + input_kp REAL NOT NULL, + output_kp REAL NOT NULL, input_reach INTEGER, output_reach INTEGER, FOREIGN KEY(input_reach) REFERENCES river_reach(id),