Skip to content

Commit 0729c9c

Browse files
Nebukadnezaoroulet
authored andcommitted
Make recursive node deletion truly recursive
Before it only deleted the first level of nodes below the specified list, which was not what the parameter `recursive` conveyed to the user.
1 parent 36a0ee9 commit 0729c9c

2 files changed

Lines changed: 8 additions & 3 deletions

File tree

opcua/common/manage_nodes.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -379,7 +379,7 @@ def delete_nodes(server, nodes, recursive=False, delete_target_references=True):
379379
"""
380380
nodestodelete = []
381381
if recursive:
382-
nodes += _add_childs(nodes)
382+
nodes = _add_childs(nodes)
383383
for mynode in nodes:
384384
it = ua.DeleteNodesItem()
385385
it.NodeId = mynode.nodeid
@@ -392,8 +392,9 @@ def delete_nodes(server, nodes, recursive=False, delete_target_references=True):
392392

393393
def _add_childs(nodes):
394394
results = []
395-
for mynode in nodes[:]:
396-
results += mynode.get_children()
395+
for mynode in nodes:
396+
results += _add_childs(mynode.get_children())
397+
results += [mynode]
397398
return results
398399

399400

tests/tests_common.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,10 +139,14 @@ def test_delete_nodes_recursive2(self):
139139
var = fold.add_property(2, "ProToDeleteR", 9.1)
140140
prop = fold.add_property(2, "ProToDeleteR", 9.1)
141141
o = fold.add_object(3, "ObjToDeleteR")
142+
o_var = o.add_variable(3, "VarToDeleteRR", 9.2)
143+
o_prop = o.add_property(3, "PropToDeleteRR", 9.2)
142144
mynodes.append(nfold)
143145
mynodes.append(var)
144146
mynodes.append(prop)
145147
mynodes.append(o)
148+
mynodes.append(o_var)
149+
mynodes.append(o_prop)
146150
self.opc.delete_nodes([fold], recursive=True)
147151
for node in mynodes:
148152
with self.assertRaises(ua.UaStatusCodeError):

0 commit comments

Comments
 (0)