17db96d56Sopenharmony_ci"""Different kinds of SAX Exceptions""" 27db96d56Sopenharmony_ciimport sys 37db96d56Sopenharmony_ciif sys.platform[:4] == "java": 47db96d56Sopenharmony_ci from java.lang import Exception 57db96d56Sopenharmony_cidel sys 67db96d56Sopenharmony_ci 77db96d56Sopenharmony_ci# ===== SAXEXCEPTION ===== 87db96d56Sopenharmony_ci 97db96d56Sopenharmony_ciclass SAXException(Exception): 107db96d56Sopenharmony_ci """Encapsulate an XML error or warning. This class can contain 117db96d56Sopenharmony_ci basic error or warning information from either the XML parser or 127db96d56Sopenharmony_ci the application: you can subclass it to provide additional 137db96d56Sopenharmony_ci functionality, or to add localization. Note that although you will 147db96d56Sopenharmony_ci receive a SAXException as the argument to the handlers in the 157db96d56Sopenharmony_ci ErrorHandler interface, you are not actually required to raise 167db96d56Sopenharmony_ci the exception; instead, you can simply read the information in 177db96d56Sopenharmony_ci it.""" 187db96d56Sopenharmony_ci 197db96d56Sopenharmony_ci def __init__(self, msg, exception=None): 207db96d56Sopenharmony_ci """Creates an exception. The message is required, but the exception 217db96d56Sopenharmony_ci is optional.""" 227db96d56Sopenharmony_ci self._msg = msg 237db96d56Sopenharmony_ci self._exception = exception 247db96d56Sopenharmony_ci Exception.__init__(self, msg) 257db96d56Sopenharmony_ci 267db96d56Sopenharmony_ci def getMessage(self): 277db96d56Sopenharmony_ci "Return a message for this exception." 287db96d56Sopenharmony_ci return self._msg 297db96d56Sopenharmony_ci 307db96d56Sopenharmony_ci def getException(self): 317db96d56Sopenharmony_ci "Return the embedded exception, or None if there was none." 327db96d56Sopenharmony_ci return self._exception 337db96d56Sopenharmony_ci 347db96d56Sopenharmony_ci def __str__(self): 357db96d56Sopenharmony_ci "Create a string representation of the exception." 367db96d56Sopenharmony_ci return self._msg 377db96d56Sopenharmony_ci 387db96d56Sopenharmony_ci def __getitem__(self, ix): 397db96d56Sopenharmony_ci """Avoids weird error messages if someone does exception[ix] by 407db96d56Sopenharmony_ci mistake, since Exception has __getitem__ defined.""" 417db96d56Sopenharmony_ci raise AttributeError("__getitem__") 427db96d56Sopenharmony_ci 437db96d56Sopenharmony_ci 447db96d56Sopenharmony_ci# ===== SAXPARSEEXCEPTION ===== 457db96d56Sopenharmony_ci 467db96d56Sopenharmony_ciclass SAXParseException(SAXException): 477db96d56Sopenharmony_ci """Encapsulate an XML parse error or warning. 487db96d56Sopenharmony_ci 497db96d56Sopenharmony_ci This exception will include information for locating the error in 507db96d56Sopenharmony_ci the original XML document. Note that although the application will 517db96d56Sopenharmony_ci receive a SAXParseException as the argument to the handlers in the 527db96d56Sopenharmony_ci ErrorHandler interface, the application is not actually required 537db96d56Sopenharmony_ci to raise the exception; instead, it can simply read the 547db96d56Sopenharmony_ci information in it and take a different action. 557db96d56Sopenharmony_ci 567db96d56Sopenharmony_ci Since this exception is a subclass of SAXException, it inherits 577db96d56Sopenharmony_ci the ability to wrap another exception.""" 587db96d56Sopenharmony_ci 597db96d56Sopenharmony_ci def __init__(self, msg, exception, locator): 607db96d56Sopenharmony_ci "Creates the exception. The exception parameter is allowed to be None." 617db96d56Sopenharmony_ci SAXException.__init__(self, msg, exception) 627db96d56Sopenharmony_ci self._locator = locator 637db96d56Sopenharmony_ci 647db96d56Sopenharmony_ci # We need to cache this stuff at construction time. 657db96d56Sopenharmony_ci # If this exception is raised, the objects through which we must 667db96d56Sopenharmony_ci # traverse to get this information may be deleted by the time 677db96d56Sopenharmony_ci # it gets caught. 687db96d56Sopenharmony_ci self._systemId = self._locator.getSystemId() 697db96d56Sopenharmony_ci self._colnum = self._locator.getColumnNumber() 707db96d56Sopenharmony_ci self._linenum = self._locator.getLineNumber() 717db96d56Sopenharmony_ci 727db96d56Sopenharmony_ci def getColumnNumber(self): 737db96d56Sopenharmony_ci """The column number of the end of the text where the exception 747db96d56Sopenharmony_ci occurred.""" 757db96d56Sopenharmony_ci return self._colnum 767db96d56Sopenharmony_ci 777db96d56Sopenharmony_ci def getLineNumber(self): 787db96d56Sopenharmony_ci "The line number of the end of the text where the exception occurred." 797db96d56Sopenharmony_ci return self._linenum 807db96d56Sopenharmony_ci 817db96d56Sopenharmony_ci def getPublicId(self): 827db96d56Sopenharmony_ci "Get the public identifier of the entity where the exception occurred." 837db96d56Sopenharmony_ci return self._locator.getPublicId() 847db96d56Sopenharmony_ci 857db96d56Sopenharmony_ci def getSystemId(self): 867db96d56Sopenharmony_ci "Get the system identifier of the entity where the exception occurred." 877db96d56Sopenharmony_ci return self._systemId 887db96d56Sopenharmony_ci 897db96d56Sopenharmony_ci def __str__(self): 907db96d56Sopenharmony_ci "Create a string representation of the exception." 917db96d56Sopenharmony_ci sysid = self.getSystemId() 927db96d56Sopenharmony_ci if sysid is None: 937db96d56Sopenharmony_ci sysid = "<unknown>" 947db96d56Sopenharmony_ci linenum = self.getLineNumber() 957db96d56Sopenharmony_ci if linenum is None: 967db96d56Sopenharmony_ci linenum = "?" 977db96d56Sopenharmony_ci colnum = self.getColumnNumber() 987db96d56Sopenharmony_ci if colnum is None: 997db96d56Sopenharmony_ci colnum = "?" 1007db96d56Sopenharmony_ci return "%s:%s:%s: %s" % (sysid, linenum, colnum, self._msg) 1017db96d56Sopenharmony_ci 1027db96d56Sopenharmony_ci 1037db96d56Sopenharmony_ci# ===== SAXNOTRECOGNIZEDEXCEPTION ===== 1047db96d56Sopenharmony_ci 1057db96d56Sopenharmony_ciclass SAXNotRecognizedException(SAXException): 1067db96d56Sopenharmony_ci """Exception class for an unrecognized identifier. 1077db96d56Sopenharmony_ci 1087db96d56Sopenharmony_ci An XMLReader will raise this exception when it is confronted with an 1097db96d56Sopenharmony_ci unrecognized feature or property. SAX applications and extensions may 1107db96d56Sopenharmony_ci use this class for similar purposes.""" 1117db96d56Sopenharmony_ci 1127db96d56Sopenharmony_ci 1137db96d56Sopenharmony_ci# ===== SAXNOTSUPPORTEDEXCEPTION ===== 1147db96d56Sopenharmony_ci 1157db96d56Sopenharmony_ciclass SAXNotSupportedException(SAXException): 1167db96d56Sopenharmony_ci """Exception class for an unsupported operation. 1177db96d56Sopenharmony_ci 1187db96d56Sopenharmony_ci An XMLReader will raise this exception when a service it cannot 1197db96d56Sopenharmony_ci perform is requested (specifically setting a state or value). SAX 1207db96d56Sopenharmony_ci applications and extensions may use this class for similar 1217db96d56Sopenharmony_ci purposes.""" 1227db96d56Sopenharmony_ci 1237db96d56Sopenharmony_ci# ===== SAXNOTSUPPORTEDEXCEPTION ===== 1247db96d56Sopenharmony_ci 1257db96d56Sopenharmony_ciclass SAXReaderNotAvailable(SAXNotSupportedException): 1267db96d56Sopenharmony_ci """Exception class for a missing driver. 1277db96d56Sopenharmony_ci 1287db96d56Sopenharmony_ci An XMLReader module (driver) should raise this exception when it 1297db96d56Sopenharmony_ci is first imported, e.g. when a support module cannot be imported. 1307db96d56Sopenharmony_ci It also may be raised during parsing, e.g. if executing an external 1317db96d56Sopenharmony_ci program is not permitted.""" 132