From 9cf3177b57bd675c91343047086194ee62d810ac Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Rouby <pierre-antoine.rouby@inrae.fr> Date: Mon, 3 Jul 2023 11:46:49 +0200 Subject: [PATCH] Model, SQL: Fix solver parameters loading. --- src/Model/River.py | 10 ++-- .../SolverParameters/SolverParametersList.py | 58 ++++++++++++------- 2 files changed, 42 insertions(+), 26 deletions(-) diff --git a/src/Model/River.py b/src/Model/River.py index 15f3e6e4..da323b6c 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 abac7c40..88d1d567 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) -- GitLab