Commit 9f873186 authored by olivier R-D's avatar olivier R-D

fix deletion of node without Values

parent bfa3a028
......@@ -253,17 +253,21 @@ class NodeManagementService(object):
if rdesc.NodeId == item.NodeId:
self._aspace[elem].references.remove(rdesc)
for handle, callback in list(self._aspace[item.NodeId].attributes[ua.AttributeIds.Value].datachange_callbacks.items()):
self._delete_node_callbacks(self._aspace[item.NodeId])
del(self._aspace[item.NodeId])
return ua.StatusCode()
def _delete_node_callbacks(self, nodedata):
if ua.AttributeIds.Value in nodedata.attributes:
for handle, callback in nodedata.attributes[ua.AttributeIds.Value].datachange_callbacks.items():
try:
callback(handle, None, ua.StatusCode(ua.StatusCodes.BadNodeIdUnknown))
self._aspace.delete_datachange_callback(handle)
except Exception as ex:
self.logger.exception("Error calling datachange callback %s, %s, %s", k, v, ex)
del self._aspace[item.NodeId]
return ua.StatusCode()
def add_references(self, refs, user=User.Admin):
result = []
for ref in refs:
......
......@@ -406,6 +406,16 @@ class CommonTests(object):
with self.assertRaises(ua.UaStatusCodeError):
obj.get_child(["2:FolderToDelete", "2:VarToDelete"])
def test_delete_nodes_recursive(self):
obj = self.opc.get_objects_node()
fold = obj.add_folder(2, "FolderToDeleteR")
var = fold.add_variable(2, "VarToDeleteR", 9.1)
self.opc.delete_nodes([fold, var])
with self.assertRaises(ua.UaStatusCodeError):
var.set_value(7.8)
with self.assertRaises(ua.UaStatusCodeError):
obj.get_child(["2:FolderToDelete", "2:VarToDelete"])
def test_server_node(self):
node = self.opc.get_server_node()
self.assertEqual(ua.QualifiedName('Server', 0), node.get_browse_name())
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment