From: Serhiy Storchaka Date: Mon, 25 Feb 2013 11:31:29 +0000 (+0200) Subject: Issue #1470548: Do not buffer XMLGenerator output. X-Git-Tag: v2.7.4rc1~74 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=93bfe7d860644595eaf2bd5c9bf7db31ee4a4201;p=thirdparty%2FPython%2Fcpython.git Issue #1470548: Do not buffer XMLGenerator output. Add test for fragment producing with XMLGenerator. --- diff --git a/Lib/test/test_sax.py b/Lib/test/test_sax.py index 825c16a8d03d..3a20eac6b128 100644 --- a/Lib/test/test_sax.py +++ b/Lib/test/test_sax.py @@ -403,6 +403,21 @@ class XmlgenTest: func(result) self.assertFalse(result.closed) + def test_xmlgen_fragment(self): + result = self.ioclass() + gen = XMLGenerator(result) + + # Don't call gen.startDocument() + gen.startElement("foo", {"a": "1.0"}) + gen.characters("Hello") + gen.endElement("foo") + gen.startElement("bar", {"b": "2.0"}) + gen.endElement("bar") + # Don't call gen.endDocument() + + self.assertEqual(result.getvalue(), + 'Hello') + class StringXmlgenTest(XmlgenTest, unittest.TestCase): ioclass = StringIO diff --git a/Lib/xml/sax/saxutils.py b/Lib/xml/sax/saxutils.py index dad74f5389d8..3d81a8e1bf47 100644 --- a/Lib/xml/sax/saxutils.py +++ b/Lib/xml/sax/saxutils.py @@ -98,9 +98,13 @@ def _gettextwriter(out, encoding): except AttributeError: pass # wrap a binary writer with TextIOWrapper - return io.TextIOWrapper(buffer, encoding=encoding, - errors='xmlcharrefreplace', - newline='\n') + class UnbufferedTextIOWrapper(io.TextIOWrapper): + def write(self, s): + super(UnbufferedTextIOWrapper, self).write(s) + self.flush() + return UnbufferedTextIOWrapper(buffer, encoding=encoding, + errors='xmlcharrefreplace', + newline='\n') class XMLGenerator(handler.ContentHandler):