Pamhyr2: Model: Add data traversal method on each pamhyr object.

scenarios
Pierre-Antoine 2025-09-12 15:08:04 +02:00
parent 78e6f7e5a7
commit 090326b75c
17 changed files with 179 additions and 13 deletions

View File

@ -400,6 +400,16 @@ class BoundaryCondition(SQLSubModel):
return True
def _data_traversal(self,
predicate=lambda obj, data: True,
modifier=lambda obj, data: None,
data={}):
if predicate(self, data):
modifier(self, data)
for el in self._data:
el._data_traversal(predicate, modifier, data)
def __len__(self):
return len(
list(

View File

@ -415,6 +415,16 @@ class BoundaryConditionAdisTS(SQLSubModel):
return True
def _data_traversal(self,
predicate=lambda obj, data: True,
modifier=lambda obj, data: None,
data={}):
if predicate(self, data):
modifier(self, data)
for d in self._data:
d._data_traversal(predicate, modifier, data)
def __len__(self):
return len(self._data)

View File

@ -197,6 +197,16 @@ class D90AdisTS(SQLSubModel):
return True
def _data_traversal(self,
predicate=lambda obj, data: True,
modifier=lambda obj, data: None,
data={}):
if predicate(self, data):
modifier(self, data)
for d in self._data:
d._data_traversal(predicate, modifier, data)
def __len__(self):
return len(self._data)

View File

@ -220,6 +220,16 @@ class DIFAdisTS(SQLSubModel):
return True
def _data_traversal(self,
predicate=lambda obj, data: True,
modifier=lambda obj, data: None,
data={}):
if predicate(self, data):
modifier(self, data)
for d in self._data:
d._data_traversal(predicate, modifier, data)
def __len__(self):
return len(self._data)

View File

@ -229,6 +229,16 @@ class BasicHS(SQLSubModel):
return True
def _data_traversal(self,
predicate=lambda obj, data: True,
modifier=lambda obj, data: None,
data={}):
if predicate(self, data):
modifier(self, data)
for d in self._data:
d._data_traversal(predicate, modifier, data)
def __len__(self):
return len(self._data)

View File

@ -327,6 +327,16 @@ class HydraulicStructure(SQLSubModel):
return True
def _data_traversal(self,
predicate=lambda obj, data: True,
modifier=lambda obj, data: None,
data={}):
if predicate(self, data):
modifier(self, data)
for d in self._data:
d._data_traversal(predicate, modifier, data)
def __len__(self):
return len(self.lst)

View File

@ -374,6 +374,16 @@ class InitialConditions(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 d in self._data:
d._data_traversal(predicate, modifier, data)
def __len__(self):
return len(self.data)

View File

@ -439,6 +439,17 @@ class LateralContribution(SQLSubModel):
return True
def _data_traversal(self,
predicate=lambda obj, data: True,
modifier=lambda obj, data: None,
data={}):
if predicate(self, data):
modifier(self, data)
for d in self._data:
d._data_traversal(predicate, modifier, data)
def __len__(self):
return len(
list(

View File

@ -392,6 +392,16 @@ class LateralContributionAdisTS(SQLSubModel):
return True
def _data_traversal(self,
predicate=lambda obj, data: True,
modifier=lambda obj, data: None,
data={}):
if predicate(self, data):
modifier(self, data)
for d in self._data:
d._data_traversal(predicate, modifier, data)
def __len__(self):
return len(
list(

View File

@ -441,6 +441,16 @@ class Pollutants(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 d in self._data:
d._data_traversal(predicate, modifier, data)
@property
def enabled(self):
return self._enabled

View File

@ -375,6 +375,16 @@ class Reservoir(SQLSubModel):
return True
def _data_traversal(self,
predicate=lambda obj, data: True,
modifier=lambda obj, data: None,
data={}):
if predicate(self, data):
modifier(self, data)
for d in self._data:
d._data_traversal(predicate, modifier, data)
def __len__(self):
return len(self._data)

View File

@ -649,8 +649,8 @@ class River(Graph):
obj._data_traversal(predicate, modifier, data)
def _get_objs_list(self):
objs = [
self._nodes, self._edges,
objs = (self._nodes + self._edges)
objs += [
self._boundary_condition,
self._initial_conditions,
self._lateral_contribution,

View File

@ -471,6 +471,16 @@ class SedimentLayer(SQLSubModel):
return True
def _data_traversal(self,
predicate=lambda obj, data: True,
modifier=lambda obj, data: None,
data={}):
if predicate(self, data):
modifier(self, data)
for layer in self._layers:
layer._data_traversal(predicate, modifier, data)
def get(self, index):
return self.layers[index]

View File

@ -413,3 +413,22 @@ class SQLSubModel(PamhyrID):
save
"""
raise NotImplementedMethodeError(self, self._db_save)
def _data_traversal(self,
predicate=lambda obj, data: True,
modifier=lambda obj, data: None,
data={}):
"""Traversal data and execute modifier fonction if predicate
true
Args:
predicate: Function predicate, take current obj and data as input
modifier: Function modifier, take current obj and data as input
Returns:
Nothing
"""
if predicate(self, data):
modifier(self, data)

View File

@ -97,10 +97,7 @@ class PamhyrModelDict(SQLSubModel):
Nothing
"""
if predicate(self, data):
modifier(self, data)
for key in self._lst:
for key in self._dict:
self._dict[key]\
._data_traversal(predicate, modifier, data)

View File

@ -100,9 +100,6 @@ class PamhyrModelList(SQLSubModel):
Nothing
"""
if predicate(self, data):
modifier(self, data)
for el in self._lst:
el._data_traversal(predicate, modifier, data)
@ -216,6 +213,24 @@ class PamhyrModelListWithTab(SQLSubModel):
def _db_save(self, execute, data=None):
raise NotImplementedMethodeError(self, self._db_save)
def _data_traversal(self,
predicate=lambda obj, data: True,
modifier=lambda obj, data: None,
data={}):
"""Traversal data and execute modifier fonction if predicate
true
Args:
predicate: Function predicate, take current obj and data as input
modifier: Function modifier, take current obj and data as input
Returns:
Nothing
"""
for tab in self._tabs:
for el in self._tabs[tab]:
el._data_traversal(predicate, modifier, data)
################
# MODEL METHOD #
################

View File

@ -103,11 +103,7 @@ class PamhyrModelList(SQLSubModel):
Returns:
Nothing
"""
if predicate(self, data):
modifier(self, data)
for el in self._lst:
el._data_traversal(predicate, modifier, data)
@ -230,6 +226,24 @@ class PamhyrModelListWithTab(SQLSubModel):
def _db_save(self, execute, data=None):
raise NotImplementedMethodeError(self, self._db_save)
def _data_traversal(self,
predicate=lambda obj, data: True,
modifier=lambda obj, data: None,
data={}):
"""Traversal data and execute modifier fonction if predicate
true
Args:
predicate: Function predicate, take current obj and data as input
modifier: Function modifier, take current obj and data as input
Returns:
Nothing
"""
for tab in self._tabs_list:
for el in self._tabs[tab]:
el._data_traversal(predicate, modifier, data)
################
# MODEL METHOD #
################