[Patch 101634]

xml.sax: Fix parse and parseString not to rely on ExpatParser
         Greatly simplify import logic by using __import__
saxutils: Support Unicode strings and files as parameters to
          prepare_input_source
This commit is contained in:
Martin v. Löwis 2000-09-24 21:31:06 +00:00
parent eedb5764a5
commit 58af43fd76
2 changed files with 11 additions and 26 deletions

View file

@ -26,7 +26,7 @@
def parse(source, handler, errorHandler=ErrorHandler()):
parser = ExpatParser()
parser = make_parser()
parser.setContentHandler(handler)
parser.setErrorHandler(errorHandler)
parser.parse(source)
@ -39,7 +39,7 @@ def parseString(string, handler, errorHandler=ErrorHandler()):
if errorHandler is None:
errorHandler = ErrorHandler()
parser = ExpatParser()
parser = make_parser()
parser.setContentHandler(handler)
parser.setErrorHandler(errorHandler)
@ -87,29 +87,8 @@ def _create_parser(parser_name):
return drv_module.create_parser()
else:
import imp as _imp
def _rec_find_module(module):
"Improvement over imp.find_module which finds submodules."
path=""
for mod in string.split(module,"."):
if path == "":
info = (mod,) + _imp.find_module(mod)
else:
info = (mod,) + _imp.find_module(mod, [path])
lastmod = _imp.load_module(*info)
try:
path = lastmod.__path__[0]
except AttributeError, e:
pass
return info
def _create_parser(parser_name):
info = _rec_find_module(parser_name)
drv_module = _imp.load_module(*info)
drv_module = __import__(parser_name,{},{},['create_parser'])
return drv_module.create_parser()
del sys

View file

@ -3,10 +3,12 @@
convenience of application and driver writers.
"""
import os, urlparse, urllib
import os, urlparse, urllib, types
import handler
import xmlreader
_StringTypes = [types.StringType, types.UnicodeType]
def escape(data, entities={}):
"""Escape &, <, and > in a string of data.
@ -189,8 +191,12 @@ def prepare_input_source(source, base = ""):
"""This function takes an InputSource and an optional base URL and
returns a fully resolved InputSource object ready for reading."""
if type(source) == type(""):
if type(source) in _StringTypes:
source = xmlreader.InputSource(source)
elif hasattr(source, "read"):
f = source
source = xmlreader.InputSource(source)
source.setByteStream(f)
if source.getByteStream() == None:
sysid = source.getSystemId()