diff --git a/src/Model/InitialConditions/InitialConditionsDict.py b/src/Model/InitialConditions/InitialConditionsDict.py index 48da56a0598e40d3426de80d72c7e6663988cbe2..c3b7d7c6d664cb9d79e74f130d187b9906abcf0a 100644 --- a/src/Model/InitialConditions/InitialConditionsDict.py +++ b/src/Model/InitialConditions/InitialConditionsDict.py @@ -20,28 +20,14 @@ from copy import copy from tools import trace, timer from Model.DB import SQLSubModel +from Model.Tools.PamhyrDict import PamhyrModelDict from Model.InitialConditions.InitialConditions import InitialConditions -class InitialConditionsDict(SQLSubModel): +class InitialConditionsDict(PamhyrModelDict): _sub_classes = [ InitialConditions, ] - def __init__(self, status = None): - super(InitialConditionsDict, self).__init__() - - self._status = status - - self._reach = {} - - @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): new = cls(status = data["status"]) @@ -55,7 +41,7 @@ class InitialConditionsDict(SQLSubModel): ) if ic is not None: - new._reach[reach] = ic + new._dict[reach] = ic return new @@ -66,30 +52,12 @@ class InitialConditionsDict(SQLSubModel): execute("DELETE FROM initial_conditions") - for reach in self._reach: + for reach in self._dict: data["reach"] = reach - ok &= self._reach[reach]._sql_save(execute, data) + ok &= self._dict[reach]._sql_save(execute, data) return ok - def __len__(self): - return len(self._reach) - - def is_defined(self, reach): - return reach in self._reach - - def get(self, reach): - if reach in self._reach: - return self._reach[reach] - - new = self.new(reach) - self.set(reach, new) - return new - - def set(self, reach, new): - self._reach[reach] = new - self._status.modified() - def new(self, reach): new = InitialConditions(reach = reach, status = self._status) self.set(reach, new) diff --git a/src/Model/Tools/PamhyrDict.py b/src/Model/Tools/PamhyrDict.py new file mode 100644 index 0000000000000000000000000000000000000000..0c1cc536f648020cabe18c70e217d106eee153f7 --- /dev/null +++ b/src/Model/Tools/PamhyrDict.py @@ -0,0 +1,73 @@ +# PamhyrDict.py -- Pamhyr abstract dict for model classes +# Copyright (C) 2023 INRAE +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +# -*- coding: utf-8 -*- + +import logging + +from copy import copy +from tools import trace, timer + +from Model.DB import SQLSubModel + +logger = logging.getLogger() + + +class PamhyrModelDict(SQLSubModel): + _sub_classes = [] + + def __init__(self, status = None): + super(PamhyrModelDict, self).__init__() + + self._status = status + + self._dict = {} + + @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) + + def __len__(self): + return len(self._dict) + + def is_defined(self, key): + return key in self._dict + + def set(self, key, new): + self._dict[key] = new + self._status.modified() + + def get(self, key): + if key in self._dict: + return self._dict[key] + + new = self.new(key) + self.set(key, new) + return new + + def new(self, key): + raise NotImplementedMethodeError(self, self.new)