Commit 6f3e1e31 authored by Youcef Aouad's avatar Youcef Aouad
Browse files

INI table db

No related merge requests found
Pipeline #55944 passed with stages
in 58 seconds
Showing with 55 additions and 206 deletions
+55 -206
...@@ -62,7 +62,7 @@ class InitialConditionsAdisTS(SQLSubModel): ...@@ -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): ...@@ -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): ...@@ -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): ...@@ -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): ...@@ -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
......
...@@ -41,6 +41,7 @@ class InitialConditionsAdisTSList(PamhyrModelList): ...@@ -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:
......
...@@ -234,6 +234,7 @@ class River(Graph, SQLSubModel): ...@@ -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):
......
...@@ -138,7 +138,6 @@ class MoveCommand(QUndoCommand): ...@@ -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): ...@@ -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)
......
...@@ -36,9 +36,7 @@ from PyQt5.QtWidgets import ( ...@@ -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): ...@@ -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): ...@@ -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): ...@@ -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()
...@@ -23,170 +23,57 @@ from PyQt5.QtWidgets import ( ...@@ -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
def redo(self): elif self._column == "concentration":
self._ics.get(self._row)[self._column] = self._new self._data[self._row].concentration = self._old
elif self._column == "eg":
self._data[self._row].eg = self._old
class AddCommand(QUndoCommand): elif self._column == "em":
def __init__(self, ics, index): self._data[self._row].em = self._old
QUndoCommand.__init__(self) elif self._column == "ed":
self._data[self._row].ed = self._old
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): def redo(self):
self._ics.delete_i(self._rows) if self._column == "name":
self._data[self._row].name = self._new
elif self._column == "concentration":
class SortCommand(QUndoCommand): self._data[self._row].concentration = self._new
def __init__(self, ics, _reverse): elif self._column == "eg":
QUndoCommand.__init__(self) self._data[self._row].eg = self._new
elif self._column == "em":
self._ics = ics self._data[self._row].em = self._new
self._reverse = _reverse elif self._column == "ed":
self._data[self._row].ed = self._new
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)
...@@ -43,9 +43,7 @@ from PyQt5.QtWidgets import ( ...@@ -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): ...@@ -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): ...@@ -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):
......
...@@ -194,6 +194,7 @@ class PollutantsWindow(PamhyrWindow): ...@@ -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))
......
No preview for this file type
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment