diff options
author | Georg Brandl <georg@python.org> | 2009-06-04 08:58:32 (GMT) |
---|---|---|
committer | Georg Brandl <georg@python.org> | 2009-06-04 08:58:32 (GMT) |
commit | e6632b47bbb0df00f67160b7497923e2f746d57b (patch) | |
tree | f1c3a6a3fa7bf0525a5c6a4f3b5fb15b8c824613 /Lib | |
parent | e616c53aecd539d2f1c6022a281c0fe4c5c336aa (diff) | |
download | cpython-e6632b47bbb0df00f67160b7497923e2f746d57b.zip cpython-e6632b47bbb0df00f67160b7497923e2f746d57b.tar.gz cpython-e6632b47bbb0df00f67160b7497923e2f746d57b.tar.bz2 |
#5767: remove sgmlop support from xmlrpclib; the sgmlop parser does not do much validation and is no longer much faster than e.g. the cElementTree XMLParser.
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/xmlrpclib.py | 58 |
1 files changed, 2 insertions, 56 deletions
diff --git a/Lib/xmlrpclib.py b/Lib/xmlrpclib.py index 5714b0d..b58030f 100644 --- a/Lib/xmlrpclib.py +++ b/Lib/xmlrpclib.py @@ -526,56 +526,6 @@ try: except (AttributeError, ImportError): FastMarshaller = None -# -# the SGMLOP parser is about 15x faster than Python's builtin -# XML parser. SGMLOP sources can be downloaded from: -# -# http://www.pythonware.com/products/xml/sgmlop.htm -# - -try: - import sgmlop - if not hasattr(sgmlop, "XMLParser"): - raise ImportError -except ImportError: - SgmlopParser = None # sgmlop accelerator not available -else: - class SgmlopParser: - def __init__(self, target): - - # setup callbacks - self.finish_starttag = target.start - self.finish_endtag = target.end - self.handle_data = target.data - self.handle_xml = target.xml - - # activate parser - self.parser = sgmlop.XMLParser() - self.parser.register(self) - self.feed = self.parser.feed - self.entity = { - "amp": "&", "gt": ">", "lt": "<", - "apos": "'", "quot": '"' - } - - def close(self): - try: - self.parser.close() - finally: - self.parser = self.feed = None # nuke circular reference - - def handle_proc(self, tag, attr): - m = re.search("encoding\s*=\s*['\"]([^\"']+)[\"']", attr) - if m: - self.handle_xml(m.group(1), 1) - - def handle_entityref(self, entity): - # <string> entity - try: - self.handle_data(self.entity[entity]) - except KeyError: - self.handle_data("&%s;" % entity) - try: from xml.parsers import expat if not hasattr(expat, "ParserCreate"): @@ -584,8 +534,7 @@ except ImportError: ExpatParser = None # expat not available else: class ExpatParser: - # fast expat parser for Python 2.0 and later. this is about - # 50% slower than sgmlop, on roundtrip testing + # fast expat parser for Python 2.0 and later. def __init__(self, target): self._parser = parser = expat.ParserCreate(None, None) self._target = target @@ -606,8 +555,7 @@ else: class SlowParser: """Default XML parser (based on xmllib.XMLParser).""" - # this is about 10 times slower than sgmlop, on roundtrip - # testing. + # this is the slowest parser. def __init__(self, target): import xmllib # lazy subclassing (!) if xmllib.XMLParser not in SlowParser.__bases__: @@ -1069,8 +1017,6 @@ def getparser(use_datetime=0): target = Unmarshaller(use_datetime=use_datetime) if FastParser: parser = FastParser(target) - elif SgmlopParser: - parser = SgmlopParser(target) elif ExpatParser: parser = ExpatParser(target) else: |