diff --git a/src/Checker/Study.py b/src/Checker/Study.py index c650e45a7f8bb9b3507aea1764532f984f38417c..c6c41feda47b968923d653953ae96291797aab25 100644 --- a/src/Checker/Study.py +++ b/src/Checker/Study.py @@ -1,5 +1,7 @@ # -*- coding: utf-8 -*- +import time + from PyQt5.QtCore import QCoreApplication from Checker.Checker import AbstractModelChecker, STATUS @@ -26,7 +28,8 @@ class StudyNetworkReachChecker(AbstractModelChecker): self._summary = "no_river_found" return False - if len(river.edges()) == 0: + edges = list(filter(lambda e: e.is_enable(), river.edges())) + if len(edges) == 0: self._status = STATUS.ERROR self._summary = "no_reach_defined" return False @@ -35,6 +38,48 @@ class StudyNetworkReachChecker(AbstractModelChecker): self._status = STATUS.OK return True +class StudyGeometryChecker(AbstractModelChecker): + def __init__(self): + super(StudyGeometryChecker, self).__init__() + + self._name = _translate("Checker", "Study geometry checker") + self._description = _translate("Checker", "Check if exists geometry for each reach of study") + self._reachs = [] + + def run(self, study): + ok = True + nerror = 0 + summary = "ok" + status = STATUS.OK + + if study is None: + self._status = STATUS.ERROR + self._summary = "invalid_study" + return False + + river = study.river + if river is None: + self._status = STATUS.ERROR + self._summary = "no_river_found" + return False + + edges = list(filter(lambda e: e.is_enable(), river.edges())) + if len(edges) == 0: + self._status = STATUS.ERROR + self._summary = "no_reach_defined" + return False + + for edge in edges: + if edge.is_enable() and len(edge.reach.profiles) < 3: + summary = f"no_geometry_defined" + status = STATUS.ERROR + ok = False + self._reachs.append(edge) + + self._summary = summary + self._status = status + return ok + class DummyOK(AbstractModelChecker): def __init__(self): @@ -44,8 +89,11 @@ class DummyOK(AbstractModelChecker): self._description = _translate("Checker", "Dummy ok") def run(self, study): + time.sleep(1) + self._summary = "ok" self._status = STATUS.OK + return True @@ -57,8 +105,11 @@ class DummyWARNING(AbstractModelChecker): self._description = _translate("Checker", "Dummy warning") def run(self, study): + time.sleep(1) + self._summary = "Warning detected" self._status = STATUS.WARNING + return True class DummyERROR(AbstractModelChecker): @@ -69,6 +120,8 @@ class DummyERROR(AbstractModelChecker): self._description = _translate("Checker", "Dummy error") def run(self, study): + time.sleep(1) + self._summary = "Error detected" self._status = STATUS.ERROR return True diff --git a/src/Model/Network/Edge.py b/src/Model/Network/Edge.py index 4c12c8f700f7e7f83a7e1e59318466ca751fa1cb..b0918a1654d76411eee42fb8f3164a102425412b 100644 --- a/src/Model/Network/Edge.py +++ b/src/Model/Network/Edge.py @@ -53,6 +53,9 @@ class Edge(object): def name(self): return self._name if self._name != "" else f"{self.node1.name} -> {self.node2.name}" + def is_enable(self): + return self._enable + def enable(self, enable=True): self._enable = enable self._status.modified() diff --git a/src/Model/Study.py b/src/Model/Study.py index 9ee9e5f1f8bd2dc1ccbab8cc3fcbf815491df818..311217ab54fbcdfeab78b33aac66b5bda4453c32 100644 --- a/src/Model/Study.py +++ b/src/Model/Study.py @@ -36,6 +36,7 @@ class Study(Serializable): def checkers(cls): lst = [ StudyNetworkReachChecker(), + StudyGeometryChecker(), DummyOK(), DummyWARNING(), DummyERROR(),