INI table db

adists_num
Youcef AOUAD 2024-06-11 11:43:04 +02:00
parent 7df0750c58
commit 6f3e1e31f0
9 changed files with 55 additions and 206 deletions

View File

@ -62,7 +62,7 @@ class InitialConditionsAdisTS(SQLSubModel):
@classmethod @classmethod
def _db_create(cls, execute): def _db_create(cls, execute):
execute(""" execute("""
CREATE TABLE initial_conditions( CREATE TABLE initial_conditions_adists(
id INTEGER NOT NULL PRIMARY KEY, id INTEGER NOT NULL PRIMARY KEY,
pollutant INTEGER NOT NULL, pollutant INTEGER NOT NULL,
name TEXT NOT NULL, name TEXT NOT NULL,
@ -93,9 +93,11 @@ class InitialConditionsAdisTS(SQLSubModel):
table = execute( table = execute(
"SELECT id, pollutant, name, concentration, eg, em, ed, " + "SELECT id, pollutant, name, concentration, eg, em, ed, " +
"enabled " + "enabled " +
"FROM initial_conditions" "FROM initial_conditions_adists"
) )
print("db load ic adists : ", table)
if table is not None: if table is not None:
for row in table: for row in table:
IC_id = row[0] IC_id = row[0]
@ -113,6 +115,7 @@ class InitialConditionsAdisTS(SQLSubModel):
status=data['status'] status=data['status']
) )
IC.pollutant = pollutant
IC.concentration = concentration IC.concentration = concentration
IC.eg = eg IC.eg = eg
IC.em = em IC.em = em
@ -127,31 +130,31 @@ class InitialConditionsAdisTS(SQLSubModel):
return new return new
def _db_save(self, execute, data=None): def _db_save(self, execute, data=None):
execute(f"DELETE FROM initial_conditions WHERE id = {self.id}") execute(f"DELETE FROM initial_conditions_adists WHERE id = {self.id}")
pollutant = -1 pollutant = -1
if self.pollutant is not None: if self.pollutant is not None:
pollutant = self.pollutant pollutant = self.pollutant
concentration = -1 concentration = -1.
if self.concentration is not None: if self.concentration is not None:
concentration = self.concentration concentration = self.concentration
eg = -1 eg = -1.
if self.eg is not None: if self.eg is not None:
eg = self.eg eg = self.eg
em = -1 em = -1.
if self.em is not None: if self.em is not None:
em = self.em em = self.em
ed = -1 ed = -1.
if self.ed is not None: if self.ed is not None:
ed = self.ed ed = self.ed
sql = ( sql = (
"INSERT INTO " + "INSERT INTO " +
"initial_conditions(" + "initial_conditions_adists(" +
"id, pollutant, name, concentration, " + "id, pollutant, name, concentration, " +
"eg, em, ed, enabled" + "eg, em, ed, enabled" +
") " + ") " +
@ -160,6 +163,7 @@ class InitialConditionsAdisTS(SQLSubModel):
f"{concentration}, {eg}, {em}, {ed}, {self._enabled}" + f"{concentration}, {eg}, {em}, {ed}, {self._enabled}" +
")" ")"
) )
execute(sql) execute(sql)
data['ic_default_id'] = self.id data['ic_default_id'] = self.id

View File

@ -41,6 +41,7 @@ class InitialConditionsAdisTSList(PamhyrModelList):
return new return new
def _db_save(self, execute, data=None): def _db_save(self, execute, data=None):
print("db save ic adists")
execute("DELETE FROM initial_conditions") execute("DELETE FROM initial_conditions")
if data is None: if data is None:

View File

@ -234,6 +234,7 @@ class River(Graph, SQLSubModel):
REPLineList, REPLineList,
OutputKpAdistsList, OutputKpAdistsList,
PollutantsList, PollutantsList,
InitialConditionsAdisTSList,
] ]
def __init__(self, status=None): def __init__(self, status=None):

View File

@ -138,7 +138,6 @@ class MoveCommand(QUndoCommand):
else: else:
self._ics.move_down(self._i) self._ics.move_down(self._i)
class InsertCommand(QUndoCommand): class InsertCommand(QUndoCommand):
def __init__(self, ics, row, ic): def __init__(self, ics, row, ic):
QUndoCommand.__init__(self) QUndoCommand.__init__(self)
@ -155,7 +154,6 @@ class InsertCommand(QUndoCommand):
for ic in self._ic: for ic in self._ic:
self._ics.insert(self._row, ic) self._ics.insert(self._row, ic)
class DuplicateCommand(QUndoCommand): class DuplicateCommand(QUndoCommand):
def __init__(self, ics, rows, ic): def __init__(self, ics, rows, ic):
QUndoCommand.__init__(self) QUndoCommand.__init__(self)

