PageRenderTime 72ms CodeModel.GetById 65ms app.highlight 4ms RepoModel.GetById 1ms app.codeStats 0ms

/Lib/xml/sax/__init__.py

http://unladen-swallow.googlecode.com/
Python | 108 lines | 91 code | 5 blank | 12 comment | 1 complexity | 321eb277e9221720c222af17f5815072 MD5 | raw file
  1"""Simple API for XML (SAX) implementation for Python.
  2
  3This module provides an implementation of the SAX 2 interface;
  4information about the Java version of the interface can be found at
  5http://www.megginson.com/SAX/.  The Python version of the interface is
  6documented at <...>.
  7
  8This package contains the following modules:
  9
 10handler -- Base classes and constants which define the SAX 2 API for
 11           the 'client-side' of SAX for Python.
 12
 13saxutils -- Implementation of the convenience classes commonly used to
 14            work with SAX.
 15
 16xmlreader -- Base classes and constants which define the SAX 2 API for
 17             the parsers used with SAX for Python.
 18
 19expatreader -- Driver that allows use of the Expat parser with SAX.
 20"""
 21
 22from xmlreader import InputSource
 23from handler import ContentHandler, ErrorHandler
 24from _exceptions import SAXException, SAXNotRecognizedException, \
 25                        SAXParseException, SAXNotSupportedException, \
 26                        SAXReaderNotAvailable
 27
 28
 29def parse(source, handler, errorHandler=ErrorHandler()):
 30    parser = make_parser()
 31    parser.setContentHandler(handler)
 32    parser.setErrorHandler(errorHandler)
 33    parser.parse(source)
 34
 35def parseString(string, handler, errorHandler=ErrorHandler()):
 36    try:
 37        from cStringIO import StringIO
 38    except ImportError:
 39        from StringIO import StringIO
 40
 41    if errorHandler is None:
 42        errorHandler = ErrorHandler()
 43    parser = make_parser()
 44    parser.setContentHandler(handler)
 45    parser.setErrorHandler(errorHandler)
 46
 47    inpsrc = InputSource()
 48    inpsrc.setByteStream(StringIO(string))
 49    parser.parse(inpsrc)
 50
 51# this is the parser list used by the make_parser function if no
 52# alternatives are given as parameters to the function
 53
 54default_parser_list = ["xml.sax.expatreader"]
 55
 56# tell modulefinder that importing sax potentially imports expatreader
 57_false = 0
 58if _false:
 59    import xml.sax.expatreader
 60
 61import os, sys
 62if os.environ.has_key("PY_SAX_PARSER"):
 63    default_parser_list = os.environ["PY_SAX_PARSER"].split(",")
 64del os
 65
 66_key = "python.xml.sax.parser"
 67if sys.platform[:4] == "java" and sys.registry.containsKey(_key):
 68    default_parser_list = sys.registry.getProperty(_key).split(",")
 69
 70
 71def make_parser(parser_list = []):
 72    """Creates and returns a SAX parser.
 73
 74    Creates the first parser it is able to instantiate of the ones
 75    given in the list created by doing parser_list +
 76    default_parser_list.  The lists must contain the names of Python
 77    modules containing both a SAX parser and a create_parser function."""
 78
 79    for parser_name in parser_list + default_parser_list:
 80        try:
 81            return _create_parser(parser_name)
 82        except ImportError,e:
 83            import sys
 84            if parser_name in sys.modules:
 85                # The parser module was found, but importing it
 86                # failed unexpectedly, pass this exception through
 87                raise
 88        except SAXReaderNotAvailable:
 89            # The parser module detected that it won't work properly,
 90            # so try the next one
 91            pass
 92
 93    raise SAXReaderNotAvailable("No parsers found", None)
 94
 95# --- Internal utility methods used by make_parser
 96
 97if sys.platform[ : 4] == "java":
 98    def _create_parser(parser_name):
 99        from org.python.core import imp
100        drv_module = imp.importName(parser_name, 0, globals())
101        return drv_module.create_parser()
102
103else:
104    def _create_parser(parser_name):
105        drv_module = __import__(parser_name,{},{},['create_parser'])
106        return drv_module.create_parser()
107
108del sys