[Python-checkins] cpython: Remove the obsolete XMLParser._start/_start_list duality.

eli.bendersky python-checkins at python.org
Mon Aug 26 03:58:27 CEST 2013


http://hg.python.org/cpython/rev/022bd6cd6c79
changeset:   85408:022bd6cd6c79
user:        Eli Bendersky <eliben at gmail.com>
date:        Sun Aug 25 18:58:18 2013 -0700
summary:
  Remove the obsolete XMLParser._start/_start_list duality.

XMLParser configures expat to report attributes in a list (ordered_attributes),
so only _start_list is needed. Rename it to _start and kill _start.

files:
  Lib/xml/etree/ElementTree.py |  38 +++++++----------------
  1 files changed, 12 insertions(+), 26 deletions(-)


diff --git a/Lib/xml/etree/ElementTree.py b/Lib/xml/etree/ElementTree.py
--- a/Lib/xml/etree/ElementTree.py
+++ b/Lib/xml/etree/ElementTree.py
@@ -1469,19 +1469,10 @@
             parser.CommentHandler = target.comment
         if hasattr(target, 'pi'):
             parser.ProcessingInstructionHandler = target.pi
-        # let expat do the buffering, if supported
-        try:
-            parser.buffer_text = 1
-        except AttributeError:
-            pass
-        # use new-style attribute handling, if supported
-        try:
-            parser.ordered_attributes = 1
-            parser.specified_attributes = 1
-            if hasattr(target, 'start'):
-                parser.StartElementHandler = self._start_list
-        except AttributeError:
-            pass
+        # 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:
@@ -1503,7 +1494,7 @@
                 parser.ordered_attributes = 1
                 parser.specified_attributes = 1
                 def handler(tag, attrib_in, event=event_name, append=append,
-                            start=self._start_list):
+                            start=self._start):
                     append((event, start(tag, attrib_in)))
                 parser.StartElementHandler = handler
             elif event_name == "end":
@@ -1539,21 +1530,16 @@
             self._names[key] = name
         return name
 
-    def _start(self, tag, attrib_in):
+    def _start(self, tag, attr_list):
+        # Handler for expat's StartElementHandler. Since ordered_attributes
+        # is set, the attributes are reported as a list of alternating
+        # attribute name,value.
         fixname = self._fixname
         tag = fixname(tag)
         attrib = {}
-        for key, value in attrib_in.items():
-            attrib[fixname(key)] = value
-        return self.target.start(tag, attrib)
-
-    def _start_list(self, tag, attrib_in):
-        fixname = self._fixname
-        tag = fixname(tag)
-        attrib = {}
-        if attrib_in:
-            for i in range(0, len(attrib_in), 2):
-                attrib[fixname(attrib_in[i])] = attrib_in[i+1]
+        if attr_list:
+            for i in range(0, len(attr_list), 2):
+                attrib[fixname(attr_list[i])] = attr_list[i+1]
         return self.target.start(tag, attrib)
 
     def _end(self, tag):

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list