5 from opcua
import uamethod
9 logger = logging.getLogger(
"opcua.common.xmlimporter")
10 logger.setLevel(logging.DEBUG)
11 logger = logging.getLogger(
"opcua.common.xmlparser")
12 logger.setLevel(logging.DEBUG)
16 def func(parent, value, string):
26 self.srv.import_xml(
"tests/custom_nodes.xml")
27 o = self.opc.get_objects_node()
28 v = o.get_child([
"1:MyXMLFolder",
"1:MyXMLObject",
"1:MyXMLVariable"])
32 node_path = [
"Types",
"DataTypes",
"BaseDataType",
"Enumeration",
33 "1:MyEnum",
"0:EnumStrings"]
34 o = self.opc.get_root_node().get_child(node_path)
38 node_path = [
"Types",
"ObjectTypes",
"BaseObjectType",
39 "1:MyObjectType",
"1:MyMethod"]
40 o = self.opc.get_root_node().get_child(node_path)
44 node_path = [
"Types",
"ObjectTypes",
"BaseObjectType",
45 "1:MyObjectType",
"1:MyMethod",
"InputArguments"]
46 o = self.opc.get_root_node().get_child(node_path)
47 input_arg = o.get_data_value().Value.Value[0]
51 self.srv.register_namespace(
'http://placeholder.toincrease.nsindex')
54 self.srv.import_xml(
"tests/custom_nodesns.xml")
56 ns = self.srv.get_namespace_index(
"http://examples.freeopcua.github.io/")
57 o = self.opc.get_objects_node()
59 o2 = o.get_child([
"{0:d}:MyBaseObject".format(ns)])
61 self.assertIsNotNone(o2)
63 v1 = o.get_child([
"{0:d}:MyBaseObject".format(ns),
"{0:d}:MyVar".format(ns)])
64 self.assertIsNotNone(v1)
66 r1 = o2.get_references(refs=ua.ObjectIds.HasComponent)[0]
69 r3 = v1.get_references(refs=ua.ObjectIds.HasComponent)[0]
73 self.opc.register_namespace(
"tititi")
74 self.opc.register_namespace(
"whatthefuck")
75 o = self.opc.nodes.objects.add_object(2,
"xmlexportmethod")
76 m = o.add_method(2,
"callme", func, [ua.VariantType.Double, ua.VariantType.String], [ua.VariantType.Float])
78 inputs = m.get_child(
"InputArguments")
79 val = inputs.get_value()
80 val[0].ArrayDimensions = [2, 2]
81 desc = b
"My nce description" 82 val[0].Description = ua.LocalizedText(desc)
87 nodes.extend(m.get_children())
88 self.opc.export_xml(nodes,
"export.xml")
90 self.opc.delete_nodes(nodes)
91 self.opc.import_xml(
"export.xml")
94 val = inputs.get_value()
101 self.opc.register_namespace(
"tititi")
102 self.opc.register_namespace(
"whatthexxx")
103 o = self.opc.nodes.objects.add_object(2,
"xmlexportobj")
104 v = o.add_variable(3,
"myxmlvar", 6.78, ua.VariantType.Float)
105 a = o.add_variable(3,
"myxmlvar-array", [6, 1], ua.VariantType.UInt16)
106 a2 = o.add_variable(3,
"myxmlvar-2dim", [[1, 2], [3, 4]], ua.VariantType.UInt32)
107 a3 = o.add_variable(3,
"myxmlvar-2dim", [[]], ua.VariantType.ByteString)
109 nodes = [o, v, a, a2, a3]
110 self.opc.export_xml(nodes,
"export-vars.xml")
111 self.opc.delete_nodes(nodes)
112 self.opc.import_xml(
"export-vars.xml")
115 self.
assertEqual(v.get_data_type(), ua.NodeId(ua.ObjectIds.Float))
117 self.
assertEqual(a.get_data_type(), ua.NodeId(ua.ObjectIds.UInt16))
118 self.assertIn(a.get_value_rank(), (0, 1))
122 self.
assertEqual(a2.get_data_type(), ua.NodeId(ua.ObjectIds.UInt32))
123 self.assertIn(a2.get_value_rank(), (0, 2))
124 self.
assertEqual(a2.get_attribute(ua.AttributeIds.ArrayDimensions).Value.Value, [2, 2])
126 self.
assertEqual(a3.get_data_type(), ua.NodeId(ua.ObjectIds.ByteString))
127 self.assertIn(a3.get_value_rank(), (0, 2))
128 self.
assertEqual(a3.get_attribute(ua.AttributeIds.ArrayDimensions).Value.Value, [1, 0])
132 This test is far too complicated but catches a lot of things... 134 ns_array = self.opc.get_namespace_array()
135 if len(ns_array) < 3:
136 self.opc.register_namespace(
"dummy_ns")
137 print(
"ARRAY", self.opc.get_namespace_array())
139 ref_ns = self.opc.register_namespace(
"ref_namespace")
140 new_ns = self.opc.register_namespace(
"my_new_namespace")
141 bname_ns = self.opc.register_namespace(
"bname_namespace")
143 o = self.opc.nodes.objects.add_object(0,
"xmlns0")
144 o50 = self.opc.nodes.objects.add_object(50,
"xmlns20")
145 o200 = self.opc.nodes.objects.add_object(200,
"xmlns200")
146 onew = self.opc.nodes.objects.add_object(new_ns,
"xmlns_new")
147 vnew = onew.add_variable(new_ns,
"xmlns_new_var", 9.99)
148 o_no_export = self.opc.nodes.objects.add_object(ref_ns,
"xmlns_parent")
149 v_no_parent = o_no_export.add_variable(new_ns,
"xmlns_new_var_no_parent", 9.99)
150 o_bname = onew.add_object(
"ns={0};i=4000".format(new_ns),
"{0}:BNAME".format(bname_ns))
152 nodes = [o, o50, o200, onew, vnew, v_no_parent, o_bname]
153 print(
"CREATED", nodes, o_no_export)
154 self.opc.export_xml(nodes,
"export-ns.xml")
156 self.opc.delete_nodes(nodes)
157 ns_node = self.opc.get_node(ua.NodeId(ua.ObjectIds.Server_NamespaceArray))
158 nss = ns_node.get_value()
159 nss.remove(
"my_new_namespace")
161 nss.remove(
"bname_namespace")
162 ns_node.set_value(nss)
163 new_ns = self.opc.register_namespace(
"my_new_namespace_offsett")
164 new_ns = self.opc.register_namespace(
"my_new_namespace")
166 new_nodes = self.opc.import_xml(
"export-ns.xml")
167 print(
"NEW NODES", new_nodes)
169 for i
in [o, o50, o200]:
172 with self.assertRaises(uaerrors.BadNodeIdUnknown):
173 onew.get_browse_name()
176 nss = self.opc.get_namespace_array()
177 self.assertIn(
"bname_namespace", nss)
179 new_ns = self.opc.register_namespace(
"my_new_namespace")
180 bname_ns = self.opc.register_namespace(
"bname_namespace")
181 print(
"ARRAY 2", self.opc.get_namespace_array())
183 print(
"NEW NS", new_ns, onew)
184 onew.nodeid.NamespaceIndex = new_ns
186 onew.get_browse_name()
187 vnew2 = onew.get_children()[0]
188 self.
assertEqual(new_ns, vnew2.nodeid.NamespaceIndex)
191 o = self.opc.nodes.objects.add_variable(2,
"xmlfloat", 5.67)
192 dtype = o.get_data_type()
193 dv = o.get_data_value()
195 self.opc.export_xml([o],
"export-float.xml")
196 self.opc.delete_nodes([o])
197 new_nodes = self.opc.import_xml(
"export-float.xml")
198 o2 = self.opc.get_node(new_nodes[0])
202 self.
assertEqual(dv.Value, o2.get_data_value().Value)
205 o = self.opc.nodes.objects.add_variable(2,
"xmlbool",
True)
209 o = self.opc.nodes.objects.add_variable(2,
"xmlstring",
"mystring")
213 o = self.opc.nodes.objects.add_variable(2,
"xmlstringarray", [
"mystring2",
"mystring3"])
215 dv = node2.get_data_value()
218 o = self.opc.nodes.objects.add_variable(2,
"xmlguid", uuid.uuid4())
222 o = self.opc.nodes.objects.add_variable(2,
"xmlltext", ua.LocalizedText(
"mytext"))
226 o = self.opc.nodes.objects.add_variable(2,
"xmlltext_array", [ua.LocalizedText(
"erert"), ua.LocalizedText(
"erert33")])
230 o = self.opc.nodes.objects.add_variable(2,
"xmlnodeid", ua.NodeId(
"mytext", 1))
235 arg.DataType = ua.NodeId(ua.ObjectIds.Float)
236 arg.Description = ua.LocalizedText(b
"Nice description")
237 arg.ArrayDimensions = [1, 2, 3]
240 node = self.opc.nodes.objects.add_variable(2,
"xmlexportobj2", arg)
242 arg2 = node2.get_value()
245 self.
assertEqual(arg.ArrayDimensions, arg2.ArrayDimensions)
246 self.
assertEqual(arg.Description, arg2.Description)
250 o = self.opc.nodes.objects.add_variable(2,
"xmlenum", 0, varianttype=ua.VariantType.Int32, datatype=ua.ObjectIds.ApplicationType)
254 o = self.opc.nodes.objects.add_variable(2,
"xmlenumvalues", 0, varianttype=ua.VariantType.Int32, datatype=ua.ObjectIds.AttributeWriteMask)
258 t = self.opc.create_custom_data_type(2,
'MyCustomUint32', ua.ObjectIds.UInt32)
259 o = self.opc.nodes.objects.add_variable(2,
"xmlcustomunit32", 0, varianttype=ua.VariantType.UInt32, datatype=t.nodeid)
263 dtype = node.get_data_type()
264 dv = node.get_data_value()
265 rank = node.get_value_rank()
266 dim = node.get_array_dimensions()
267 nclass = node.get_node_class()
269 path =
"export-{0}.xml".format(typename)
270 self.opc.export_xml([node], path)
271 self.opc.delete_nodes([node])
272 new_nodes = self.opc.import_xml(path)
273 node2 = self.opc.get_node(new_nodes[0])
278 self.
assertEqual(dv.Value, node2.get_data_value().Value)
280 self.
assertEqual(dim, node2.get_array_dimensions())
def test_xml_localizedtext(self)
def test_xml_custom_uint32(self)
def test_xml_import_additional_ns(self)
def test_xml_method(self)
def _test_xml_var_type(self, node, typename, test_equality=True)
def test_xml_nodeid(self)
def test_xml_string_array(self)
def test_xml_string(self)
def test_xml_ext_obj(self)
def test_xml_import(self)
def func(parent, value, string)
def test_xml_localizedtext_array(self)
def test_xml_enumvalues(self)