def parse(self) : if (isinstance(self.source,unicode)) : # Create a string source file = io.StringIO(self.source) input = InputSource(file) input.setEncoding("utf-8") input.setCharacterStream(file) # There is a bug in xml.sax.saxutils.prepare_input_source input.setByteStream(file) input.setSystemId(None) elif (isinstance(self.source,InputSource)): input = self.source else: raise Exception("Parse source must be either string or InputSource") # Create the parser/xmlreader parser = xml.sax.make_parser() # Tell the parser to use our handler(s) parser.setContentHandler(self) #parser.setErrorHandler(self) #parser.setFeature(xml.sax.handler.feature_namespaces,True) # Shut off dtd validation parser.setFeature(xml.sax.handler.feature_validation,False) parser.setFeature(xml.sax.handler.feature_external_ges, False) # Parse the document parser.parse(input)
def test_expat_inpsource_location(): parser = create_parser() parser.setContentHandler(ContentHandler()) # do nothing source = InputSource() source.setByteStream(StringIO("<foo bar foobar>")) #ill-formed name = "a file name" source.setSystemId(name) try: parser.parse(source) except SAXException, e: return e.getSystemId() == name
def test_expat_inpsource_location(): parser = make_parser() parser.setContentHandler(ContentHandler()) # do nothing source = InputSource() source.setByteStream(StringIO("<foo bar foobar>")) #ill-formed name = "a file name" source.setSystemId(name) try: parser.parse(source) except SAXException, e: return e.getSystemId() == name
def test_expat_inpsource_location(self): parser = create_parser() parser.setContentHandler(ContentHandler()) # do nothing source = InputSource() source.setByteStream(BytesIO(b"<foo bar foobar>")) #ill-formed name = "a file name" source.setSystemId(name) try: parser.parse(source) self.fail() except SAXException as e: self.assertEqual(e.getSystemId(), name)
def test_expat_inpsource_location(self): parser = create_parser() parser.setContentHandler(ContentHandler()) # do nothing source = InputSource() source.setByteStream(StringIO("<foo bar foobar>")) #ill-formed name = "a file name" source.setSystemId(name) try: parser.parse(source) self.fail() except SAXException as e: self.assertEqual(e.getSystemId(), name)
def resolveEntity(self, publicId, systemId): source = InputSource() source.setSystemId(systemId) try: dtdPath = self.knownDTDs[systemId] except KeyError: raise process.ProcessingFailure( "Invalid DTD system identifier (%r) in %s. Only " "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd " "is allowed." % (systemId, self.filename)) source.setByteStream(dtdPath.open()) return source
def resolveEntity(self, publicId, systemId): source = InputSource() source.setSystemId(systemId) try: dtdPath = self.knownDTDs[systemId] except KeyError: raise process.ProcessingFailure( "Invalid DTD system identifier (%r) in %s. Only " "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd " "is allowed." % (systemId, self.filename)) source.setByteStream(dtdPath.open()) return source
def test_expat_inpsource_location(self): parser = create_parser() parser.setContentHandler(ContentHandler()) source = InputSource() source.setByteStream(BytesIO(b'<foo bar foobar>')) name = 'a file name' source.setSystemId(name) try: parser.parse(source) self.fail() except SAXException as e: self.assertEqual(e.getSystemId(), name)
def caching_prepare_input_source(source, base=None): if isinstance(source, InputSource): return source full_uri = urljoin(base or "", source) # Convert StringIO to string if hasattr(full_uri, "getvalue"): full_uri = full_uri.getvalue() if not full_uri.startswith("http:"): args = (source,) if base is None else (source, base) return old_prepare_input_source(*args) document = urlopen(full_uri, proxies=proxies) input_source = InputSource() input_source.setSystemId(source) input_source.setByteStream(document) return input_source
def resolveEntity(self, publicId, systemId): self.entities.append((publicId, systemId)) source = InputSource() source.setPublicId(publicId) source.setSystemId(systemId) return source
def resolveEntity(self, publicId, systemId): self.entities.append((publicId, systemId)) source = InputSource() source.setPublicId(publicId) source.setSystemId(systemId) return source
# regression test for SAX 2.0