AdisTS AdisTT: fix initial conditions in scenario mode, now correctly saved in database, and load correctly, not creating duplicata when two datas have same ID with different scenario_id

temperature_test
Dylan Jeannin 2026-07-28 17:33:56 +02:00
parent afe0217655
commit 252ac257fe
6 changed files with 73 additions and 107 deletions

View File

@ -31,10 +31,11 @@ class ICAdisTSSpec(SQLSubModel):
_sub_classes = []
def __init__(self, id: int = -1, name: str = "",
status=None, owner_scenario=None):
super(ICAdisTSSpec, self).__init__()
self._status = status
status=None, owner_scenario=-1):
super(ICAdisTSSpec, self).__init__(
id=id, status=status,
owner_scenario=owner_scenario
)
self._name_section = name
self._reach = None
@ -190,7 +191,7 @@ class ICAdisTSSpec(SQLSubModel):
new_spec.rate = rate
new_spec.enabled = enabled
# loaded.add(pid)
loaded.add(id)
new.append(new_spec)
data["scenario"] = scenario.parent
@ -234,7 +235,7 @@ class ICAdisTSSpec(SQLSubModel):
@name.setter
def name(self, name):
self._name_section = name
self._status.modified()
self.modified()
@property
def reach(self):
@ -243,7 +244,7 @@ class ICAdisTSSpec(SQLSubModel):
@reach.setter
def reach(self, reach):
self._reach = reach
self._status.modified()
self.modified()
@property
def start_rk(self):
@ -252,7 +253,7 @@ class ICAdisTSSpec(SQLSubModel):
@start_rk.setter
def start_rk(self, start_rk):
self._start_rk = start_rk
self._status.modified()
self.modified()
@property
def end_rk(self):
@ -261,7 +262,7 @@ class ICAdisTSSpec(SQLSubModel):
@end_rk.setter
def end_rk(self, end_rk):
self._end_rk = end_rk
self._status.modified()
self.modified()
@property
def concentration(self):
@ -270,7 +271,7 @@ class ICAdisTSSpec(SQLSubModel):
@concentration.setter
def concentration(self, concentration):
self._concentration = concentration
self._status.modified()
self.modified()
@property
def eg(self):
@ -279,7 +280,7 @@ class ICAdisTSSpec(SQLSubModel):
@eg.setter
def eg(self, eg):
self._eg = eg
self._status.modified()
self.modified()
@property
def em(self):
@ -288,7 +289,7 @@ class ICAdisTSSpec(SQLSubModel):
@em.setter
def em(self, em):
self._em = em
self._status.modified()
self.modified()
@property
def ed(self):
@ -297,7 +298,7 @@ class ICAdisTSSpec(SQLSubModel):
@ed.setter
def ed(self, ed):
self._ed = ed
self._status.modified()
self.modified()
@property
def rate(self):
@ -306,7 +307,7 @@ class ICAdisTSSpec(SQLSubModel):
@rate.setter
def rate(self, rate):
self._rate = rate
self._status.modified()
self.modified()
@property
def enabled(self):
@ -315,4 +316,4 @@ class ICAdisTSSpec(SQLSubModel):
@enabled.setter
def enabled(self, enabled):
self._enabled = enabled
self._status.modified()
self.modified()

View File

@ -31,10 +31,11 @@ class ICTemperatureSpec(SQLSubModel):
_sub_classes = []
def __init__(self, id: int = -1, name: str = "",
status=None, owner_scenario=None):
super(ICTemperatureSpec, self).__init__()
self._status = status
status=None, owner_scenario=-1):
super(ICTemperatureSpec, self).__init__(
id=id, status=status,
owner_scenario=owner_scenario
)
self._name_section = name
self._reach = None
@ -122,7 +123,7 @@ class ICTemperatureSpec(SQLSubModel):
new_spec.end_rk = end_rk
new_spec.temperature = temperature
# loaded.add(pid)
loaded.add(id)
new.append(new_spec)
data["scenario"] = scenario.parent
@ -163,7 +164,7 @@ class ICTemperatureSpec(SQLSubModel):
@name.setter
def name(self, name):
self._name_section = name
self._status.modified()
self.modified()
@property
def reach(self):
@ -172,7 +173,7 @@ class ICTemperatureSpec(SQLSubModel):
@reach.setter
def reach(self, reach):
self._reach = reach
self._status.modified()
self.modified()
@property
def start_rk(self):
@ -181,7 +182,7 @@ class ICTemperatureSpec(SQLSubModel):
@start_rk.setter
def start_rk(self, start_rk):
self._start_rk = start_rk
self._status.modified()
self.modified()
@property
def end_rk(self):
@ -190,7 +191,7 @@ class ICTemperatureSpec(SQLSubModel):
@end_rk.setter
def end_rk(self, end_rk):
self._end_rk = end_rk
self._status.modified()
self.modified()
@property
def temperature(self):
@ -199,4 +200,4 @@ class ICTemperatureSpec(SQLSubModel):
@temperature.setter
def temperature(self, temperature):
self._temperature = temperature
self._status.modified()
self.modified()

View File

@ -198,13 +198,14 @@ class InitialConditionTableModel(PamhyrTableModel):
if self._headers[column] != "reach":
self._undo.push(
SetCommandSpec(
self._lst, row, self._headers[column], value
self._data, self._lst, row,
self._headers[column], value
)
)
elif self._headers[column] == "reach":
self._undo.push(
SetCommandSpec(
self._lst, row, self._headers[column],
self._data, self._lst, row, self._headers[column],
self._river.edge(value).id
)
)

View File

