Commit 7e9f42f2 authored by maljac's avatar maljac Committed by ORD

[Server] Respect parentid in xml import, Add tests and fix

parent 14a33c98
......@@ -141,15 +141,19 @@ class XMLParser(object):
# inserted nodes
if node.parent in sorted_nodes_ids:
insert = -1
if insert in [0, -1]:
if insert == 0:
sorted_nodes.insert(insert, node)
sorted_nodes_ids.insert(insert, node.nodeid)
pop_nodes.append(node)
elif insert == -1:
sorted_nodes.append(node)
sorted_nodes_ids.append(node.nodeid)
pop_nodes.append(node)
# Remove inserted nodes from the list
for node in pop_nodes:
_nodes.pop(_nodes.index(node))
return sorted_nodes
def _split_node_id(self, value):
......@@ -183,6 +187,9 @@ class XMLParser(object):
return result
def _parse_node(self, name, child):
"""
Parse a XML node and create a NodeData object.
"""
obj = NodeData()
obj.nodetype = name
for key, val in child.attrib.items():
......
......@@ -4,6 +4,7 @@ import logging
import io
from datetime import datetime
import unittest
from collections import namedtuple
from opcua import ua
from opcua.ua import extensionobject_from_binary
......@@ -413,7 +414,7 @@ class TestUnit(unittest.TestCase):
n = ua.NodeId(0, 3)
self.assertFalse(n.is_null())
self.assertTrue(n.has_null_identifier())
def test_where_clause(self):
cf = ua.ContentFilter()
......@@ -458,6 +459,33 @@ class TestUnit(unittest.TestCase):
res4 = parser._get_node_id('ns=2;i=1001')
self.assertEqual(res4, 'ns=2;i=1001')
def test_xmlparser_sort_nodes_by_parentid(self):
NodeMock = namedtuple('NodeMock', 'nodeid parent')
server = None
# We actually dont need this. Thus we just pass the available file
xml_path = 'tests/custom_nodes.xml'
unordered_nodes = [
NodeMock('ns=1;i=1001', None),
NodeMock('ns=1;i=1002', 'ns=1;i=1003'),
NodeMock('ns=1;i=1003', 'ns=1;i=1001'),
NodeMock('ns=1;i=1004', 'ns=1;i=1002')
]
ordered_nodes = [
unordered_nodes[0],
unordered_nodes[2],
unordered_nodes[1],
unordered_nodes[3],
]
namespaces = {'1': (1, 'http://someuri.com')}
parser = XMLParser(xml_path, server)
parser.namespaces = namespaces
res = parser._sort_nodes_by_parentid(unordered_nodes)
self.assertEqual(res, ordered_nodes)
class TestMaskEnum(unittest.TestCase):
class MyEnum(_MaskEnum):
......
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