# -*- coding: utf-8 -*- from PyQt5.QtCore import ( QCoreApplication, ) from PyQt5.QtWidgets import ( QApplication, QMessageBox, ) _translate = QCoreApplication.translate #################################### # Message Box for python exception # #################################### def exception_message_box(exception): msg = QMessageBox() msg.setIcon(QMessageBox.Critical) msg.setText("Exception :") msg.setInformativeText(f"{exception}") msg.setWindowTitle("Exception") msg.exec_() ################ # Custom error # ################ class ExeceptionWithMessageBox(Exception): def __init__(self, title = "Exeception"): self.title = title def header(self): return _translate("Exception", "Generic error message") def short_message(self): return _translate("Exception", "Undefined error message") def message(self): return _translate("Exception", "Undefined error message") def alert(self): msg = QMessageBox() msg.setIcon(QMessageBox.Critical) msg.setText(f"{self.header()} : {self.short_message()}") msg.setInformativeText(f"{self.message()}") msg.setWindowTitle(f"{self.title}") 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 = _translate("Exception", "FileFormatError") ) self.reason = reason self.filename = filename def __str__(self): return ( _translate("Exception", "Invalid file format:") + f" '{self.filename}'\n{self.message()}" ) def header(self): return _translate("Exception", "File format error") def short_message(self): return _translate("Exception", "Invalid file format") def message(self): return ( _translate("Exception", "Invalid file") + f" '{self.filename}' " + _translate("Exception", "format because of") + f" '{self.reason}'" ) class ClipboardFormatError(ExeceptionWithMessageBox): def __init__(self, mime=None, header=None, data=None): super(ClipboardFormatError, self).__init__( title = _translate("Exception", "Clipboard format error") ) self._mime = mime self._header = header self._data = data if self._mime is not None: self.msg = f"Impossible to decode data to mime code '{self._mime}'" else: if len(self._header) == 0: msg = _translate("Exception", "without header") else: msg = ( _translate("Exception", "with header") + f": {self._header}" ) self.msg = ( _translate("Exception", "Invalid clipboard data format:") + f" '{self._data}' {msg}" ) self.alert() def __str__(self): return self.msg def header(self): return _translate("Exception", "Clipboard format error") def short_message(self): return _translate("Exception", "Clipboard format unknown") def message(self): return self.msg