From 6ec677a047a8835846bb341deb6c6937dbc4119f Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Rouby Date: Fri, 29 Aug 2025 14:44:51 +0200 Subject: [PATCH] Friction, Reservoir, Geometry: Some fixes and minor change. --- src/Model/Friction/Friction.py | 7 ++++--- src/Model/Friction/FrictionList.py | 11 ++--------- src/Model/Geometry/ProfileXYZ.py | 2 +- src/Model/Geometry/Reach.py | 3 --- src/Model/Reservoir/Reservoir.py | 30 +++++++++++++++++++++--------- src/View/Frictions/UndoCommand.py | 6 ++++-- 6 files changed, 32 insertions(+), 27 deletions(-) diff --git a/src/Model/Friction/Friction.py b/src/Model/Friction/Friction.py index 37d42459..0e7f157a 100644 --- a/src/Model/Friction/Friction.py +++ b/src/Model/Friction/Friction.py @@ -30,6 +30,7 @@ logger = logging.getLogger() class Friction(SQLSubModel): def __init__(self, id: int = -1, + reach=None, status=None, owner_scenario=-1): super(Friction, self).__init__( @@ -37,7 +38,7 @@ class Friction(SQLSubModel): owner_scenario=owner_scenario ) - self._reach = None + self._reach = reach self._begin_rk = 0.0 self._end_rk = 0.0 self._begin_strickler = None @@ -64,7 +65,7 @@ class Friction(SQLSubModel): ) """) - if ext == "_tmp": + if ext != "": return True return cls._create_submodel(execute) @@ -217,7 +218,7 @@ class Friction(SQLSubModel): return ( self._begin_strickler._owner_scenario == ssi - or self._end_strickler._owner_scenario == ssi + # or self._end_strickler._owner_scenario == ssi or super(Friction, self).must_be_saved() ) diff --git a/src/Model/Friction/FrictionList.py b/src/Model/Friction/FrictionList.py index 6cec1842..c185ebd3 100644 --- a/src/Model/Friction/FrictionList.py +++ b/src/Model/Friction/FrictionList.py @@ -86,19 +86,12 @@ class FrictionList(PamhyrModelList): ) ) - @property - def lst(self): - if not isinstance(self._lst, list): - self._lst = self._get_frictions_list() - - return self._lst - @property def frictions(self): return self.lst - def new(self, index): - n = Friction(status=self._status) + def new(self, reach, index): + n = Friction(reach=reach, status=self._status) self._lst.insert(index, n) self._status.modified() return n diff --git a/src/Model/Geometry/ProfileXYZ.py b/src/Model/Geometry/ProfileXYZ.py index b73e0cc3..53f8e160 100644 --- a/src/Model/Geometry/ProfileXYZ.py +++ b/src/Model/Geometry/ProfileXYZ.py @@ -540,7 +540,7 @@ class ProfileXYZ(Profile, SQLSubModel): """ x, y, z = (0., 0., 0.) - if len(self._points) >= index: + if 0 < len(self._points) >= index: x, y, z = self._points[index - 1].get_coordinate() point = PointXYZ(x=x, y=y, z=z, profile=self, status=self._status) diff --git a/src/Model/Geometry/Reach.py b/src/Model/Geometry/Reach.py index fd098c31..519a04fd 100644 --- a/src/Model/Geometry/Reach.py +++ b/src/Model/Geometry/Reach.py @@ -83,9 +83,6 @@ class Reach(SQLSubModel): return new def _db_save(self, execute, data=None): - if not self.must_be_saved(): - return True - ok = True execute( diff --git a/src/Model/Reservoir/Reservoir.py b/src/Model/Reservoir/Reservoir.py index d51ec12e..d7bcfe6f 100644 --- a/src/Model/Reservoir/Reservoir.py +++ b/src/Model/Reservoir/Reservoir.py @@ -28,13 +28,15 @@ class Data(SQLSubModel): _sub_classes = [] def __init__(self, id: int = -1, + elevation: float = 0., + surface: float = 0., status=None, owner_scenario=-1): super(Data, self).__init__( id=id, status=status, owner_scenario=owner_scenario ) - self._data = [] + self._data = [elevation, surface] @classmethod def _db_create(cls, execute, ext=""): @@ -335,12 +337,12 @@ class Reservoir(SQLSubModel): execute( "DELETE FROM reservoir " + - f"WHERE pamhyr_id = {self.pamhyr_id}" + + f"WHERE pamhyr_id = {self.pamhyr_id} " + f"AND scenario = {self._status.scenario_id}" ) execute( "DELETE FROM reservoir_data " + - f"WHERE reservoir = {self.pamhyr_id}" + + f"WHERE reservoir = {self.pamhyr_id} " + f"AND scenario = {self._status.scenario_id}" ) @@ -428,12 +430,23 @@ class Reservoir(SQLSubModel): return (new_0, new_1) def add(self, index: int): - value = (self._default_elevation, self._default_surface) - self._data.insert(index, value) + data = Data( + elevation = self._default_elevation, + surface = self._default_surface, + status = self._status, + ) + + self._data.insert(index, data) self.modified() - return value + return data def insert(self, index: int, value): + if type(value) is tuple or type(value) is list: + value = Data( + elevation = value[0], + surface = value[1] + ) + self._data.insert(index, value) self.modified() @@ -482,12 +495,11 @@ class Reservoir(SQLSubModel): lst = [] for r in _range: lst.append(r) + return lst def _set_i_c_v(self, index, column, value): - v = list(self._data[index]) - v[column] = value - self._data[index] = tuple(v) + self._data[index][column] = value self.modified() def set_i_elevation(self, index: int, value): diff --git a/src/View/Frictions/UndoCommand.py b/src/View/Frictions/UndoCommand.py index 0264d6fe..20bf308f 100644 --- a/src/View/Frictions/UndoCommand.py +++ b/src/View/Frictions/UndoCommand.py @@ -137,7 +137,9 @@ class AddCommand(QUndoCommand): def redo(self): if self._new is None: - self._new = self._frictions.new(self._index) + self._new = self._frictions.new( + self._reach, self._index + ) self._new.edge = self._reach else: self._frictions.insert(self._index, self._new) @@ -182,7 +184,7 @@ class SortCommand(QUndoCommand): def redo(self): self._frictions.sort( reverse=self._reverse, - key=lambda x: x.name + key=lambda x: x._begin_rk ) if self._indexes is None: self._indexes = list(