from .xmlreader import InputSource
from .handler import ContentHandler, ErrorHandler
from ._exceptions import (SAXException, SAXNotRecognizedException,
SAXParseException, SAXNotSupportedException,
SAXReaderNotAvailable)
def parse(source, handler, errorHandler=ErrorHandler()):
parser = make_parser()
parser.setContentHandler(handler)
parser.setErrorHandler(errorHandler)
parser.parse(source)
def parseString(string, handler, errorHandler=ErrorHandler()):
import io
if errorHandler is None:
errorHandler = ErrorHandler()
parser = make_parser()
parser.setContentHandler(handler)
parser.setErrorHandler(errorHandler)
inpsrc = InputSource()
if isinstance(string, str):
inpsrc.setCharacterStream(io.StringIO(string))
else:
inpsrc.setByteStream(io.BytesIO(string))
parser.parse(inpsrc)
default_parser_list = ["xml.sax.expatreader"]
_false = 0
if _false:
import xml.sax.expatreader
import os, sys
if not sys.flags.ignore_environment and "PY_SAX_PARSER" in os.environ:
default_parser_list = os.environ["PY_SAX_PARSER"].split(",")
del os, sys
def make_parser(parser_list=()):
for parser_name in list(parser_list) + default_parser_list:
try:
return _create_parser(parser_name)
except ImportError:
import sys
if parser_name in sys.modules:
raise
except SAXReaderNotAvailable:
pass
raise SAXReaderNotAvailable("No parsers found", None)
def _create_parser(parser_name):
drv_module = __import__(parser_name,{},{},['create_parser'])
return drv_module.create_parser()
__all__ = ['ContentHandler', 'ErrorHandler', 'InputSource', 'SAXException',
'SAXNotRecognizedException', 'SAXNotSupportedException',
'SAXParseException', 'SAXReaderNotAvailable',
'default_parser_list', 'make_parser', 'parse', 'parseString']