View File

@ -36,9 +36,7 @@ from PyQt5.QtWidgets import (
from View.Tools.PamhyrTable import PamhyrTableModel from View.Tools.PamhyrTable import PamhyrTableModel
from View.InitialConditionsAdisTS.UndoCommand import ( from View.InitialConditionsAdisTS.UndoCommand import (
SetCommand, AddCommand, DelCommand, SetCommand,
SortCommand, MoveCommand, InsertCommand,
DuplicateCommand, GenerateCommand,
) )
logger = logging.getLogger() logger = logging.getLogger()
@ -92,7 +90,7 @@ class InitialConditionTableDefaultModel(PamhyrTableModel):
if self._headers[column] is not None: if self._headers[column] is not None:
self._undo.push( self._undo.push(
SetCommand( SetCommand(
self._lst, row, self._headers[column], value self._data, row, self._headers[column], value
) )
) )
except Exception as e: except Exception as e:
@ -102,36 +100,6 @@ class InitialConditionTableDefaultModel(PamhyrTableModel):
self.dataChanged.emit(index, index) self.dataChanged.emit(index, index)
return True return True
def paste(self, index, header, data):
if len(header) != 0:
logger.error("Unexpected header in IC past data")
return
if len(data) == 0:
logger.error("Empty data")
return
if len(data[0]) != 3:
logger.error(f"Unexpected data size: [{data[0]}, ...]")
return
self.layoutAboutToBeChanged.emit()
self._undo.push(
InsertCommand(
self._lst, index,
list(
map(
lambda d: self._lst.new_from_data(*d),
data
)
)
)
)
self.layoutAboutToBeChanged.emit()
self.layoutChanged.emit()
def undo(self): def undo(self):
self._undo.undo() self._undo.undo()
self.layoutChanged.emit() self.layoutChanged.emit()
@ -140,10 +108,3 @@ class InitialConditionTableDefaultModel(PamhyrTableModel):
self._undo.redo() self._undo.redo()
self.layoutChanged.emit() self.layoutChanged.emit()
def generate(self, generator, param):
self._undo.push(
GenerateCommand(
self._lst, generator, param
)
)
self.layoutChanged.emit()

View File

@ -23,170 +23,57 @@ from PyQt5.QtWidgets import (
QMessageBox, QUndoCommand, QUndoStack, QMessageBox, QUndoCommand, QUndoStack,
) )
from Model.InitialConditions.InitialConditions import InitialConditions from Model.InitialConditionsAdisTS.InitialConditionsAdisTS import InitialConditionsAdisTS
from Model.InitialConditions.InitialConditionsDict import InitialConditionsDict from Model.InitialConditionsAdisTS.InitialConditionsAdisTSList import InitialConditionsAdisTSList
class SetCommand(QUndoCommand): class SetCommand(QUndoCommand):
def __init__(self, ics, row, column, new_value): def __init__(self, data, row, column, new_value):
QUndoCommand.__init__(self) QUndoCommand.__init__(self)
self._ics = ics self._data = data
self._row = row self._row = row
self._column = column self._column = column
self._old = self._ics.get(self._row)[column]
if self._column == "name":
self._old = self._data[self._row].name
elif self._column == "concentration":
print(self._column, self._data[self._row].concentration, new_value)
self._old = self._data[self._row].concentration
elif self._column == "eg":
self._old = self._data[self._row].eg
elif self._column == "em":
self._old = self._data[self._row].em
elif self._column == "ed":
self._old = self._data[self._row].ed
_type = float _type = float
if column == "name" or column == "comment": if column == "name":
_type = str _type = str
self._new = _type(new_value) self._new = _type(new_value)
def undo(self): def undo(self):
self._ics.get(self._row)[self._column] = self._old if self._column == "name":
self._data[self._row].name = 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
def redo(self): def redo(self):
self._ics.get(self._row)[self._column] = self._new if self._column == "name":
self._data[self._row].name = 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
class AddCommand(QUndoCommand):
def __init__(self, ics, index):
QUndoCommand.__init__(self)
self._ics = ics
self._index = index
self._new = None
def undo(self):
self._ics.delete_i([self._index])
def redo(self):
if self._new is None:
self._new = self._ics.new(self._index)
else:
self._ics.insert(self._index, self._new)
class DelCommand(QUndoCommand):
def __init__(self, ics, rows):
QUndoCommand.__init__(self)
self._ics = ics
self._rows = rows
self._ic = []
for row in rows:
self._ic.append((row, self._ics.get(row)))
self._ic.sort()
def undo(self):
for row, el in self._ic:
self._ics.insert(row, el)
def redo(self):
self._ics.delete_i(self._rows)
class SortCommand(QUndoCommand):
def __init__(self, ics, _reverse):
QUndoCommand.__init__(self)
self._ics = ics
self._reverse = _reverse
self._old = self._ics.data
self._indexes = None
def undo(self):
ll = self._ics.data
self._ics.sort(
key=lambda x: self._indexes[ll.index(x)]
)
def redo(self):
self._ics.sort(
reverse=self._reverse,
key=lambda x: x["kp"]
)
if self._indexes is None:
self._indexes = list(
map(
lambda p: self._old.index(p),
self._ics.data
)
)
self._old = None
class MoveCommand(QUndoCommand):
def __init__(self, ics, up, i):
QUndoCommand.__init__(self)
self._ics = ics
self._up = up == "up"
self._i = i
def undo(self):
if self._up:
self._ics.move_up(self._i)
else:
self._ics.move_down(self._i)
def redo(self):
if self._up:
self._ics.move_up(self._i)
else:
self._ics.move_down(self._i)
class InsertCommand(QUndoCommand):
def __init__(self, ics, row, ic):
QUndoCommand.__init__(self)
self._ics = ics
self._row = row
self._ic = deepcopy(ic)
self._ic.reverse()
def undo(self):
self._ics.delete(self._ic)
def redo(self):
for ic in self._ic:
self._ics.insert(self._row, ic)
class DuplicateCommand(QUndoCommand):
def __init__(self, ics, rows, ic):
QUndoCommand.__init__(self)
self._ics = ics
self._rows = rows
self._ic = deepcopy(ic)
self._ic.reverse()
def undo(self):
self._ics.delete(self._ic)
def redo(self):
for ic in self._ics:
self._ics.insert(self._rows[0], ic)
class GenerateCommand(QUndoCommand):
def __init__(self, ics, generator, param):
QUndoCommand.__init__(self)
self._ics = ics
self._param = param
self._copy = self._ics.data
self._generator = generator
def undo(self):
self._ics.data = self._copy
def redo(self):
if self._generator == "growing":
self._ics.generate_growing_constante_height(self._param)
elif self._generator == "discharge":
self._ics.generate_discharge(self._param)

