mirror of
https://github.com/python/cpython.git
synced 2024-11-25 10:54:51 +08:00
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 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="")
|
||||
|
||||
|
@ -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()
|
||||
|
@ -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.")
|
||||
|
Loading…
Reference in New Issue
Block a user