summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGeorg Brandl <georg@python.org>2013-05-12 10:08:05 (GMT)
committerGeorg Brandl <georg@python.org>2013-05-12 10:08:05 (GMT)
commit2665f218668dbf40b2bbabd4aa40b51f06fcd5f7 (patch)
treecb6537de4ab5f4efbe9ed9ed2523d2e7b25951d7
parentd1ef30fa60405d55faf104f257b98c2bde4f0e45 (diff)
parent64949fa20e4845e92a1d42f581a47b559a9acd25 (diff)
downloadcpython-2665f218668dbf40b2bbabd4aa40b51f06fcd5f7.zip
cpython-2665f218668dbf40b2bbabd4aa40b51f06fcd5f7.tar.gz
cpython-2665f218668dbf40b2bbabd4aa40b51f06fcd5f7.tar.bz2
merge with 3.3
-rw-r--r--Lib/test/test_sax.py31
-rw-r--r--Lib/xml/sax/saxutils.py5
-rw-r--r--Misc/NEWS9
3 files changed, 45 insertions, 0 deletions
diff --git a/Lib/test/test_sax.py b/Lib/test/test_sax.py
index e235a0b..0261c6a 100644
--- a/Lib/test/test_sax.py
+++ b/Lib/test/test_sax.py
@@ -15,6 +15,7 @@ from xml.sax.expatreader import create_parser
from xml.sax.handler import feature_namespaces
from xml.sax.xmlreader import InputSource, AttributesImpl, AttributesNSImpl
from io import BytesIO, StringIO
+import codecs
import os.path
import shutil
from test import support
@@ -538,6 +539,34 @@ class WriterXmlgenTest(BytesXmlgenTest):
def getvalue(self):
return b''.join(self)
+class StreamWriterXmlgenTest(XmlgenTest, unittest.TestCase):
+ def ioclass(self):
+ raw = BytesIO()
+ writer = codecs.getwriter('ascii')(raw, 'xmlcharrefreplace')
+ writer.getvalue = raw.getvalue
+ return writer
+
+ def xml(self, doc, encoding='iso-8859-1'):
+ return ('<?xml version="1.0" encoding="%s"?>\n%s' %
+ (encoding, doc)).encode('ascii', 'xmlcharrefreplace')
+
+class StreamReaderWriterXmlgenTest(XmlgenTest, unittest.TestCase):
+ fname = support.TESTFN + '-codecs'
+
+ def ioclass(self):
+ writer = codecs.open(self.fname, 'w', encoding='ascii',
+ errors='xmlcharrefreplace', buffering=0)
+ self.addCleanup(support.unlink, self.fname)
+ writer.getvalue = self.getvalue
+ return writer
+
+ def getvalue(self):
+ with open(self.fname, 'rb') as f:
+ return f.read()
+
+ def xml(self, doc, encoding='iso-8859-1'):
+ return ('<?xml version="1.0" encoding="%s"?>\n%s' %
+ (encoding, doc)).encode('ascii', 'xmlcharrefreplace')
start = b'<?xml version="1.0" encoding="iso-8859-1"?>\n'
@@ -946,6 +975,8 @@ def test_main():
StringXmlgenTest,
BytesXmlgenTest,
WriterXmlgenTest,
+ StreamWriterXmlgenTest,
+ StreamReaderWriterXmlgenTest,
ExpatReaderTest,
ErrorReportingTest,
XmlReaderTest)
diff --git a/Lib/xml/sax/saxutils.py b/Lib/xml/sax/saxutils.py
index a62183a..0798ecd 100644
--- a/Lib/xml/sax/saxutils.py
+++ b/Lib/xml/sax/saxutils.py
@@ -5,6 +5,7 @@ convenience of application and driver writers.
import os, urllib.parse, urllib.request
import io
+import codecs
from . import handler
from . import xmlreader
@@ -77,6 +78,10 @@ def _gettextwriter(out, encoding):
# use a text writer as is
return out
+ if isinstance(out, (codecs.StreamWriter, codecs.StreamReaderWriter)):
+ # use a codecs stream writer as is
+ return out
+
# wrap a binary writer with TextIOWrapper
if isinstance(out, io.RawIOBase):
# Keep the original file open when the TextIOWrapper is
diff --git a/Misc/NEWS b/Misc/NEWS
index 4c88a54..e3b860a 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -91,6 +91,9 @@ Core and Builtins
Library
-------
+- Issue #17915: Fix interoperability of xml.sax with file objects returned by
+ codecs.open().
+
- Issue #16601: Restarting iteration over tarfile no more continues from where
it left off. Patch by Michael Birtwell.
@@ -280,6 +283,12 @@ Tests
- Issue #17692: test_sqlite now works with unittest test discovery.
Patch by Zachary Ware.
+
+Documentation
+-------------
+
+- Issue #15940: Specify effect of locale on time functions.
+
- Issue #6696: add documentation for the Profile objects, and improve
profile/cProfile docs. Patch by Tom Pinckney.