# 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 . # -*- 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)