diff -r 4f3fbdb4d748 Lib/test/test_pulldom.py --- a/Lib/test/test_pulldom.py Tue Mar 19 15:38:32 2013 -0700 +++ b/Lib/test/test_pulldom.py Wed Mar 20 11:09:21 2013 -0700 @@ -1,6 +1,6 @@ import io import unittest -import sys +from unittest import mock import xml.sax from xml.sax.xmlreader import AttributesImpl @@ -339,9 +339,13 @@ doc.unlink() -def test_main(): - run_unittest(PullDOMTestCase, ThoroughTestCase, SAX2DOMTestCase) +class DOMEventStreamDeprecationTest(unittest.TestCase): + def test_getitem_is_deprecated(self): + parser = pulldom.parse(io.StringIO('')) + with mock.patch('warnings.warn') as warn: + parser[1] + warn.assert_called_once_with(mock.ANY, DeprecationWarning) if __name__ == "__main__": - test_main() + unittest.main() diff -r 4f3fbdb4d748 Lib/xml/dom/pulldom.py --- a/Lib/xml/dom/pulldom.py Tue Mar 19 15:38:32 2013 -0700 +++ b/Lib/xml/dom/pulldom.py Wed Mar 20 11:09:21 2013 -0700 @@ -1,5 +1,6 @@ import xml.sax import xml.sax.handler +import warnings START_ELEMENT = "START_ELEMENT" END_ELEMENT = "END_ELEMENT" @@ -10,6 +11,7 @@ IGNORABLE_WHITESPACE = "IGNORABLE_WHITESPACE" CHARACTERS = "CHARACTERS" + class PullDOM(xml.sax.ContentHandler): _locator = None document = None @@ -193,6 +195,7 @@ "clear(): Explicitly release parsing structures" self.document = None + class ErrorHandler: def warning(self, exception): print(exception) @@ -201,6 +204,7 @@ def fatalError(self, exception): raise exception + class DOMEventStream: def __init__(self, stream, parser, bufsize): self.stream = stream @@ -217,6 +221,10 @@ self.parser.setContentHandler(self.pulldom) def __getitem__(self, pos): + warnings.warn( + "__getitem__ is broken and therefore deprecated.\ + Use iteration to access the data.", + DeprecationWarning) rc = self.getEvent() if rc: return rc @@ -286,6 +294,7 @@ self.parser = None self.stream = None + class SAX2DOM(PullDOM): def startElementNS(self, name, tagName , attrs): @@ -321,6 +330,7 @@ default_bufsize = (2 ** 14) - 20 + def parse(stream_or_string, parser=None, bufsize=None): if bufsize is None: bufsize = default_bufsize @@ -332,6 +342,7 @@ parser = xml.sax.make_parser() return DOMEventStream(stream, parser, bufsize) + def parseString(string, parser=None): from io import StringIO