Issue minidom.unlink with a context manager
This commit is contained in:
Kristján Valur Jónsson 2010-06-09 08:13:42 +00:00
parent 3dcb5acdb0
commit 17173cfe7b
3 changed files with 22 additions and 0 deletions

View File

@ -114,6 +114,13 @@ module documentation. This section lists the differences between the API and
to be called on the :class:`Document` object, but may be called on child nodes
to discard children of that node.
You can avoid calling this method explicitly by using the :keyword:`with`
statement. The following code will automatically unlink *dom* when the
:keyword:`with` block is exited::
with xml.dom.minidom.parse(datasource) as dom:
... # Work with dom.
.. method:: Node.writexml(writer, indent="", addindent="", newl="", encoding="")

View File

@ -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()

View File

@ -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.")