diff options
author | Eli Bendersky <eliben@gmail.com> | 2013-01-24 15:15:19 (GMT) |
---|---|---|
committer | Eli Bendersky <eliben@gmail.com> | 2013-01-24 15:15:19 (GMT) |
commit | aaa9780fe174a4ed5fc19df1d474fb802a19fa42 (patch) | |
tree | 0a0e72d20d261b78355b511629d158c1ad08bc1c | |
parent | 33f7cdd9751b23b4ab5b9419c1209dc30c86fa39 (diff) | |
download | cpython-aaa9780fe174a4ed5fc19df1d474fb802a19fa42.zip cpython-aaa9780fe174a4ed5fc19df1d474fb802a19fa42.tar.gz cpython-aaa9780fe174a4ed5fc19df1d474fb802a19fa42.tar.bz2 |
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.
-rw-r--r-- | Lib/test/test_xml_etree.py | 6 | ||||
-rw-r--r-- | Lib/xml/etree/ElementTree.py | 19 |
2 files changed, 22 insertions, 3 deletions
diff --git a/Lib/test/test_xml_etree.py b/Lib/test/test_xml_etree.py index f6505d6..61161b6 100644 --- a/Lib/test/test_xml_etree.py +++ b/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) diff --git a/Lib/xml/etree/ElementTree.py b/Lib/xml/etree/ElementTree.py index e8e309c..641d787 100644 --- a/Lib/xml/etree/ElementTree.py +++ b/Lib/xml/etree/ElementTree.py @@ -1737,8 +1737,20 @@ else: source.close() class iterparse: + """Parses an XML section into an element tree incrementally. + + Reports what’s 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): |