Skip to content

Commit 1d9387e

Browse files
mathias-luedtkeoroulet
authored andcommittedNov 9, 2017
implement postponing for XmlImporter
1 parent cdef01f commit 1d9387e

File tree

2 files changed

+14
-4
lines changed

2 files changed

+14
-4
lines changed
 

‎opcua/common/xmlimporter.py

+14-3
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ def __init__(self, server):
2424
self.server = server
2525
self.namespaces = {}
2626
self.aliases = {}
27+
self.refs = None
2728

2829
def _map_namespaces(self, namespaces_uris):
2930
"""
@@ -38,7 +39,7 @@ def _map_namespaces(self, namespaces_uris):
3839

3940
def _map_aliases(self, aliases):
4041
"""
41-
maps the import aliases to the correct namespaces
42+
maps the import aliases to the correct namespaces
4243
"""
4344
aliases_mapped = {}
4445
for alias, node_id in aliases.items():
@@ -54,6 +55,7 @@ def import_xml(self, xmlpath):
5455

5556
self.namespaces = self._map_namespaces(self.parser.get_used_namespaces())
5657
self.aliases = self._map_aliases(self.parser.get_aliases())
58+
self.refs = []
5759

5860
dnodes = self.parser.get_node_datas()
5961
dnodes = self.make_objects(dnodes)
@@ -67,6 +69,11 @@ def import_xml(self, xmlpath):
6769
self.logger.warning("failure adding node %s", nodedata)
6870
raise
6971
nodes.append(node)
72+
73+
self.refs, remaining_refs = [], self.refs
74+
self._add_references(remaining_refs)
75+
assert len(self.refs) == 0, self.refs
76+
7077
return nodes
7178

7279
def _add_node_data(self, nodedata):
@@ -96,9 +103,13 @@ def _add_node(self, node):
96103

97104
def _add_references(self, refs):
98105
if isinstance(self.server, opcua.server.server.Server):
99-
return self.server.iserver.isession.add_references(refs)
106+
res = self.server.iserver.isession.add_references(refs)
100107
else:
101-
return self.server.uaclient.add_references(refs)
108+
res = self.server.uaclient.add_references(refs)
109+
110+
for sc, ref in zip(res, refs):
111+
if not sc.is_good():
112+
self.refs.append(ref)
102113

103114
def make_objects(self, node_datas):
104115
new_nodes = []

‎tests/custom_nodes.xml

-1
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,6 @@
112112
<UADataType NodeId="ns=1;i=3011" BrowseName="1:MyEnumVal">
113113
<DisplayName>MyEnumVal</DisplayName>
114114
<References>
115-
<Reference ReferenceType="HasProperty">ns=1;i=6002</Reference>
116115
<Reference ReferenceType="HasSubtype" IsForward="false">i=29</Reference>
117116
</References>
118117
<Definition Name="1:MyEnumVal">

0 commit comments

Comments
 (0)
Please sign in to comment.