Browse Source

Issue #9708: Fix support for iterparse(parser=...) argument per documentation.

When _elementtree is imported, iterparse is redefined as a class and the parser
argument was ommitted. Fix this, and add a docstring to the class.
pull/2332/head
Eli Bendersky 13 years ago
parent
commit
aaa9780fe1
  1. 6
      Lib/test/test_xml_etree.py
  2. 19
      Lib/xml/etree/ElementTree.py

6
Lib/test/test_xml_etree.py

@ -1881,6 +1881,12 @@ class ElementIterTest(unittest.TestCase):
sourcefile = serialize(doc, to_string=False)
self.assertEqual(next(ET.iterparse(sourcefile))[0], 'end')
# With an explitit parser too (issue #9708)
sourcefile = serialize(doc, to_string=False)
parser = ET.XMLParser(target=ET.TreeBuilder())
self.assertEqual(next(ET.iterparse(sourcefile, parser=parser))[0],
'end')
tree = ET.ElementTree(None)
self.assertRaises(AttributeError, tree.iter)

19
Lib/xml/etree/ElementTree.py

@ -1737,8 +1737,20 @@ else:
source.close()
class iterparse:
"""Parses an XML section into an element tree incrementally.
Reports whats going on to the user. 'source' is a filename or file
object containing XML data. 'events' is a list of events to report back.
The supported events are the strings "start", "end", "start-ns" and
"end-ns" (the "ns" events are used to get detailed namespace
information). If 'events' is omitted, only "end" events are reported.
'parser' is an optional parser instance. If not given, the standard
XMLParser parser is used. Returns an iterator providing
(event, elem) pairs.
"""
root = None
def __init__(self, file, events=None):
def __init__(self, file, events=None, parser=None):
self._close_file = False
if not hasattr(file, 'read'):
file = open(file, 'rb')
@ -1748,8 +1760,9 @@ else:
self._index = 0
self._error = None
self.root = self._root = None
b = TreeBuilder()
self._parser = XMLParser(b)
if parser is None:
parser = XMLParser(target=TreeBuilder())
self._parser = parser
self._parser._setevents(self._events, events)
def __next__(self):

Loading…
Cancel
Save