xml.dom.minidom: add more __slots__ to limit resource usage.
authorFlorent Xicluna <florent.xicluna@gmail.com>
Mon, 5 Mar 2012 11:37:02 +0000 (12:37 +0100)
committerFlorent Xicluna <florent.xicluna@gmail.com>
Mon, 5 Mar 2012 11:37:02 +0000 (12:37 +0100)
Lib/xml/dom/__init__.py
Lib/xml/dom/minidom.py

index 4401bdfcf33a89800baa2278cab40bf5433ca4f4..97cf9a6429993d97e26e1867b038d433055cf419 100644 (file)
@@ -17,6 +17,7 @@ pulldom -- DOM builder supporting on-demand tree-building for selected
 
 class Node:
     """Class giving the NodeType constants."""
+    __slots__ = ()
 
     # DOM implementations may use this as a base class for their own
     # Node implementations.  If they don't, the constants defined here
index 3de8a4d4967a3329ead1839d6d3d80aa6cd607f5..275e20c420f6a6a6877da1f8b10187edb45c0ca4 100644 (file)
@@ -62,10 +62,7 @@ class Node(xml.dom.Node):
             return writer.stream.getvalue()
 
     def hasChildNodes(self):
-        if self.childNodes:
-            return True
-        else:
-            return False
+        return bool(self.childNodes)
 
     def _get_childNodes(self):
         return self.childNodes
@@ -930,6 +927,7 @@ class Childless:
     """Mixin that makes childless-ness easy to implement and avoids
     the complexity of the Node methods that deal with children.
     """
+    __slots__ = ()
 
     attributes = None
     childNodes = EmptyNodeList()
@@ -1067,6 +1065,8 @@ defproperty(CharacterData, "length", doc="Length of the string data.")
 
 
 class Text(CharacterData):
+    __slots__ = ()
+
     nodeType = Node.TEXT_NODE
     nodeName = "#text"
     attributes = None
@@ -1188,6 +1188,8 @@ class Comment(CharacterData):
 
 
 class CDATASection(Text):
+    __slots__ = ()
+
     nodeType = Node.CDATA_SECTION_NODE
     nodeName = "#cdata-section"
 
@@ -1266,8 +1268,7 @@ defproperty(ReadOnlySequentialNamedNodeMap, "length",
 class Identified:
     """Mix-in class that supports the publicId and systemId attributes."""
 
-    # XXX this does not work, this is an old-style class
-    # __slots__ = 'publicId', 'systemId'
+    __slots__ = 'publicId', 'systemId'
 
     def _identified_mixin_init(self, publicId, systemId):
         self.publicId = publicId