Mailing List Archive

bpo-42151: don't set specified_attributes=1 in pure Python ElementTree (GH-22987)
https://github.com/python/cpython/commit/1f433406bd46fbd00b88223ad64daea6bc9eaadc
commit: 1f433406bd46fbd00b88223ad64daea6bc9eaadc
branch: master
author: Felix C. Stegerman <flx@obfusk.net>
committer: corona10 <donghee.na92@gmail.com>
date: 2021-02-24T11:25:31+09:00
summary:

bpo-42151: don't set specified_attributes=1 in pure Python ElementTree (GH-22987)

files:
A Misc/NEWS.d/next/Library/2020-10-26-18-01-09.bpo-42151.et5f7s.rst
M Lib/test/test_xml_etree.py
M Lib/xml/etree/ElementTree.py

diff --git a/Lib/test/test_xml_etree.py b/Lib/test/test_xml_etree.py
index fd4a38527fde0..fcb1f7fdfbbde 100644
--- a/Lib/test/test_xml_etree.py
+++ b/Lib/test/test_xml_etree.py
@@ -108,6 +108,19 @@
<document>&entity;</document>
"""

+ATTLIST_XML = """\
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE Foo [.
+<!ELEMENT foo (bar*)>
+<!ELEMENT bar (#PCDATA)*>
+<!ATTLIST bar xml:lang CDATA "eng">
+<!ENTITY qux "quux">
+]>
+<foo>
+<bar>&qux;</bar>
+</foo>
+"""
+
def checkwarnings(*filters, quiet=False):
def decorator(test):
def newtest(*args, **kwargs):
@@ -1354,6 +1367,12 @@ def test_tree_write_attribute_order(self):
self.assertEqual(serialize(root, method='html'),
'<cirriculum status="public" company="example"></cirriculum>')

+ def test_attlist_default(self):
+ # Test default attribute values; See BPO 42151.
+ root = ET.fromstring(ATTLIST_XML)
+ self.assertEqual(root[0].attrib,
+ {'{http://www.w3.org/XML/1998/namespace}lang': 'eng'})
+

class XMLPullParserTest(unittest.TestCase):

diff --git a/Lib/xml/etree/ElementTree.py b/Lib/xml/etree/ElementTree.py
index 7a269001d6e18..168418e466c45 100644
--- a/Lib/xml/etree/ElementTree.py
+++ b/Lib/xml/etree/ElementTree.py
@@ -1560,7 +1560,6 @@ def __init__(self, *, target=None, encoding=None):
# Configure pyexpat: buffering, new-style attribute handling.
parser.buffer_text = 1
parser.ordered_attributes = 1
- parser.specified_attributes = 1
self._doctype = None
self.entity = {}
try:
@@ -1580,7 +1579,6 @@ def _setevents(self, events_queue, events_to_report):
for event_name in events_to_report:
if event_name == "start":
parser.ordered_attributes = 1
- parser.specified_attributes = 1
def handler(tag, attrib_in, event=event_name, append=append,
start=self._start):
append((event, start(tag, attrib_in)))
diff --git a/Misc/NEWS.d/next/Library/2020-10-26-18-01-09.bpo-42151.et5f7s.rst b/Misc/NEWS.d/next/Library/2020-10-26-18-01-09.bpo-42151.et5f7s.rst
new file mode 100644
index 0000000000000..6361f2c088d2d
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2020-10-26-18-01-09.bpo-42151.et5f7s.rst
@@ -0,0 +1,3 @@
+Make the pure Python implementation of :mod:`xml.etree.ElementTree` behave
+the same as the C implementation (:mod:`_elementree`) regarding default
+attribute values (by not setting ``specified_attributes=1``).

_______________________________________________
Python-checkins mailing list
Python-checkins@python.org
https://mail.python.org/mailman/listinfo/python-checkins