diff options
author | Martin Panter <vadmium+py@gmail.com> | 2015-09-23 01:43:08 (GMT) |
---|---|---|
committer | Martin Panter <vadmium+py@gmail.com> | 2015-09-23 01:43:08 (GMT) |
commit | 982a08f8bb0e5df633cd502f86c0f1d019497e80 (patch) | |
tree | acfd5dd7e5f6bbf04b26e93dd9800b7aecc1a17f | |
parent | 5f62112db409627deb3095297fa5fe0d60340a9b (diff) | |
parent | 89f76d3f913e0527fbcc0d15cb3c17fbf6ca8618 (diff) | |
download | cpython-982a08f8bb0e5df633cd502f86c0f1d019497e80.zip cpython-982a08f8bb0e5df633cd502f86c0f1d019497e80.tar.gz cpython-982a08f8bb0e5df633cd502f86c0f1d019497e80.tar.bz2 |
Issue #25047: Merge Element Tree encoding from 3.4 into 3.5
-rw-r--r-- | Lib/test/test_xml_etree.py | 21 | ||||
-rw-r--r-- | Lib/xml/etree/ElementTree.py | 9 | ||||
-rw-r--r-- | Misc/NEWS | 4 |
3 files changed, 22 insertions, 12 deletions
diff --git a/Lib/test/test_xml_etree.py b/Lib/test/test_xml_etree.py index f83db7f..ca8cdf8 100644 --- a/Lib/test/test_xml_etree.py +++ b/Lib/test/test_xml_etree.py @@ -2396,14 +2396,21 @@ class IOTest(unittest.TestCase): elem = ET.Element("tag") elem.text = "abc" self.assertEqual(serialize(elem), '<tag>abc</tag>') - self.assertEqual(serialize(elem, encoding="utf-8"), - b'<tag>abc</tag>') - self.assertEqual(serialize(elem, encoding="us-ascii"), - b'<tag>abc</tag>') + for enc in ("utf-8", "us-ascii"): + with self.subTest(enc): + self.assertEqual(serialize(elem, encoding=enc), + b'<tag>abc</tag>') + self.assertEqual(serialize(elem, encoding=enc.upper()), + b'<tag>abc</tag>') for enc in ("iso-8859-1", "utf-16", "utf-32"): - self.assertEqual(serialize(elem, encoding=enc), - ("<?xml version='1.0' encoding='%s'?>\n" - "<tag>abc</tag>" % enc).encode(enc)) + with self.subTest(enc): + self.assertEqual(serialize(elem, encoding=enc), + ("<?xml version='1.0' encoding='%s'?>\n" + "<tag>abc</tag>" % enc).encode(enc)) + upper = enc.upper() + self.assertEqual(serialize(elem, encoding=upper), + ("<?xml version='1.0' encoding='%s'?>\n" + "<tag>abc</tag>" % upper).encode(enc)) elem = ET.Element("tag") elem.text = "<&\"\'>" diff --git a/Lib/xml/etree/ElementTree.py b/Lib/xml/etree/ElementTree.py index 4c109a2..bb32a8f 100644 --- a/Lib/xml/etree/ElementTree.py +++ b/Lib/xml/etree/ElementTree.py @@ -752,14 +752,13 @@ class ElementTree: encoding = "utf-8" else: encoding = "us-ascii" - else: - encoding = encoding.lower() - with _get_writer(file_or_filename, encoding) as write: + enc_lower = encoding.lower() + with _get_writer(file_or_filename, enc_lower) as write: if method == "xml" and (xml_declaration or (xml_declaration is None and - encoding not in ("utf-8", "us-ascii", "unicode"))): + enc_lower not in ("utf-8", "us-ascii", "unicode"))): declared_encoding = encoding - if encoding == "unicode": + if enc_lower == "unicode": # Retrieve the default encoding for the xml declaration import locale declared_encoding = locale.getpreferredencoding() @@ -18,6 +18,10 @@ Core and Builtins Library ------- +- Issue #25047: The XML encoding declaration written by Element Tree now + respects the letter case given by the user. This restores the ability to + write encoding names in uppercase like "UTF-8", which worked in Python 2. + - Issue #19143: platform module now reads Windows version from kernel32.dll to avoid compatibility shims. |