1
0
mirror of https://github.com/FreeOpcUa/opcua-asyncio synced 2025-10-29 17:07:18 +08:00

implemented PostponeReferences helper

This commit is contained in:
Mathias Lüdtke 2017-11-06 21:11:27 +01:00 committed by oroulet
parent 21c561ad4d
commit cdef01f1bf
2 changed files with 33 additions and 8 deletions

View File

@ -320,6 +320,11 @@ class NodeManagementService(object):
result.append(self._add_reference(ref, user))
return result
def try_add_references(self, refs, user=User.Admin):
for ref in refs:
if not self._add_reference(ref, user).is_good():
yield ref
def _add_reference(self, addref, user):
if addref.SourceNodeId not in self._aspace:
return ua.StatusCode(ua.StatusCodes.BadSourceNodeIdInvalid)

View File

@ -12,13 +12,33 @@ from opcua.server.standard_address_space.standard_address_space_part10 import cr
from opcua.server.standard_address_space.standard_address_space_part11 import create_standard_address_space_Part11
from opcua.server.standard_address_space.standard_address_space_part13 import create_standard_address_space_Part13
class PostponeReferences(object):
def __init__(self, server):
self.server = server
self.postponed = None
self.add_nodes = self.server.add_nodes
def add_references(self, refs):
self.postponed.extend(self.server.try_add_references(refs))
# no return
def __enter__(self):
self.postponed = []
return self
def __exit__(self, exc_type, exc_val, exc_tb):
if exc_type is None and exc_val is None:
remaining = list(self.server.try_add_references(self.postponed))
assert len(remaining) == 0, remaining
def fill_address_space(nodeservice):
create_standard_address_space_Part3(nodeservice)
create_standard_address_space_Part4(nodeservice)
create_standard_address_space_Part5(nodeservice)
create_standard_address_space_Part8(nodeservice)
create_standard_address_space_Part9(nodeservice)
create_standard_address_space_Part10(nodeservice)
create_standard_address_space_Part11(nodeservice)
create_standard_address_space_Part13(nodeservice)
with PostponeReferences(nodeservice) as server:
create_standard_address_space_Part3(server)
create_standard_address_space_Part4(server)
create_standard_address_space_Part5(server)
create_standard_address_space_Part8(server)
create_standard_address_space_Part9(server)
create_standard_address_space_Part10(server)
create_standard_address_space_Part11(server)
create_standard_address_space_Part13(server)
assert len(server.postponed) == 1370, len(server.postponed)