|
|
@@ -1,25 +1,34 @@
|
|
|
"""
|
|
|
"""
|
|
|
from core import mncheck, checking
|
|
|
-import importlib
|
|
|
import logging
|
|
|
-from qgis.core import QgsProject # @UnresolvedImport
|
|
|
+from qgis.core import QgsProject, QgsVectorLayer
|
|
|
|
|
|
from PyQt5 import QtWidgets
|
|
|
from PyQt5 import uic
|
|
|
from PyQt5.Qt import Qt
|
|
|
+from PyQt5.QtCore import QObject, pyqtSignal
|
|
|
from PyQt5.QtGui import QIcon, QPixmap
|
|
|
from PyQt5.QtWidgets import QApplication, QTreeWidgetItem
|
|
|
|
|
|
+from core.checking import TestResult
|
|
|
from core.constants import MAIN, RSCDIR
|
|
|
-from core.mncheck import QgsModel
|
|
|
|
|
|
|
|
|
logger = logging.getLogger("mncheck")
|
|
|
|
|
|
Ui_Main, _ = uic.loadUiType(MAIN / 'ui'/ 'dlg_main.ui')
|
|
|
|
|
|
-# SCHEMAS = ["mn1_rec", "mn2_rec", "mn3_pro", "mn3_exe", "mn3_rec"]
|
|
|
+class QComlink(QObject):
|
|
|
+ started_test = pyqtSignal(TestResult)
|
|
|
+ ended_test = pyqtSignal(TestResult)
|
|
|
+
|
|
|
+ def _started_test(self, test):
|
|
|
+ self.started_test.emit(test)
|
|
|
+
|
|
|
+ def _ended_test(self, test):
|
|
|
+ self.ended_test.emit(test)
|
|
|
+
|
|
|
|
|
|
class DlgMain(QtWidgets.QDialog):
|
|
|
def __init__(self, iface, parent=None):
|
|
|
@@ -53,17 +62,42 @@ class DlgMain(QtWidgets.QDialog):
|
|
|
|
|
|
self.ui.cbb_schemas.currentIndexChanged.connect(self.update_layers_list)
|
|
|
|
|
|
+ self.ui.progress_bar.setVisible(False)
|
|
|
+
|
|
|
self.ui.tree_report.setColumnWidth(0, 35)
|
|
|
self.ui.tree_report.itemClicked.connect(self.tree_item_clicked)
|
|
|
+ self.ui.tree_report.expanded.connect(self.tree_item_expanded)
|
|
|
|
|
|
self.update_layers_list()
|
|
|
|
|
|
+ def tree_item_expanded(self, _):
|
|
|
+ self.tree_auto_resize()
|
|
|
+
|
|
|
+ def tree_auto_resize(self):
|
|
|
+ self.ui.tree_report.resizeColumnToContents(1)
|
|
|
+ self.ui.tree_report.resizeColumnToContents(2)
|
|
|
+ self.ui.tree_report.setColumnWidth(1, self.ui.tree_report.columnWidth(1) + 20)
|
|
|
+ self.ui.tree_report.setColumnWidth(2, self.ui.tree_report.columnWidth(2) + 20)
|
|
|
+
|
|
|
def current_schema(self):
|
|
|
schema_name = self.available_schemas[int(self.ui.cbb_schemas.itemData(self.ui.cbb_schemas.currentIndex()))]
|
|
|
logger.info("Selected schema: %s", schema_name)
|
|
|
|
|
|
return mncheck.get_schema(schema_name)
|
|
|
|
|
|
+ def init_progress_bar(self, value=0, minimum=0, maximum=100):
|
|
|
+ self.ui.progress_bar.setMinimum(minimum)
|
|
|
+ self.ui.progress_bar.setValue(value)
|
|
|
+ self.ui.progress_bar.setMaximum(maximum)
|
|
|
+
|
|
|
+ def test_started(self, test):
|
|
|
+ logger.debug("* %s - start test", test.name)
|
|
|
+
|
|
|
+ def test_ended(self, test):
|
|
|
+ logger.debug("* %s - %s", test.name, test.status_str)
|
|
|
+ self.ui.progress_bar.setValue(self.ui.progress_bar.value() + 1)
|
|
|
+ self.ui.progress_bar.update()
|
|
|
+
|
|
|
def update_layers_list(self):
|
|
|
|
|
|
schema = self.current_schema()
|
|
|
@@ -92,6 +126,8 @@ class DlgMain(QtWidgets.QDialog):
|
|
|
|
|
|
self.ui.tree_report.addTopLevelItem(item)
|
|
|
|
|
|
+ self.tree_auto_resize()
|
|
|
+
|
|
|
|
|
|
def run(self):
|
|
|
|
|
|
@@ -109,17 +145,28 @@ class DlgMain(QtWidgets.QDialog):
|
|
|
logger.error("Aucun testeur trouvé dans le schéma")
|
|
|
return
|
|
|
|
|
|
- for checker in checkers:
|
|
|
- logger.info(f"Execution du checker {checker.__name__}")
|
|
|
- self._run(checker)
|
|
|
+ for checker_cls in checkers:
|
|
|
+ logger.info(f"Execution du checker {checker_cls.__name__}")
|
|
|
+ self._run(checker_cls)
|
|
|
except:
|
|
|
raise
|
|
|
finally:
|
|
|
+ self.tree_auto_resize()
|
|
|
+ self.ui.progress_bar.setVisible(False)
|
|
|
QApplication.restoreOverrideCursor()
|
|
|
|
|
|
- def _run(self, checker):
|
|
|
+ def _run(self, checker_cls):
|
|
|
+
|
|
|
+ checker = checker_cls()
|
|
|
+
|
|
|
+ checker.comlink = QComlink()
|
|
|
+ checker.comlink.started_test.connect(self.test_started)
|
|
|
+ checker.comlink.ended_test.connect(self.test_ended)
|
|
|
+
|
|
|
+ self.ui.progress_bar.setVisible(True)
|
|
|
+ self.init_progress_bar(maximum=len(checker.tests))
|
|
|
|
|
|
- results = checker().run()
|
|
|
+ results = checker.run()
|
|
|
|
|
|
for result in results:
|
|
|
topitem = QTreeWidgetItem()
|
|
|
@@ -156,7 +203,7 @@ class DlgMain(QtWidgets.QDialog):
|
|
|
elif "model" in err.info:
|
|
|
data = err.info["model"]
|
|
|
erritem.setText(1, msg)
|
|
|
- erritem.setText(2, f"{data.layername}")
|
|
|
+ erritem.setText(2, f"{data.layername}".upper())
|
|
|
erritem.setData(1, Qt.UserRole, data)
|
|
|
|
|
|
elif "item" in err.info:
|
|
|
@@ -165,9 +212,12 @@ class DlgMain(QtWidgets.QDialog):
|
|
|
erritem.setText(2, f"{data}")
|
|
|
erritem.setData(1, Qt.UserRole, data)
|
|
|
|
|
|
+ font = erritem.font(2)
|
|
|
+ font.setItalic(True)
|
|
|
+ erritem.setFont(2, font)
|
|
|
+
|
|
|
topitem.addChild(erritem)
|
|
|
|
|
|
- self.ui.tree_report.resizeColumnToContents(1)
|
|
|
|
|
|
def tree_item_clicked(self, item, _):
|
|
|
|
|
|
@@ -176,23 +226,19 @@ class DlgMain(QtWidgets.QDialog):
|
|
|
if not data:
|
|
|
return
|
|
|
|
|
|
- logger.debug("error clicked (data: %s)", data)
|
|
|
-
|
|
|
if hasattr(data, "_feature"):
|
|
|
self.zoom_to_feature(data.layer, data._feature)
|
|
|
|
|
|
elif hasattr(data, "layer"):
|
|
|
self.select_layer(data.layer)
|
|
|
|
|
|
- else:
|
|
|
- logger.error(f"Data unknown: {data}")
|
|
|
-
|
|
|
def select_layer(self, layer):
|
|
|
self.iface.setActiveLayer(layer)
|
|
|
|
|
|
def zoom_to_feature(self, layer, feature):
|
|
|
self.iface.setActiveLayer(layer)
|
|
|
self.iface.mapCanvas().zoomToFeatureExtent(feature.geometry().boundingBox())
|
|
|
+ layer.removeSelection()
|
|
|
layer.select(feature.id())
|
|
|
|
|
|
def show_help(self):
|