diff -r e61780cd2c78 Lib/test/test_xml_etree.py --- a/Lib/test/test_xml_etree.py Mon Sep 09 13:47:16 2013 -0500 +++ b/Lib/test/test_xml_etree.py Mon Sep 09 21:29:34 2013 +0200 @@ -985,10 +985,8 @@ ]) self._feed(parser, "\n", chunk_size) self.assert_event_tags(parser, [('end', 'root')]) - # Closing sets the `root` attribute - self.assertIs(parser.root, None) - parser.close() - self.assertEqual(parser.root.tag, 'root') + root = parser.close() + self.assertEqual(root.tag, 'root') def test_feed_while_iterating(self): parser = ET.XMLPullParser() @@ -1021,10 +1019,8 @@ ]) self._feed(parser, "\n") self.assert_event_tags(parser, [('end', '{namespace}root')]) - # Closing sets the `root` attribute - self.assertIs(parser.root, None) - parser.close() - self.assertEqual(parser.root.tag, '{namespace}root') + root = parser.close() + self.assertEqual(root.tag, '{namespace}root') def test_ns_events(self): parser = ET.XMLPullParser(events=('start-ns', 'end-ns')) @@ -1064,10 +1060,9 @@ ('end', '{foo}element'), ]) self._feed(parser, "") - parser.close() - self.assertIs(parser.root, None) + root = parser.close() self.assert_event_tags(parser, [('end', 'root')]) - self.assertEqual(parser.root.tag, 'root') + self.assertEqual(root.tag, 'root') parser = ET.XMLPullParser(events=('start',)) self._feed(parser, "\n") @@ -1085,8 +1080,8 @@ ('start', '{foo}empty-element'), ]) self._feed(parser, "") - parser.close() - self.assertEqual(parser.root.tag, 'root') + root = parser.close() + self.assertEqual(root.tag, 'root') def test_events_sequence(self): # Test that events can be some sequence that's not just a tuple or list diff -r e61780cd2c78 Lib/xml/etree/ElementTree.py --- a/Lib/xml/etree/ElementTree.py Mon Sep 09 13:47:16 2013 -0500 +++ b/Lib/xml/etree/ElementTree.py Mon Sep 09 21:29:34 2013 +0200 @@ -1220,7 +1220,6 @@ # _elementtree.c expects a list, not a deque self._events_queue = [] self._index = 0 - self.root = self._root = None self._parser = _parser or XMLParser(target=TreeBuilder()) # wire up the parser for event reporting if events is None: @@ -1237,10 +1236,9 @@ self._events_queue.append(exc) def close(self): - self._root = self._parser.close() + root = self._parser.close() self._parser = None - if self._index >= len(self._events_queue): - self.root = self._root + return root def read_events(self): events = self._events_queue @@ -1263,8 +1261,6 @@ raise event else: yield event - if self._parser is None: - self.root = self._root class _IterParseIterator: @@ -1275,14 +1271,14 @@ self._parser = XMLPullParser(events=events, _parser=parser) self._file = source self._close_file = close_source - self.root = None + self.root = self._root = None def __next__(self): while 1: for event in self._parser.read_events(): return event if self._parser._parser is None: - self.root = self._parser.root + self.root = self._root if self._close_file: self._file.close() raise StopIteration @@ -1291,7 +1287,7 @@ if data: self._parser.feed(data) else: - self._parser.close() + self._root = self._parser.close() def __iter__(self): return self