diff options
author | Kristján Valur Jónsson <kristjan@ccpgames.com> | 2010-06-09 08:13:42 (GMT) |
---|---|---|
committer | Kristján Valur Jónsson <kristjan@ccpgames.com> | 2010-06-09 08:13:42 (GMT) |
commit | 17173cfe7b5f880c02a8f9468f17607ec84e5b39 (patch) | |
tree | 51a9e201ac3e86ad153505c8da15b4229f5f39f3 /Lib | |
parent | 3dcb5acdb0151d1686762329ec07ae2ac4d1caae (diff) | |
download | cpython-17173cfe7b5f880c02a8f9468f17607ec84e5b39.zip cpython-17173cfe7b5f880c02a8f9468f17607ec84e5b39.tar.gz cpython-17173cfe7b5f880c02a8f9468f17607ec84e5b39.tar.bz2 |
http://bugs.python.org/issue8832
Issue minidom.unlink with a context manager
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/test/test_minidom.py | 7 | ||||
-rw-r--r-- | Lib/xml/dom/minidom.py | 8 |
2 files changed, 15 insertions, 0 deletions
diff --git a/Lib/test/test_minidom.py b/Lib/test/test_minidom.py index 32863bf..9a9acfb 100644 --- a/Lib/test/test_minidom.py +++ b/Lib/test/test_minidom.py @@ -228,7 +228,14 @@ class MinidomTest(unittest.TestCase): def testUnlink(self): dom = parse(tstfile) + self.assertTrue(dom.childNodes) dom.unlink() + self.assertFalse(dom.childNodes) + + def testContext(self): + with parse(tstfile) as dom: + self.assertTrue(dom.childNodes) + self.assertFalse(dom.childNodes) def testElement(self): dom = Document() diff --git a/Lib/xml/dom/minidom.py b/Lib/xml/dom/minidom.py index f4f4400..7616b46 100644 --- a/Lib/xml/dom/minidom.py +++ b/Lib/xml/dom/minidom.py @@ -268,6 +268,14 @@ class Node(xml.dom.Node): self.previousSibling = None self.nextSibling = None + # A Node is its own context manager, to ensure that an unlink() call occurs. + # This is similar to how a file object works. + def __enter__(self): + return self + + def __exit__(self, et, ev, tb): + self.unlink() + defproperty(Node, "firstChild", doc="First child node, or None.") defproperty(Node, "lastChild", doc="Last child node, or None.") defproperty(Node, "localName", doc="Namespace-local name of this node.") |