From 52c4eec72a7b2b9631f1dd096fbe7a21beed8a65 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Rouby <pierre-antoine.rouby@inrae.fr> Date: Tue, 18 Apr 2023 11:27:32 +0200 Subject: [PATCH] Exception: Add exception with message box for not implement method. --- src/Model/Except.py | 68 +++++++++++++++++++++++++---- src/Model/Geometry/Point.py | 8 ++++ src/Model/Geometry/PointXY.py | 3 ++ src/Model/Geometry/PointXYZ.py | 3 ++ src/View/Geometry/GeometryWindow.py | 1 + 5 files changed, 75 insertions(+), 8 deletions(-) diff --git a/src/Model/Except.py b/src/Model/Except.py index b88eccd2..a468b037 100644 --- a/src/Model/Except.py +++ b/src/Model/Except.py @@ -1,9 +1,16 @@ # -*- coding: utf-8 -*- +from PyQt5.QtCore import ( + QCoreApplication, +) + from PyQt5.QtWidgets import ( QApplication, QMessageBox, ) +_translate = QCoreApplication.translate + + #################################### # Message Box for python exception # #################################### @@ -27,13 +34,13 @@ class ExeceptionWithMessageBox(Exception): self.title = title def header(self): - return "Generic error message" + return _translate("Exception", "Generic error message") def short_message(self): - return "Undefined error message" + return _translate("Exception", "Undefined error message") def message(self): - return "Undefined error message" + return _translate("Exception", "Undefined error message") def alert(self): msg = QMessageBox() @@ -46,21 +53,66 @@ class ExeceptionWithMessageBox(Exception): msg.exec_() +class NotImplementedMethodeError(ExeceptionWithMessageBox): + def __init__(self, obj, func): + super(NotImplementedMethodeError, self).__init__( + title = _translate("Exception", "Method not implemented") + ) + + self.obj = obj + self.func = func + + self.alert() + + def __str__(self): + return ( + _translate("Exception", "Method") + + f" '{self.func.__name__}' " + + _translate("Exception", "not implemented") + + _translate("Exception", "for class") + + f" '{self.obj.__class__}'" + ) + + def header(self): + return _translate("Exception", "Not implemented method") + + def short_message(self): + return _translate("Exception", "Not implemented method") + + def message(self): + return ( + _translate("Exception", "Method") + + f" '{self.func.__name__}' " + + _translate("Exception", "not implemented") + + _translate("Exception", "for class") + + f" '{self.obj.__class__}'" + ) + class FileFormatError(ExeceptionWithMessageBox): def __init__(self, filename, reason): - super(FileFormatError, self).__init__(title = "FileFormatError") + super(FileFormatError, self).__init__( + title = _translate("Exception", "FileFormatError") + ) self.reason = reason self.filename = filename def __str__(self): - return f"Invalid file format: '{self.filename}'\n{self.message()}" + return ( + _translate("Exception", "Invalid file format:") + + f" '{self.filename}'\n{self.message()}" + ) def header(self): - return "File format error" + return _translate("Exception", "File format error") def short_message(self): - return "Invalid file format" + return _translate("Exception", "Invalid file format") def message(self): - return f"Invalid file '{self.filename}' format because of '{self.reason}'" + return ( + _translate("Exception", "Invalid file") + + f" '{self.filename}' " + + _translate("Exception", "format because of") + + f" '{self.reason}'" + ) diff --git a/src/Model/Geometry/Point.py b/src/Model/Geometry/Point.py index f83731f6..69900441 100644 --- a/src/Model/Geometry/Point.py +++ b/src/Model/Geometry/Point.py @@ -1,5 +1,7 @@ # -*- coding: utf-8 -*- +from Model.Except import NotImplementedMethodeError + class Point(object): def __init__(self, name:str = ""): super(Point, self).__init__() @@ -20,3 +22,9 @@ class Point(object): True if the point is named. """ return self._name.strip() != "" + + def is_nan(self): + raise NotImplementedMethodeError(self, self.is_nan) + + def dist(self, p2): + raise NotImplementedMethodeError(self, self.dist) diff --git a/src/Model/Geometry/PointXY.py b/src/Model/Geometry/PointXY.py index 65d7baf9..f118522a 100644 --- a/src/Model/Geometry/PointXY.py +++ b/src/Model/Geometry/PointXY.py @@ -31,6 +31,9 @@ class PointAC(Point): def c(self, value): self._c = float(value) + def dist(self, p2): + return PointAC.distance(self, p2) + @staticmethod def distance(p1, p2): """Euclidean distance between p1 and p2. diff --git a/src/Model/Geometry/PointXYZ.py b/src/Model/Geometry/PointXYZ.py index 6939cadf..e0c29860 100644 --- a/src/Model/Geometry/PointXYZ.py +++ b/src/Model/Geometry/PointXYZ.py @@ -50,6 +50,9 @@ class PointXYZ(Point): isna(self.y) or isna(self.z)) + def dist(self, p2): + return PointXYZ.distance(self, p2) + @staticmethod def distance(p1, p2): """Euclidean distance between p1 and p2. diff --git a/src/View/Geometry/GeometryWindow.py b/src/View/Geometry/GeometryWindow.py index 7a045b5a..ea372843 100644 --- a/src/View/Geometry/GeometryWindow.py +++ b/src/View/Geometry/GeometryWindow.py @@ -20,6 +20,7 @@ from View.Geometry import qtableview_reach from View.Geometry import window_profileXYZ from View.ASubWindow import WindowToolKit + _translate = QCoreApplication.translate class GeometryWindow(QMainWindow, WindowToolKit): -- GitLab