Commit e63b931d authored by Pierre-Antoine Rouby's avatar Pierre-Antoine Rouby
Browse files

Model: Add PamhyrModelDict and use it in IC.

Showing with 78 additions and 37 deletions
+78 -37
...@@ -20,28 +20,14 @@ from copy import copy ...@@ -20,28 +20,14 @@ from copy import copy
from tools import trace, timer from tools import trace, timer
from Model.DB import SQLSubModel from Model.DB import SQLSubModel
from Model.Tools.PamhyrDict import PamhyrModelDict
from Model.InitialConditions.InitialConditions import InitialConditions from Model.InitialConditions.InitialConditions import InitialConditions
class InitialConditionsDict(SQLSubModel): class InitialConditionsDict(PamhyrModelDict):
_sub_classes = [ _sub_classes = [
InitialConditions, 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 @classmethod
def _sql_load(cls, execute, data = None): def _sql_load(cls, execute, data = None):
new = cls(status = data["status"]) new = cls(status = data["status"])
...@@ -55,7 +41,7 @@ class InitialConditionsDict(SQLSubModel): ...@@ -55,7 +41,7 @@ class InitialConditionsDict(SQLSubModel):
) )
if ic is not None: if ic is not None:
new._reach[reach] = ic new._dict[reach] = ic
return new return new
...@@ -66,30 +52,12 @@ class InitialConditionsDict(SQLSubModel): ...@@ -66,30 +52,12 @@ class InitialConditionsDict(SQLSubModel):
execute("DELETE FROM initial_conditions") execute("DELETE FROM initial_conditions")
for reach in self._reach: for reach in self._dict:
data["reach"] = reach data["reach"] = reach
ok &= self._reach[reach]._sql_save(execute, data) ok &= self._dict[reach]._sql_save(execute, data)
return ok 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): def new(self, reach):
new = InitialConditions(reach = reach, status = self._status) new = InitialConditions(reach = reach, status = self._status)
self.set(reach, new) self.set(reach, new)
......
# 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)
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment