mirror of
https://github.com/python/cpython.git
synced 2024-11-26 11:24:40 +08:00
[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:
parent
eedb5764a5
commit
58af43fd76
@ -26,7 +26,7 @@ from _exceptions import SAXException, SAXNotRecognizedException, \
|
||||
|
||||
|
||||
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 @@ if sys.platform[ : 4] == "java":
|
||||
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
|
||||
|
@ -3,10 +3,12 @@ A library of useful helper classes to the SAX classes, for the
|
||||
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()
|
||||
|
Loading…
Reference in New Issue
Block a user