diff --git a/src/Model/BoundaryCondition/BoundaryCondition.py b/src/Model/BoundaryCondition/BoundaryCondition.py index f77720fc..7278ae5a 100644 --- a/src/Model/BoundaryCondition/BoundaryCondition.py +++ b/src/Model/BoundaryCondition/BoundaryCondition.py @@ -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( diff --git a/src/Model/BoundaryConditionsAdisTS/BoundaryConditionAdisTS.py b/src/Model/BoundaryConditionsAdisTS/BoundaryConditionAdisTS.py index c6acea30..24fa3cf2 100644 --- a/src/Model/BoundaryConditionsAdisTS/BoundaryConditionAdisTS.py +++ b/src/Model/BoundaryConditionsAdisTS/BoundaryConditionAdisTS.py @@ -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) diff --git a/src/Model/D90AdisTS/D90AdisTS.py b/src/Model/D90AdisTS/D90AdisTS.py index 13c4f33c..442fbca9 100644 --- a/src/Model/D90AdisTS/D90AdisTS.py +++ b/src/Model/D90AdisTS/D90AdisTS.py @@ -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) diff --git a/src/Model/DIFAdisTS/DIFAdisTS.py b/src/Model/DIFAdisTS/DIFAdisTS.py index d91e742e..341f71d9 100644 --- a/src/Model/DIFAdisTS/DIFAdisTS.py +++ b/src/Model/DIFAdisTS/DIFAdisTS.py @@ -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) diff --git a/src/Model/HydraulicStructures/Basic/HydraulicStructures.py b/src/Model/HydraulicStructures/Basic/HydraulicStructures.py index f8ee30f9..6df03953 100644 --- a/src/Model/HydraulicStructures/Basic/HydraulicStructures.py +++ b/src/Model/HydraulicStructures/Basic/HydraulicStructures.py @@ -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) diff --git a/src/Model/HydraulicStructures/HydraulicStructures.py b/src/Model/HydraulicStructures/HydraulicStructures.py index 3eb7d8e2..28449e87 100644 --- a/src/Model/HydraulicStructures/HydraulicStructures.py +++ b/src/Model/HydraulicStructures/HydraulicStructures.py @@ -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) diff --git a/src/Model/InitialConditions/InitialConditions.py b/src/Model/InitialConditions/InitialConditions.py index bfcb714d..0e998d65 100644 --- a/src/Model/InitialConditions/InitialConditions.py +++ b/src/Model/InitialConditions/InitialConditions.py @@ -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) diff --git a/src/Model/LateralContribution/LateralContribution.py b/src/Model/LateralContribution/LateralContribution.py index 42816a4b..63dfac4c 100644 --- a/src/Model/LateralContribution/LateralContribution.py +++ b/src/Model/LateralContribution/LateralContribution.py @@ -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( diff --git a/src/Model/LateralContributionsAdisTS/LateralContributionAdisTS.py b/src/Model/LateralContributionsAdisTS/LateralContributionAdisTS.py index 0aaa0da9..85b2e0ab 100644 --- a/src/Model/LateralContributionsAdisTS/LateralContributionAdisTS.py +++ b/src/Model/LateralContributionsAdisTS/LateralContributionAdisTS.py @@ -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( diff --git a/src/Model/Pollutants/Pollutants.py b/src/Model/Pollutants/Pollutants.py index d60fafcd..51d2460a 100644 --- a/src/Model/Pollutants/Pollutants.py +++ b/src/Model/Pollutants/Pollutants.py @@ -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 diff --git a/src/Model/Reservoir/Reservoir.py b/src/Model/Reservoir/Reservoir.py index 2e5037d5..1d1998b6 100644 --- a/src/Model/Reservoir/Reservoir.py +++ b/src/Model/Reservoir/Reservoir.py @@ -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) diff --git a/src/Model/River.py b/src/Model/River.py index 1185866f..e4b9aabd 100644 --- a/src/Model/River.py +++ b/src/Model/River.py @@ -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, diff --git a/src/Model/SedimentLayer/SedimentLayer.py b/src/Model/SedimentLayer/SedimentLayer.py index 44625039..476f31ad 100644 --- a/src/Model/SedimentLayer/SedimentLayer.py +++ b/src/Model/SedimentLayer/SedimentLayer.py @@ -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] diff --git a/src/Model/Tools/PamhyrDB.py b/src/Model/Tools/PamhyrDB.py index 4b48f5c6..edb47dfa 100644 --- a/src/Model/Tools/PamhyrDB.py +++ b/src/Model/Tools/PamhyrDB.py @@ -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) diff --git a/src/Model/Tools/PamhyrDict.py b/src/Model/Tools/PamhyrDict.py index d27e02c9..52ac2e3b 100644 --- a/src/Model/Tools/PamhyrDict.py +++ b/src/Model/Tools/PamhyrDict.py @@ -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) diff --git a/src/Model/Tools/PamhyrList.py b/src/Model/Tools/PamhyrList.py index abc128df..5d735443 100644 --- a/src/Model/Tools/PamhyrList.py +++ b/src/Model/Tools/PamhyrList.py @@ -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 # ################ diff --git a/src/Model/Tools/PamhyrListExt.py b/src/Model/Tools/PamhyrListExt.py index b3580cc6..c2bfb2da 100644 --- a/src/Model/Tools/PamhyrListExt.py +++ b/src/Model/Tools/PamhyrListExt.py @@ -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 # ################