Issue minidom.unlink with a context manager
This commit is contained in:
parent
3dcb5acdb0
commit
17173cfe7b
@ -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 be called on the :class:`Document` object, but may be called on child nodes
|
||||||
to discard children of that node.
|
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="")
|
.. method:: Node.writexml(writer, indent="", addindent="", newl="", encoding="")
|
||||||
|
|
||||||
|
@ -228,7 +228,14 @@ class MinidomTest(unittest.TestCase):
|
|||||||
|
|
||||||
def testUnlink(self):
|
def testUnlink(self):
|
||||||
dom = parse(tstfile)
|
dom = parse(tstfile)
|
||||||
|
self.assertTrue(dom.childNodes)
|
||||||
dom.unlink()
|
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):
|
def testElement(self):
|
||||||
dom = Document()
|
dom = Document()
|
||||||
|
@ -268,6 +268,14 @@ class Node(xml.dom.Node):
|
|||||||
self.previousSibling = None
|
self.previousSibling = None
|
||||||
self.nextSibling = 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, "firstChild", doc="First child node, or None.")
|
||||||
defproperty(Node, "lastChild", doc="Last child node, or None.")
|
defproperty(Node, "lastChild", doc="Last child node, or None.")
|
||||||
defproperty(Node, "localName", doc="Namespace-local name of this node.")
|
defproperty(Node, "localName", doc="Namespace-local name of this node.")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user