From 303f6bb35b30d128f835e63f0bc803daa7b43ec8 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Rouby Date: Mon, 15 Sep 2025 10:11:44 +0200 Subject: [PATCH] Scenario: Duplicate: Fix data traversal and duplicate method. --- src/Model/Geometry/ProfileXYZ.py | 10 ++++++++++ src/Model/Geometry/Reach.py | 7 +++++++ .../LateralContribution/LateralContribution.py | 1 - src/Model/River.py | 17 +++++++++++++++++ src/Model/Study.py | 3 +-- 5 files changed, 35 insertions(+), 3 deletions(-) diff --git a/src/Model/Geometry/ProfileXYZ.py b/src/Model/Geometry/ProfileXYZ.py index 0fd38131..29327ee8 100644 --- a/src/Model/Geometry/ProfileXYZ.py +++ b/src/Model/Geometry/ProfileXYZ.py @@ -339,6 +339,16 @@ class ProfileXYZ(Profile, SQLSubModel): return ok + def _data_traversal(self, + predicate=lambda obj, data: True, + modifier=lambda obj, data: None, + data={}): + if predicate(self, data): + modifier(self, data) + + for p in self._points: + p._data_traversal(predicate, modifier, data) + @classmethod def from_data(cls, header, data): profile = None diff --git a/src/Model/Geometry/Reach.py b/src/Model/Geometry/Reach.py index f646ad7e..57fa875d 100644 --- a/src/Model/Geometry/Reach.py +++ b/src/Model/Geometry/Reach.py @@ -99,6 +99,13 @@ class Reach(SQLSubModel): return ok + def _data_traversal(self, + predicate=lambda obj, data: True, + modifier=lambda obj, data: None, + data={}): + for p in self._profiles: + p._data_traversal(predicate, modifier, data) + def profile(self, i): """Returns profile at index i diff --git a/src/Model/LateralContribution/LateralContribution.py b/src/Model/LateralContribution/LateralContribution.py index 63dfac4c..63773902 100644 --- a/src/Model/LateralContribution/LateralContribution.py +++ b/src/Model/LateralContribution/LateralContribution.py @@ -439,7 +439,6 @@ class LateralContribution(SQLSubModel): return True - def _data_traversal(self, predicate=lambda obj, data: True, modifier=lambda obj, data: None, diff --git a/src/Model/River.py b/src/Model/River.py index e4b9aabd..acc65ef2 100644 --- a/src/Model/River.py +++ b/src/Model/River.py @@ -190,6 +190,13 @@ class RiverNode(Node): return True + def _data_traversal(self, + predicate=lambda obj, data: True, + modifier=lambda obj, data: None, + data={}): + if predicate(self, data): + modifier(self, data) + def is_deleted(self): return self._deleted @@ -387,6 +394,16 @@ class RiverReach(Edge): objs = [self._reach, self._frictions] return self._save_submodel(execute, objs, data) + def _data_traversal(self, + predicate=lambda obj, data: True, + modifier=lambda obj, data: None, + data={}): + if predicate(self, data): + modifier(self, data) + + self._reach._data_traversal(predicate, modifier, data) + self._frictions._data_traversal(predicate, modifier, data) + def is_deleted(self): return self._deleted diff --git a/src/Model/Study.py b/src/Model/Study.py index 5b0c9902..821702d0 100644 --- a/src/Model/Study.py +++ b/src/Model/Study.py @@ -514,13 +514,12 @@ class Study(SQLModel): new.name = self.status.scenario.name + " (copy)" + self.status.scenario = new self.river._data_traversal( predicate=lambda obj, data: obj._owner_scenario == source, modifier=lambda obj, data: obj.set_owner_scenario(), data={} ) - self.status.scenario = new - self.status.set_as_editable() return new