--- a/E5Gui/E5ErrorMessage.py Sat Jun 30 17:02:52 2018 +0200 +++ b/E5Gui/E5ErrorMessage.py Sat Jun 30 17:40:08 2018 +0200 @@ -17,8 +17,43 @@ import Utilities -__msgHandlerDialog = None -__origMsgHandler = None +_msgHandlerDialog = None +_origMsgHandler = None + +_filterSettings = QSettings( + QSettings.IniFormat, + QSettings.UserScope, + Globals.settingsNameOrganization, + "eric6messagefilters") +_defaultFilters = [ + "QFont::", + "QCocoaMenu::removeMenuItem", + "QCocoaMenu::insertNative", + ",type id:", + "Remote debugging server started successfully", + "Uncaught SecurityError:", + "Content Security Policy", + "QXcbClipboard:", + "QXcbConnection: XCB error", + "libpng warning: iCCP:", +] + + +def filterMessage(message): + """ + Module function to filter messages. + + @param message message to be checked + @type str + @return flag indicating that the message should be filtered out + @rtype bool + """ + for filterStr in Globals.toList(_filterSettings.value( + "MessageFilters", _defaultFilters)): + if filterStr in message: + return True + + return False class E5ErrorMessage(QErrorMessage): @@ -29,52 +64,21 @@ """ Constructor - @param parent reference to the parent widget (QWidget) + @param parent reference to the parent widget + @type QWidget """ super(E5ErrorMessage, self).__init__(parent) - - self.settings = QSettings( - QSettings.IniFormat, - QSettings.UserScope, - Globals.settingsNameOrganization, - "eric6messagefilters") - - self.__defaultFilters = [ - "QFont::", - "QCocoaMenu::removeMenuItem", - "QCocoaMenu::insertNative", - ",type id:", - "Remote debugging server started successfully", - "Uncaught SecurityError:", - "Content Security Policy", - "QXcbClipboard:", - "QXcbConnection: XCB error", - "libpng warning: iCCP:", - ] - - def __filterMessage(self, message): - """ - Private method to filter messages. - - @param message message to be checked (string) - @return flag indicating that the message should be filtered out - (boolean) - """ - for filterStr in Globals.toList(self.settings.value( - "MessageFilters", self.__defaultFilters)): - if filterStr in message: - return True - - return False def showMessage(self, message, msgType=""): """ Public method to show a message. - @param message error message to be shown (string) - @param msgType type of the error message (string) + @param message error message to be shown + @type str + @param msgType type of the error message + @type str """ - if not self.__filterMessage(message): + if not filterMessage(message): if msgType: super(E5ErrorMessage, self).showMessage(message, msgType) else: @@ -86,29 +90,30 @@ """ from .E5ErrorMessageFilterDialog import E5ErrorMessageFilterDialog dlg = E5ErrorMessageFilterDialog( - Globals.toList(self.settings.value( - "MessageFilters", self.__defaultFilters)), - self.__defaultFilters) + Globals.toList(_filterSettings.value( + "MessageFilters", _defaultFilters)), + _defaultFilters) if dlg.exec_() == QDialog.Accepted: filters = dlg.getFilters() - self.settings.setValue("MessageFilters", filters) + _filterSettings.setValue("MessageFilters", filters) def messageHandler(msgType, *args): """ Module function handling messages. - @param msgType type of the message (integer, QtMsgType) - @param args message handler arguments, for PyQt4 message to be shown - (bytes), for PyQt5 context information (QMessageLogContext) and - message to be shown (bytes) + @param msgType type of the message + @type int, QtMsgType + @param args message handler arguments, for PyQt4 message to be shown, for + PyQt5 context information and message to be shown + @type PyQt4: bytes; PyQt5: tuple of (QMessageLogContext, bytes) """ if len(args) == 2: context = args[0] message = args[1] else: message = args[0] - if __msgHandlerDialog: + if _msgHandlerDialog: try: if msgType == QtDebugMsg: messageType = "Debug Message:" @@ -120,6 +125,8 @@ messageType = "Fatal Error:" if isinstance(message, bytes): message = Utilities.decodeBytes(message) + if filterMessage(message): + return message = message.replace("\r\n", "<br/>")\ .replace("\n", "<br/>")\ .replace("\r", "<br/>") @@ -132,18 +139,18 @@ msg = "<p><b>{0}</b></p><p>{1}</p>".format( messageType, Utilities.html_uencode(message)) if QThread.currentThread() == qApp.thread(): - __msgHandlerDialog.showMessage(msg) + _msgHandlerDialog.showMessage(msg) else: QMetaObject.invokeMethod( - __msgHandlerDialog, + _msgHandlerDialog, "showMessage", Qt.QueuedConnection, Q_ARG(str, msg)) return except RuntimeError: pass - elif __origMsgHandler: - __origMsgHandler(msgType, message) + elif _origMsgHandler: + _origMsgHandler(msgType, message) return if msgType == QtDebugMsg: @@ -169,24 +176,25 @@ Module function to install an E5ErrorMessage dialog as the global message handler. - @return reference to the message handler dialog (E5ErrorMessage) + @return reference to the message handler dialog + @rtype E5ErrorMessage """ - global __msgHandlerDialog, __origMsgHandler + global _msgHandlerDialog, _origMsgHandler - if __msgHandlerDialog is None: + if _msgHandlerDialog is None: # Install an E5ErrorMessage dialog as the global message handler. - __msgHandlerDialog = E5ErrorMessage() - __origMsgHandler = qInstallMessageHandler(messageHandler) + _msgHandlerDialog = E5ErrorMessage() + _origMsgHandler = qInstallMessageHandler(messageHandler) - return __msgHandlerDialog + return _msgHandlerDialog def editMessageFilters(): """ Module function to edit the list of message filters. """ - if __msgHandlerDialog: - __msgHandlerDialog.editMessageFilters() + if _msgHandlerDialog: + _msgHandlerDialog.editMessageFilters() else: print("No message handler installed.") @@ -195,9 +203,10 @@ """ Module function to check, if a message handler was installed. - @return flag indicating an installed message handler (boolean) + @return flag indicating an installed message handler + @rtype bool """ - return __msgHandlerDialog is not None + return _msgHandlerDialog is not None # # eflag: noqa = M801