Scenario: Duplicate: Fix data traversal and duplicate method.

scenarios
Pierre-Antoine 2025-09-15 10:11:44 +02:00
parent 9043b6e2a3
commit 303f6bb35b
5 changed files with 35 additions and 3 deletions

View File

@ -339,6 +339,16 @@ class ProfileXYZ(Profile, SQLSubModel):
return ok 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 @classmethod
def from_data(cls, header, data): def from_data(cls, header, data):
profile = None profile = None

View File

@ -99,6 +99,13 @@ class Reach(SQLSubModel):
return ok 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): def profile(self, i):
"""Returns profile at index i """Returns profile at index i

View File

@ -439,7 +439,6 @@ class LateralContribution(SQLSubModel):
return True return True
def _data_traversal(self, def _data_traversal(self,
predicate=lambda obj, data: True, predicate=lambda obj, data: True,
modifier=lambda obj, data: None, modifier=lambda obj, data: None,

View File

@ -190,6 +190,13 @@ class RiverNode(Node):
return True 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): def is_deleted(self):
return self._deleted return self._deleted
@ -387,6 +394,16 @@ class RiverReach(Edge):
objs = [self._reach, self._frictions] objs = [self._reach, self._frictions]
return self._save_submodel(execute, objs, data) 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): def is_deleted(self):
return self._deleted return self._deleted

View File

@ -514,13 +514,12 @@ class Study(SQLModel):
new.name = self.status.scenario.name + " (copy)" new.name = self.status.scenario.name + " (copy)"
self.status.scenario = new
self.river._data_traversal( self.river._data_traversal(
predicate=lambda obj, data: obj._owner_scenario == source, predicate=lambda obj, data: obj._owner_scenario == source,
modifier=lambda obj, data: obj.set_owner_scenario(), modifier=lambda obj, data: obj.set_owner_scenario(),
data={} data={}
) )
self.status.scenario = new
self.status.set_as_editable() self.status.set_as_editable()
return new return new