From 0b0c402baf5ead8d4c31fb5888cbd2b73115f3a2 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Rouby <pierre-antoine.rouby@inrae.fr> Date: Mon, 11 Sep 2023 11:20:08 +0200 Subject: [PATCH] Model: Add PamhyrModelListWithTab. Use it in BC and LC. --- .../BoundaryConditionList.py | 77 +------------ .../LateralContributionList.py | 77 +------------ src/Model/Tools/PamhyrList.py | 105 +++++++++++++++++- 3 files changed, 110 insertions(+), 149 deletions(-) diff --git a/src/Model/BoundaryCondition/BoundaryConditionList.py b/src/Model/BoundaryCondition/BoundaryConditionList.py index 2514f326..d4ffc6bf 100644 --- a/src/Model/BoundaryCondition/BoundaryConditionList.py +++ b/src/Model/BoundaryCondition/BoundaryConditionList.py @@ -20,6 +20,7 @@ from copy import copy from tools import trace, timer from Model.DB import SQLSubModel +from Model.Tools.PamhyrList import PamhyrModelListWithTab from Model.Except import NotImplementedMethodeError from Model.BoundaryCondition.BoundaryCondition import BoundaryCondition @@ -30,30 +31,12 @@ from Model.BoundaryCondition.BoundaryConditionTypes import ( Solid, ) -class BoundaryConditionList(SQLSubModel): +class BoundaryConditionList(PamhyrModelListWithTab): + _tabs_list = ["liquid", "solid", "suspenssion"] _sub_classes = [ BoundaryCondition, ] - def __init__(self, status = None): - super(BoundaryConditionList, self).__init__() - - self._status = status - - self._tabs = { - "liquid" : [], - "solid" : [], - "suspenssion" : [] - } - - @classmethod - def _sql_create(cls, execute): - return cls._create_submodel(execute) - - @classmethod - def _sql_update(cls, execute, version): - return True - @classmethod def _sql_load(cls, execute, data = None): new = cls(status = data['status']) @@ -82,66 +65,12 @@ class BoundaryConditionList(SQLSubModel): return True - def len(self, lst): - return len(self._tabs[lst]) - - def get_tab(self, lst): - return self._tabs[lst].copy() - - def get(self, lst, row): - return self._tabs[lst][row] - - def set(self, lst, row, new): - self._tabs[lst][row] = new - self._status.modified() - def new(self, lst, index): n = NotDefined(status=self._status) self._tabs[lst].insert(index, n) self._status.modified() return n - def insert(self, lst, index, new): - self._tabs[lst].insert(index, new) - self._status.modified() - - def delete(self, lst, bcs): - for bc in bcs: - self._tabs[lst].remove(bc) - self._status.modified() - - def delete_i(self, lst, indexes): - bcs = list( - map( - lambda x: x[1], - filter( - lambda x: x[0] in indexes, - enumerate(self._tabs[lst]) - ) - ) - ) - self.delete(lst, bcs) - - def sort(self, lst, reverse=False, key=None): - self._tabs[lst].sort(reverse=reverse, key=key) - self._status.modified() - - def move_up(self, lst, index): - if index < len(self._tabs[lst]): - next = index - 1 - - l = self._tabs[lst] - l[index], l[next] = l[next], l[index] - self._status.modified() - - def move_down(self, lst, index): - if index >= 0: - prev = index + 1 - - l = self._tabs[lst] - l[index], l[prev] = l[prev], l[index] - self._status.modified() - def __copy__(self): new = BoundaryConditionList() diff --git a/src/Model/LateralContribution/LateralContributionList.py b/src/Model/LateralContribution/LateralContributionList.py index ca7c111e..6622a94f 100644 --- a/src/Model/LateralContribution/LateralContributionList.py +++ b/src/Model/LateralContribution/LateralContributionList.py @@ -20,6 +20,7 @@ from copy import copy from tools import trace, timer from Model.DB import SQLSubModel +from Model.Tools.PamhyrList import PamhyrModelListWithTab from Model.Except import NotImplementedMethodeError from Model.LateralContribution.LateralContribution import LateralContribution @@ -27,30 +28,12 @@ from Model.LateralContribution.LateralContributionTypes import ( NotDefined, LateralContrib, Rain, Evaporation, ) -class LateralContributionList(SQLSubModel): +class LateralContributionList(PamhyrModelListWithTab): + _tabs_list = ["liquid", "solid", "suspenssion"] _sub_classes = [ LateralContribution, ] - def __init__(self, status = None): - super(LateralContributionList, self).__init__() - - self._status = status - - self._tabs = { - "liquid" : [], - "solid" : [], - "suspenssion" : [] - } - - @classmethod - def _sql_create(cls, execute): - return cls._create_submodel(execute) - - @classmethod - def _sql_update(cls, execute, version): - return True - @classmethod def _sql_load(cls, execute, data = None): new = cls(status = data['status']) @@ -79,66 +62,12 @@ class LateralContributionList(SQLSubModel): return True - def len(self, lst): - return len(self._tabs[lst]) - - def get_tab(self, lst): - return self._tabs[lst].copy() - - def get(self, lst, row): - return self._tabs[lst][row] - - def set(self, lst, row, new): - self._tabs[lst][row] = new - self._status.modified() - def new(self, lst, index): n = NotDefined(status=self._status) self._tabs[lst].insert(index, n) self._status.modified() return n - def insert(self, lst, index, new): - self._tabs[lst].insert(index, new) - self._status.modified() - - def delete(self, lst, bcs): - for bc in bcs: - self._tabs[lst].remove(bc) - self._status.modified() - - def delete_i(self, lst, indexes): - bcs = list( - map( - lambda x: x[1], - filter( - lambda x: x[0] in indexes, - enumerate(self._tabs[lst]) - ) - ) - ) - self.delete(lst, bcs) - - def sort(self, lst, reverse=False, key=None): - self._tabs[lst].sort(reverse=reverse, key=key) - self._status.modified() - - def move_up(self, lst, index): - if index < len(self._tabs[lst]): - next = index - 1 - - l = self._tabs[lst] - l[index], l[next] = l[next], l[index] - self._status.modified() - - def move_down(self, lst, index): - if index >= 0: - prev = index + 1 - - l = self._tabs[lst] - l[index], l[prev] = l[prev], l[index] - self._status.modified() - def __copy__(self): new = LateralContributionList() diff --git a/src/Model/Tools/PamhyrList.py b/src/Model/Tools/PamhyrList.py index bf8537dd..8807c149 100644 --- a/src/Model/Tools/PamhyrList.py +++ b/src/Model/Tools/PamhyrList.py @@ -81,7 +81,7 @@ class PamhyrModelList(SQLSubModel): Returns: The new elements """ - raise NotImplementedMethodeError(self, self._sql_save) + raise NotImplementedMethodeError(self, self.new) def insert(self, index, new): self._lst.insert(index, new) @@ -123,3 +123,106 @@ class PamhyrModelList(SQLSubModel): l = self._lst l[index], l[prev] = l[prev], l[index] self._status.modified() + + +class PamhyrModelListWithTab(SQLSubModel): + _tabs_list = [] + _sub_classes = [ + ] + + def __init__(self, status = None): + super(PamhyrModelListWithTab, self).__init__() + + self._status = status + self._tabs = {} + for tab in self._tabs_list: + self._tabs[tab] = [] + + ####### + # SQL # + ####### + + @classmethod + def _sql_create(cls, execute): + return cls._create_submodel(execute) + + @classmethod + def _sql_update(cls, execute, version): + return cls._update_submodel(execute, version) + + @classmethod + def _sql_load(cls, execute, data = None): + raise NotImplementedMethodeError(cls, cls._sql_load) + + def _sql_save(self, execute, data = None): + raise NotImplementedMethodeError(self, self._sql_save) + + ################ + # MODEL METHOD # + ################ + + def len(self, lst): + return len(self._tabs[lst]) + + def get_tab(self, lst): + return self._tabs[lst].copy() + + def get(self, lst, row): + return self._tabs[lst][row] + + def set(self, lst, row, new): + self._tabs[lst][row] = new + self._status.modified() + + def new(self, lst, index): + """Create new elements and add it to list + + Args: + lst: The tab name + index: The index of new elements + + Returns: + The new elements + """ + raise NotImplementedMethodeError(self, self.new) + + def insert(self, lst, index, new): + self._tabs[lst].insert(index, new) + self._status.modified() + + def delete(self, lst, els): + for el in els: + self._tabs[lst].remove(el) + self._status.modified() + + def delete_i(self, lst, indexes): + els = list( + map( + lambda x: x[1], + filter( + lambda x: x[0] in indexes, + enumerate(self._tabs[lst]) + ) + ) + ) + self.delete(lst, els) + + def sort(self, lst, reverse=False, key=None): + self._tabs[lst].sort(reverse=reverse, key=key) + self._status.modified() + + def move_up(self, lst, index): + if index < len(self._tabs[lst]): + next = index - 1 + + l = self._tabs[lst] + l[index], l[next] = l[next], l[index] + self._status.modified() + + def move_down(self, lst, index): + if index >= 0: + prev = index + 1 + + l = self._tabs[lst] + l[index], l[prev] = l[prev], l[index] + self._status.modified() -- GitLab