Mainwindow: Checker: Add table.

setup.py
Pierre-Antoine Rouby 2024-03-20 12:24:13 +01:00
parent 3be4e6c112
commit 30170df1b1
7 changed files with 150 additions and 10 deletions

View File

@ -57,6 +57,7 @@ class AbstractModelChecker(object):
def __init__(self):
self._name = ""
self._description = ""
self._solver = "study"
self._modules = Modules.NONE
self._status = STATUS.UNKNOWN

View File

@ -23,6 +23,8 @@ from tools import flatten, timer
from PyQt5.QtCore import QCoreApplication
from Modules import Modules
from Checker.Checker import AbstractModelChecker, STATUS
from Checker.Study import StudyGeometryChecker
@ -30,7 +32,7 @@ _translate = QCoreApplication.translate
class MageNetworkGraphChecker(AbstractModelChecker):
def __init__(self, connectivity=True):
def __init__(self, connectivity=True, version="mage8"):
super(MageNetworkGraphChecker, self).__init__()
self._mode_conn = connectivity
@ -44,6 +46,7 @@ class MageNetworkGraphChecker(AbstractModelChecker):
"Checker", f"Mage network graph {mode} checker")
self._description = _translate(
"Checker", "Check if the network graph is valid")
self._solver = version
self._modules = Modules.NETWORK
@timer
@ -200,7 +203,7 @@ class MageNetworkGraphChecker(AbstractModelChecker):
class MageGeometryGuideLineChecker(StudyGeometryChecker):
def __init__(self):
def __init__(self, version="mage8"):
super(MageGeometryGuideLineChecker, self).__init__()
self._name = _translate("Checker", "Mage geometry guide line checker")
@ -209,6 +212,7 @@ class MageGeometryGuideLineChecker(StudyGeometryChecker):
"Check if exists geometry guide line is correctly defined \
for each reaches of the study"
)
self._solver = version
self._modules = Modules.GEOMETRY
self._reachs = []

View File

@ -20,6 +20,7 @@ import time
from PyQt5.QtCore import QCoreApplication
from Modules import Modules
from Checker.Checker import AbstractModelChecker, STATUS
_translate = QCoreApplication.translate

View File

@ -36,7 +36,9 @@ class Modules(Flag):
HYDRAULIC_STRUCTURES = auto()
RESERVOIR = auto()
SEDIMENT_LAYER = auto()
RESULT = auto()
# Results
RESULTS = auto()
# Display
WINDOW_LIST = auto()
@ -44,3 +46,31 @@ class Modules(Flag):
@classmethod
def all(cls):
return ~cls.NONE
@classmethod
def modelling(cls):
return (
cls.NETWORK
| cls.GEOMETRY
| cls.BOUNDARY_CONDITION
| cls.LATERAL_CONTRIBUTION
| cls.FRICTION
| cls.INITIAL_CONDITION
| cls.HYDRAULIC_STRUCTURES
| cls.RESERVOIR
| cls.SEDIMENT_LAYER
)
@classmethod
def modelling_list(cls):
return [
cls.NETWORK,
cls.GEOMETRY,
cls.BOUNDARY_CONDITION,
cls.LATERAL_CONTRIBUTION,
cls.FRICTION,
cls.INITIAL_CONDITION,
cls.HYDRAULIC_STRUCTURES,
cls.RESERVOIR,
cls.SEDIMENT_LAYER,
]

View File

@ -16,6 +16,9 @@
# -*- coding: utf-8 -*-
import logging
from functools import reduce
from tools import trace, timer
from PyQt5.QtCore import (
@ -35,9 +38,11 @@ from PyQt5.QtWidgets import (
QComboBox,
)
from Modules import Modules
from Checker.Checker import STATUS
from View.Tools.PamhyrTable import PamhyrTableModel
_translate = QCoreApplication.translate
logger = logging.getLogger()
class TableModel(PamhyrTableModel):
@ -68,3 +73,68 @@ class TableModel(PamhyrTableModel):
return self._data[row].summary
return QVariant()
class TabTableModel(PamhyrTableModel):
def compute_status(self, row, column):
module = self._opt_data[row]
solver = self._headers[column]
checkers = filter(
lambda checker: checker._modules is module,
filter(
lambda checker: checker._solver is solver,
self._data
)
)
checkers_status = list(
map(
lambda c: c._status,
checkers
)
)
status = STATUS.UNKNOWN
if len(checkers_status) > 0:
status = reduce(lambda acc, c: acc | c, checkers_status)
logger.debug(f"Checkers: {row}, {column}: {checkers_status} {status}")
return status, checkers_status
def data(self, index, role):
row = index.row()
column = index.column()
if role == Qt.ForegroundRole:
if self._headers[column] == "type":
return QVariant()
color = Qt.gray
status, _ = self.compute_status(row, column)
if status is STATUS.OK:
color = Qt.green
elif status is STATUS.WARNING:
color = Qt.yellow
elif status is STATUS.ERROR:
color = Qt.red
return QBrush(color)
if role == Qt.ItemDataRole.DisplayRole:
if self._headers[column] == "type":
return str(self._opt_data[row])
value = "UNKNOWN"
status, _ = self.compute_status(row, column)
if status is STATUS.OK:
value = "OK"
elif status is STATUS.WARNING:
value = "WARNING"
elif status is STATUS.ERROR:
value = "ERROR"
return value
return QVariant()

View File

@ -193,7 +193,7 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit):
tab_widget = self.findChild(QTabWidget, "tabWidget")
self._tab_widget_checker = WidgetChecker(
study=self._study, parent=self
study=self._study, config=self.conf, parent=self
)
tab_widget.addTab(

View File

@ -18,9 +18,18 @@
import logging
from tools import timer, trace
from tools import timer, trace, flatten
from PyQt5.QtWidgets import (
QTableView,
)
from Modules import Modules
from Model.Study import Study
from Solver.Solvers import solver_type_list, solver_long_name
from View.Tools.PamhyrWidget import PamhyrWidget
from View.CheckList.Table import TabTableModel
logger = logging.getLogger()
@ -28,20 +37,45 @@ logger = logging.getLogger()
class WidgetChecker(PamhyrWidget):
_pamhyr_ui = "MainWindowTabCheckers"
def __init__(self, study=None, parent=None):
def __init__(self, study=None, config=None, parent=None):
self._study = study
self._config = config
super(WidgetChecker, self).__init__(
parent=parent
)
self._checkers = set()
self.setup_solver_list()
self.setup_checker_list()
self.setup_table()
self.setup_list()
def setup_solver_list(self):
self._solvers = list(
map(
lambda solver: solver_type_list[solver],
solver_type_list
)
)
def setup_checker_list(self):
self._checkers = flatten(
map(
lambda solver: solver.checkers(),
self._solvers + [Study]
)
)
def setup_table(self):
return
header = {'type': "Type", **solver_long_name}
table = self.find(QTableView, f"tableView_checker")
self._table = TabTableModel(
table_view=table,
table_headers=header,
data=self._checkers,
opt_data=Modules.modelling_list()
)
def setup_list(self):
return