summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Panter <vadmium+py@gmail.com>2015-09-23 01:43:08 (GMT)
committerMartin Panter <vadmium+py@gmail.com>2015-09-23 01:43:08 (GMT)
commit982a08f8bb0e5df633cd502f86c0f1d019497e80 (patch)
treeacfd5dd7e5f6bbf04b26e93dd9800b7aecc1a17f
parent5f62112db409627deb3095297fa5fe0d60340a9b (diff)
parent89f76d3f913e0527fbcc0d15cb3c17fbf6ca8618 (diff)
downloadcpython-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.py21
-rw-r--r--Lib/xml/etree/ElementTree.py9
-rw-r--r--Misc/NEWS4
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()
diff --git a/Misc/NEWS b/Misc/NEWS
index 4e8889e..a3cc03f 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -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.