View File

@ -43,9 +43,7 @@ from PyQt5.QtWidgets import (
from Modules import Modules from Modules import Modules
from View.InitialConditionsAdisTS.UndoCommand import ( from View.InitialConditionsAdisTS.UndoCommand import (
SetCommand, AddCommand, DelCommand, SetCommand,
SortCommand, MoveCommand, InsertCommand,
DuplicateCommand,
) )
from View.InitialConditionsAdisTS.TableDefault import ( from View.InitialConditionsAdisTS.TableDefault import (
@ -68,7 +66,6 @@ class InitialConditionsAdisTSWindow(PamhyrWindow):
def __init__(self, data=None, study=None, config=None, parent=None): def __init__(self, data=None, study=None, config=None, parent=None):
self._data = [] self._data = []
self._data.append(data) self._data.append(data)
#print(self._data.name, self._data.concentration, self._data.eg, self._data.em, self._data.ed)
trad = IcAdisTSTranslate() trad = IcAdisTSTranslate()
name = ( name = (
@ -108,7 +105,6 @@ class InitialConditionsAdisTSWindow(PamhyrWindow):
table.setModel(self._table) table.setModel(self._table)
table.setSelectionBehavior(QAbstractItemView.SelectRows) table.setSelectionBehavior(QAbstractItemView.SelectRows)
table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
#table.verticalHeader()
table.setAlternatingRowColors(True) table.setAlternatingRowColors(True)
def index_selected_row(self): def index_selected_row(self):

View File

@ -194,6 +194,7 @@ class PollutantsWindow(PamhyrWindow):
for row in rows: for row in rows:
pollutant_id = self._pollutants_lst.get(row).id pollutant_id = self._pollutants_lst.get(row).id
ics_adists = next(filter(lambda x: x.pollutant == pollutant_id, ics_adists = next(filter(lambda x: x.pollutant == pollutant_id,
self._study.river.initial_conditions_adists.lst)) self._study.river.initial_conditions_adists.lst))