diff --git a/src/Model/River.py b/src/Model/River.py index 15f3e6e4e2c2c3aed9c8f19f04c1ab422d23eac4..da323b6c250713abc3f2b09b8bd135d3afba0c32 100644 --- a/src/Model/River.py +++ b/src/Model/River.py @@ -251,12 +251,10 @@ class River(Graph, SQLSubModel): ) # Parameters - for solver in new._parameters: - data["solver"] = solver - new._parameters[solver] = SolverParametersList( - execute, - data - ) + new._parameters = SolverParametersList._sql_load( + execute, + data + ) return new diff --git a/src/Model/SolverParameters/SolverParametersList.py b/src/Model/SolverParameters/SolverParametersList.py index abac7c4050c8f024b6a6d07a53ead6bb3a423d3b..88d1d567a00a7a739f340a503288b22ddf1a4972 100644 --- a/src/Model/SolverParameters/SolverParametersList.py +++ b/src/Model/SolverParameters/SolverParametersList.py @@ -2,6 +2,7 @@ from copy import copy from tools import trace, timer +from Solver.Solvers import solver_type_list from Model.DB import SQLSubModel @@ -81,32 +82,33 @@ class SolverParametersList(SQLSubModel): @classmethod def _sql_load(cls, execute, data = None): status = data["status"] - solver = data["solver"] + solvers = execute("SELECT DISTINCT solver FROM solver_parameter") + new = {} - new = cls(solver_type = solver, status = status) + for solver in solvers: + solver = solver[0] + if solver not in solver_type_list: + continue - table = execute( - "SELECT ind, name, value " + - "FROM solver_parameter " + - f"WHERE solver = '{solver.type}'" - ) + st = solver_type_list[solver] + n = cls(solver_type = st, status = status) - for _ in table: - new._parameters.append(None) + table = execute( + "SELECT ind, name, value " + + "FROM solver_parameter " + + f"WHERE solver = '{solver}'" + ) - for row in table: - ind = row[0] - name = row[1] - value = row[2] + for row in table: + ind = row[0] + name = row[1] + value = row[2] - p = cls( - name = name, - value = value, - status = status - ) - new._parameters[ind] = p + n.set_value(name, value) + + new[solver] = n - return stricklers + return new def _sql_save(self, execute, data = None): t = self._solver._type @@ -146,6 +148,22 @@ class SolverParametersList(SQLSubModel): self._parameters[index] = new self._status.modified() + def set_value(self, key, value): + for p in self._parameters: + if p["name"] == key: + p["value"] = value + self._status.modified() + return + + self._parameters.append( + Parameter( + name = key, + value = value, + status = self._status + ) + ) + self._status.modified() + def new(self, index): n = Parameter(status = self._status) self._parameters.insert(index, n)