mirror of
https://github.com/FreeOpcUa/opcua-asyncio
synced 2025-10-22 16:55:48 +08:00
implemented PostponeReferences helper
This commit is contained in:
parent
21c561ad4d
commit
cdef01f1bf
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user