diff --git a/src/Model/Except.py b/src/Model/Except.py index ef45ffd0e47af08e2eac23f280e81e3e0855629b..ce741bf8d5d9ab260fc4b8838c296809f6d92851 100644 --- a/src/Model/Except.py +++ b/src/Model/Except.py @@ -179,3 +179,38 @@ class ClipboardFormatError(ExeceptionWithMessageBox): def message(self): return self.msg + + +class ExternFileMissingError(ExeceptionWithMessageBox): + def __init__(self, module="mage", filename="libbief", path="??/libbief.so", + src_except=None): + super(ExternFileMissingError, self).__init__( + title=_translate( + "Exception", "External file dependence is missing" + ) + ) + + self.msg = _translate( + "Exception", + "'@file' is missing for module @module:\n'@path'" + ) + self.msg = self.msg.replace("@file", filename) + self.msg = self.msg.replace("@module", module) + self.msg = self.msg.replace("@path", path) + + if src_except is not None: + self.msg = self.msg + "\n\n" + f"Exception: {src_except}" + + self.alert() + + def __str__(self): + return self.msg + + def header(self): + return _translate("Exception", "External file dependence is missing") + + def short_message(self): + return _translate("Exception", "External file dependence is missing") + + def message(self): + return self.msg diff --git a/src/View/Geometry/Window.py b/src/View/Geometry/Window.py index c079687b3018e3971c920c8b8b07a1f10e359ba2..38db6db9ee5c1509ae36fca6809e094fc93c2e61 100644 --- a/src/View/Geometry/Window.py +++ b/src/View/Geometry/Window.py @@ -23,7 +23,7 @@ import pathlib import logging from copy import deepcopy -from tools import timer, trace +from tools import timer, trace, logger_exception from PyQt5 import QtWidgets from PyQt5.QtGui import ( @@ -40,6 +40,8 @@ from PyQt5.QtWidgets import ( QLabel, QAbstractItemView, ) +from Model.Except import ExternFileMissingError + from View.Tools.PamhyrWindow import PamhyrWindow from View.Tools.Plot.PamhyrToolbar import PamhyrPlotToolbar from View.Tools.Plot.PamhyrCanvas import MplCanvas @@ -255,8 +257,23 @@ class GeometryWindow(PamhyrWindow): self.tableView.model().blockSignals(False) def edit_meshing(self): - mesher = MeshingWithMage() - self._table.meshing(mesher, -1) + try: + self._edit_meshing() + except Exception: + return + + def _edit_meshing(self): + try: + mesher = MeshingWithMage() + self._table.meshing(mesher, -1) + except Exception as e: + logger_exception(e) + raise ExternFileMissingError( + module="mage", + filename="libbief", + path=MeshingWithMage._lib_path(), + src_except=e + ) pyqtSlot(bool) diff --git a/src/tools.py b/src/tools.py index e1ade0098ec851b0afb8a035452cf53561ed5443..baf130e421bf3b379064863d5ee6052e57e0f293 100644 --- a/src/tools.py +++ b/src/tools.py @@ -69,10 +69,10 @@ def logger_color_reset(): def logger_exception(exception): logger.error( f"[{logger_color_red()}ERROR{logger_color_reset()}] " + - f"{logger_color_red()}{e}{logger_color_reset()}" + f"{logger_color_red()}{exception}{logger_color_reset()}" ) logger.debug( - f"{logger_color_blue()}{e}{logger_color_reset()}\n" + + f"{logger_color_blue()}{exception}{logger_color_reset()}\n" + f"{logger_color_red()}{traceback.format_exc()}{logger_color_reset()}" )