Model, SQL: Fix solver parameters loading.

results
Pierre-Antoine Rouby 2023-07-03 11:46:49 +02:00
parent 1b9115ef87
commit 9cf3177b57
2 changed files with 43 additions and 27 deletions

View File

@ -251,9 +251,7 @@ class River(Graph, SQLSubModel):
) )
# Parameters # Parameters
for solver in new._parameters: new._parameters = SolverParametersList._sql_load(
data["solver"] = solver
new._parameters[solver] = SolverParametersList(
execute, execute,
data data
) )

View File

@ -2,6 +2,7 @@
from copy import copy from copy import copy
from tools import trace, timer from tools import trace, timer
from Solver.Solvers import solver_type_list
from Model.DB import SQLSubModel from Model.DB import SQLSubModel
@ -81,32 +82,33 @@ class SolverParametersList(SQLSubModel):
@classmethod @classmethod
def _sql_load(cls, execute, data = None): def _sql_load(cls, execute, data = None):
status = data["status"] 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
st = solver_type_list[solver]
n = cls(solver_type = st, status = status)
table = execute( table = execute(
"SELECT ind, name, value " + "SELECT ind, name, value " +
"FROM solver_parameter " + "FROM solver_parameter " +
f"WHERE solver = '{solver.type}'" f"WHERE solver = '{solver}'"
) )
for _ in table:
new._parameters.append(None)
for row in table: for row in table:
ind = row[0] ind = row[0]
name = row[1] name = row[1]
value = row[2] value = row[2]
p = cls( n.set_value(name, value)
name = name,
value = value,
status = status
)
new._parameters[ind] = p
return stricklers new[solver] = n
return new
def _sql_save(self, execute, data = None): def _sql_save(self, execute, data = None):
t = self._solver._type t = self._solver._type
@ -146,6 +148,22 @@ class SolverParametersList(SQLSubModel):
self._parameters[index] = new self._parameters[index] = new
self._status.modified() 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): def new(self, index):
n = Parameter(status = self._status) n = Parameter(status = self._status)
self._parameters.insert(index, n) self._parameters.insert(index, n)