@ -80,31 +80,31 @@ class SetCommand(QUndoCommand):
class SetCommandSpec(QUndoCommand):
def __init__(self, data, row, column, new_value):
def __init__(self, parent, data, row, column, new_value):
QUndoCommand.__init__(self)
self._data = data
self._row = row
self._parent = parent
self._value = data[row]
self._column = column
if self._column == "name":
self._old = self._data[self._row].name
self._old = self._value.name
elif self._column == "reach":
self._old = self._data[self._row].reach
self._old = self._value.reach
elif self._column == "start_rk":
self._old = self._data[self._row].start_rk
self._old = self._value.start_rk
elif self._column == "end_rk":
self._old = self._data[self._row].end_rk
self._old = self._value.end_rk
elif self._column == "concentration":
self._old = self._data[self._row].concentration
self._old = self._value.concentration
elif self._column == "eg":
self._old = self._data[self._row].eg
self._old = self._value.eg
elif self._column == "em":
self._old = self._data[self._row].em
self._old = self._value.em
elif self._column == "ed":
self._old = self._data[self._row].ed
self._old = self._value.ed
elif self._column == "rate":
self._old = self._data[self._row].rate
self._old = self._value.rate
_type = float
if column == "name":
@ -115,44 +115,12 @@ class SetCommandSpec(QUndoCommand):
self._new = _type(new_value)
def undo(self):
if self._column == "name":
self._data[self._row].name = self._old
elif self._column == "reach":
self._data[self._row].reach = self._old
elif self._column == "start_rk":
self._data[self._row].start_rk = self._old
elif self._column == "end_rk":
self._data[self._row].end_rk = self._old
elif self._column == "concentration":
self._data[self._row].concentration = self._old
elif self._column == "eg":
self._data[self._row].eg = self._old
elif self._column == "em":
self._data[self._row].em = self._old
elif self._column == "ed":
self._data[self._row].ed = self._old
elif self._column == "rate":
self._data[self._row].rate = self._old
setattr(self._value, self._column, self._old)
self._parent.modified()
def redo(self):
if self._column == "name":
self._data[self._row].name = self._new
elif self._column == "reach":
self._data[self._row].reach = self._new
elif self._column == "start_rk":
self._data[self._row].start_rk = self._new
elif self._column == "end_rk":
self._data[self._row].end_rk = self._new
elif self._column == "concentration":
self._data[self._row].concentration = self._new
elif self._column == "eg":
self._data[self._row].eg = self._new
elif self._column == "em":
self._data[self._row].em = self._new
elif self._column == "ed":
self._data[self._row].ed = self._new
elif self._column == "rate":
self._data[self._row].rate = self._new
setattr(self._value, self._column, self._new)
self._parent.modified()
class AddCommand(QUndoCommand):

View File

@ -36,7 +36,7 @@ from PyQt5.QtWidgets import (
from View.Tools.PamhyrTable import PamhyrTableModel
from View.InitialConditionsTemperature.UndoCommand import (
SetCommand, AddCommand, SetCommandSpec,
AddCommand, SetCommandSpec,
DelCommand,
)
@ -214,22 +214,15 @@ class InitialConditionTableModel(PamhyrTableModel):
column = index.column()
try:
if self._headers[column] in ["name", "temperature"]:
self._undo.push(
SetCommand(
self._lst, row, self._headers[column], value
)
)
else:
self._undo.push(
SetCommandSpec(
self._lst, row, self._headers[column],
(self._river.edge(value).id
if self._headers[column] == "reach"
else value
)
self._undo.push(
SetCommandSpec(
self._data, self._lst, row, self._headers[column],
(self._river.edge(value).id
if self._headers[column] == "reach"
else value
)
)
)
except Exception as e:
logger.info(e)
logger.debug(traceback.format_exc())

View File

@ -62,21 +62,21 @@ class SetCommand(QUndoCommand):
class SetCommandSpec(QUndoCommand):
def __init__(self, data, row, column, new_value):
def __init__(self, parent, data, row, column, new_value):
QUndoCommand.__init__(self)
self._data = data
self._row = row
self._parent = parent
self._value = data[row]
self._column = column
if self._column == "name":
self._old = self._data[self._row].name
self._old = self._value.name
elif self._column == "reach":
self._old = self._data[self._row].reach
self._old = self._value.reach
elif self._column == "rk":
self._old = self._data[self._row].start_rk
self._old = self._value.start_rk
elif self._column == "temperature":
self._old = self._data[self._row].temperature
self._old = self._value.temperature
_type = float
if column == "name":
@ -88,25 +88,27 @@ class SetCommandSpec(QUndoCommand):
def undo(self):
if self._column == "name":
self._data[self._row].name = self._old
self._value.name = self._old
elif self._column == "reach":
self._data[self._row].reach = self._old
self._value.reach = self._old
elif self._column == "rk":
self._data[self._row].start_rk = self._old
self._data[self._row].end_rk = self._old
self._value.start_rk = self._old
self._value.end_rk = self._old
elif self._column == "temperature":
self._data[self._row].temperature = self._old
self._value.temperature = self._old
self._parent.modified()
def redo(self):
if self._column == "name":
self._data[self._row].name = self._new
self._value.name = self._new
elif self._column == "reach":
self._data[self._row].reach = self._new
self._value.reach = self._new
elif self._column == "rk":
self._data[self._row].start_rk = self._new
self._data[self._row].end_rk = self._new
self._value.start_rk = self._new
self._value.end_rk = self._new
elif self._column == "temperature":
self._data[self._row].temperature = self._new
self._value.temperature = self._new
self._parent.modified()
class AddCommand(QUndoCommand):