E4XML/XMLErrorHandler.py

changeset 0
de9c2efb9d02
child 12
1d8dd9706f46
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/E4XML/XMLErrorHandler.py	Mon Dec 28 16:03:33 2009 +0000
@@ -0,0 +1,109 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2004 - 2009 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing an error handler class.
+"""
+
+from xml.sax.handler import ErrorHandler
+from xml.sax import SAXParseException
+
+from XMLMessageDialog import XMLMessageDialog
+
+class XMLParseError(Exception):
+    """
+    Class implementing an exception for recoverable parse errors.
+    """
+    pass
+    
+class XMLFatalParseError(XMLParseError):
+    """
+    Class implementing an exception for recoverable parse errors.
+    """
+    pass
+
+class XMLErrorHandler(ErrorHandler):
+    """
+    Class implementing an error handler class.
+    """
+    def __init__(self):
+        """
+        Constructor
+        """
+        self.errors = 0
+        self.fatals = 0
+        self.warnings = 0
+        self.totals = 0
+        
+        # list of tuples of (message type, system id, line number,
+        # column number, message)
+        self.msgs = []
+        
+    def error(self, exception):
+        """
+        Public method to handle a recoverable error.
+        
+        @param exception Exception object describing the error (SAXParseException)
+        """
+        self.errors += 1
+        self.totals += 1
+        self.msgs.append((\
+            "E",
+            exception.getSystemId(),
+            exception.getLineNumber(),
+            exception.getColumnNumber(),
+            exception.getMessage()
+        ))
+
+    def fatalError(self, exception):
+        """
+        Public method to handle a non-recoverable error.
+        
+        @param exception Exception object describing the error (SAXParseException)
+        @exception XMLFatalParseError a fatal parse error has occured
+        """
+        self.fatals += 1
+        self.totals += 1
+        self.msgs.append((\
+            "F",
+            exception.getSystemId(),
+            exception.getLineNumber(),
+            exception.getColumnNumber(),
+            exception.getMessage()
+        ))
+        raise XMLFatalParseError
+
+    def warning(self, exception):
+        """
+        Public method to handle a warning.
+        
+        @param exception Exception object describing the error (SAXParseException)
+        """
+        self.warnings += 1
+        self.totals += 1
+        self.msgs.append((\
+            "W",
+            exception.getSystemId(),
+            exception.getLineNumber(),
+            exception.getColumnNumber(),
+            exception.getMessage()
+        ))
+
+    def getParseMessages(self):
+        """
+        Public method to retrieve all messages.
+        
+        @return list of tuples of (message type, system id, line no, column no,
+            message)
+        """
+        return self.msgs
+        
+    def showParseMessages(self):
+        """
+        Public method to show the parse messages (if any) in a dialog.
+        """
+        if self.totals:
+            dlg = XMLMessageDialog(self.msgs, None)
+            dlg.exec_()

eric ide

mercurial