diff --git a/src/Model/Geometry/PointXYZ.py b/src/Model/Geometry/PointXYZ.py index bc878318fe4961e1f5556a3b4c4479dea0383379..0fecd1ea8dfa96563902729a04e24fb61ccbb4bc 100644 --- a/src/Model/Geometry/PointXYZ.py +++ b/src/Model/Geometry/PointXYZ.py @@ -32,8 +32,7 @@ class PointXYZ(Point, SQLSubModel): ) """) - cls._create_submodel(execute) - return True + return cls._create_submodel(execute) @classmethod def _sql_update(cls, execute, version): diff --git a/src/Model/Geometry/Reach.py b/src/Model/Geometry/Reach.py index 4e69f582bdbf2ed4e1b2edef1756b6a3f7e5f319..c0140db9f7cdc054602f1ff8b84453e3eaa2100c 100644 --- a/src/Model/Geometry/Reach.py +++ b/src/Model/Geometry/Reach.py @@ -33,13 +33,11 @@ class Reach(SQLSubModel): @classmethod def _sql_create(cls, execute): - cls._create_submodel(execute) - return True + return cls._create_submodel(execute) @classmethod def _sql_update(cls, execute, version): - cls._update_submodel(execute, version) - return None + return cls._update_submodel(execute, version) @classmethod def _sql_load(cls, execute, data = None): diff --git a/src/Model/River.py b/src/Model/River.py index 16095fc4ed52a7683d038788903c2a2fdd7f2295..2b8f88fa14ea9c810c18b9a6ff7044f941dfd464 100644 --- a/src/Model/River.py +++ b/src/Model/River.py @@ -183,7 +183,7 @@ class River(Graph, SQLSubModel): BoundaryConditionList, LateralContributionList, # InitialConditionsDict, - # StricklersList, + StricklersList, # SolverParametersList, ] @@ -236,6 +236,10 @@ class River(Graph, SQLSubModel): execute, data ) + new._stricklers = StricklersList._sql_load( + execute, + data + ) return new @@ -243,6 +247,7 @@ class River(Graph, SQLSubModel): objs = (self._nodes + self._edges) objs.append(self._boundary_condition) objs.append(self._lateral_contribution) + objs.append(self._stricklers) self._save_submodel(execute, objs, data) return True diff --git a/src/Model/Stricklers/Stricklers.py b/src/Model/Stricklers/Stricklers.py index 4eea503603125f8f043c5deace173c6cfd8e31f7..f205048fbb0b8b84d5d5a351fc56ba9b56134e37 100644 --- a/src/Model/Stricklers/Stricklers.py +++ b/src/Model/Stricklers/Stricklers.py @@ -2,17 +2,83 @@ from tools import trace, timer -class Stricklers(object): - def __init__(self, status = None): +from Model.DB import SQLSubModel + +class Stricklers(SQLSubModel): + def __init__(self, name:str = "", + comment:str = "", + minor:float = 35.0, + medium:float = 15.0, + status = None): super(Stricklers, self).__init__() self._status = status - self._name = "" - self._comment = "" + self._name = name + self._comment = comment + + self._minor = minor + self._medium = medium + + + @classmethod + def _sql_create(cls, execute): + execute(""" + CREATE TABLE stricklers( + id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + name TEXT, + comment TEXT, + minor REAL NOT NULL, + medium REAL NOT NULL + ) + """) + + 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): + stricklers = [] + status = data["status"] + + table = execute( + "SELECT name, comment, minor, medium " + + "FROM stricklers" + ) + + for row in table: + name = row[0] + comment = row[1] + minor = row[2] + medium = row[3] + + new = cls( + name = name, + comment = comment, + minor = minor, medium = medium, + status = status + ) + + stricklers.append(new) + + return stricklers + + def _sql_save(self, execute, data = None): + sql = ( + "INSERT INTO " + + "stricklers(name, comment, minor, medium) "+ + "VALUES (" + + f"'{self._sql_format(self.name)}', " + + f"'{self._sql_format(self.comment)}', " + + f"{float(self.minor)}, {float(self.medium)}" + + ")" + ) + execute(sql) - self._minor = 35 - self._medium = 15 + return True def __str__(self): if self._name != "": diff --git a/src/Model/Stricklers/StricklersList.py b/src/Model/Stricklers/StricklersList.py index d2647823008b793bf705d5894c8c5bb6d4890246..6ed1269d533585567597603a00ef4ede67704478 100644 --- a/src/Model/Stricklers/StricklersList.py +++ b/src/Model/Stricklers/StricklersList.py @@ -2,10 +2,15 @@ from tools import trace, timer +from Model.DB import SQLSubModel from Model.Saved import SavedStatus from Model.Stricklers.Stricklers import Stricklers -class StricklersList(object): +class StricklersList(SQLSubModel): + _sub_classes = [ + Stricklers, + ] + def __init__(self, status = None): if status is None: status = SavedStatus() @@ -13,6 +18,32 @@ class StricklersList(object): self._stricks = [] + @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"]) + + new._stricks = Stricklers._sql_load( + execute, + data = data + ) + + return new + + def _sql_save(self, execute, data = None): + if len(self._stricks) != 0: + execute("DELETE FROM stricklers") + + objs = self._stricks + return self._save_submodel(execute, objs, data) + def __len__(self): return len(self._stricks) diff --git a/src/tools.py b/src/tools.py index 1c72b03127b1207e31bfe7a028d951806fbf4461..27127754b67592bc3170b8dfba83671896008e58 100644 --- a/src/tools.py +++ b/src/tools.py @@ -233,7 +233,7 @@ class SQL(object): @timer def execute(self, cmd, fetch_one = True, commit = False): - #print(f"[SQL] {cmd}") + print(f"[SQL] {cmd}") res = self._cur.execute(cmd) if commit: