diff --git a/opcua/common/copy_node.py b/opcua/common/copy_node.py index 216005797..9b4b6ca61 100644 --- a/opcua/common/copy_node.py +++ b/opcua/common/copy_node.py @@ -15,11 +15,11 @@ def copy_node(parent, node, nodeid=None, recursive=True): if nodeid is None: nodeid = ua.NodeId(namespaceidx=node.nodeid.NamespaceIndex) - added_nodeids = _copy_node(parent.server, parent.nodeid, rdesc, nodeid, recursive) - return [Node(parent.server, nid) for nid in added_nodeids] + added_nodeids = _copy_node(parent.session_server, parent.nodeid, rdesc, nodeid, recursive) + return [Node(parent.session_server, nid) for nid in added_nodeids] -def _copy_node(server, parent_nodeid, rdesc, nodeid, recursive): +def _copy_node(session_server, parent_nodeid, rdesc, nodeid, recursive): addnode = ua.AddNodesItem() addnode.RequestedNewNodeId = nodeid addnode.BrowseName = rdesc.BrowseName @@ -28,19 +28,19 @@ def _copy_node(server, parent_nodeid, rdesc, nodeid, recursive): addnode.TypeDefinition = rdesc.TypeDefinition addnode.NodeClass = rdesc.NodeClass - node_to_copy = Node(server, rdesc.NodeId) + node_to_copy = Node(session_server, rdesc.NodeId) attrObj = getattr(ua, rdesc.NodeClass.name + "Attributes") _read_and_copy_attrs(node_to_copy, attrObj(), addnode) - res = server.add_nodes([addnode])[0] + res = session_server.add_nodes([addnode])[0] added_nodes = [res.AddedNodeId] if recursive: descs = node_to_copy.get_children_descriptions() for desc in descs: - nodes = _copy_node(server, res.AddedNodeId, desc, nodeid=ua.NodeId(namespaceidx=desc.NodeId.NamespaceIndex), recursive=True) + nodes = _copy_node(session_server, res.AddedNodeId, desc, nodeid=ua.NodeId(namespaceidx=desc.NodeId.NamespaceIndex), recursive=True) added_nodes.extend(nodes) return added_nodes diff --git a/opcua/common/instantiate.py b/opcua/common/instantiate.py index 3f514070d..e8ae76754 100644 --- a/opcua/common/instantiate.py +++ b/opcua/common/instantiate.py @@ -30,18 +30,18 @@ def instantiate(parent, node_type, nodeid=None, bname=None, dname=None, idx=0, i bname = ua.QualifiedName.from_string(bname) nodeids = _instantiate_node( - parent.server, - Node(parent.server, rdesc.NodeId), + parent.session_server, + Node(parent.session_server, rdesc.NodeId), parent.nodeid, rdesc, nodeid, bname, dname=dname, instantiate_optional=instantiate_optional) - return [Node(parent.server, nid) for nid in nodeids] + return [Node(parent.session_server, nid) for nid in nodeids] -def _instantiate_node(server, +def _instantiate_node(session_server, node_type, parentid, rdesc, @@ -80,19 +80,19 @@ def _instantiate_node(server, if dname is not None: addnode.NodeAttributes.DisplayName = dname - res = server.add_nodes([addnode])[0] + res = session_server.add_nodes([addnode])[0] added_nodes = [res.AddedNodeId] if recursive: parents = ua_utils.get_node_supertypes(node_type, includeitself=True) - node = Node(server, res.AddedNodeId) + node = Node(session_server, res.AddedNodeId) for parent in parents: descs = parent.get_children_descriptions(includesubtypes=False) for c_rdesc in descs: # skip items that already exists, prefer the 'lowest' one in object hierarchy if not ua_utils.is_child_present(node, c_rdesc.BrowseName): - c_node_type = Node(server, c_rdesc.NodeId) + c_node_type = Node(session_server, c_rdesc.NodeId) refs = c_node_type.get_referenced_nodes(refs=ua.ObjectIds.HasModellingRule) if not refs: # spec says to ignore nodes without modelling rules @@ -107,7 +107,7 @@ def _instantiate_node(server, if res.AddedNodeId.NodeIdType is ua.NodeIdType.String: inst_nodeid = res.AddedNodeId.Identifier + "." + c_rdesc.BrowseName.Name nodeids = _instantiate_node( - server, + session_server, c_node_type, res.AddedNodeId, c_rdesc, @@ -115,7 +115,7 @@ def _instantiate_node(server, bname=c_rdesc.BrowseName) else: nodeids = _instantiate_node( - server, + session_server, c_node_type, res.AddedNodeId, c_rdesc, diff --git a/opcua/common/manage_nodes.py b/opcua/common/manage_nodes.py index 7ca277ab5..525bcfc23 100644 --- a/opcua/common/manage_nodes.py +++ b/opcua/common/manage_nodes.py @@ -38,7 +38,7 @@ def create_folder(parent, nodeid, bname): or namespace index, name """ nodeid, qname = _parse_nodeid_qname(nodeid, bname) - return node.Node(parent.server, _create_object(parent.server, parent.nodeid, nodeid, qname, ua.ObjectIds.FolderType)) + return node.Node(parent.session_server, _create_object(parent.session_server, parent.nodeid, nodeid, qname, ua.ObjectIds.FolderType)) def create_object(parent, nodeid, bname, objecttype=None): @@ -50,12 +50,12 @@ def create_object(parent, nodeid, bname, objecttype=None): """ nodeid, qname = _parse_nodeid_qname(nodeid, bname) if objecttype is not None: - objecttype = node.Node(parent.server, objecttype) + objecttype = node.Node(parent.session_server, objecttype) dname = ua.LocalizedText(bname) nodes = instantiate(parent, objecttype, nodeid, bname=qname, dname=dname)[0] return nodes else: - return node.Node(parent.server, _create_object(parent.server, parent.nodeid, nodeid, qname, ua.ObjectIds.BaseObjectType)) + return node.Node(parent.session_server, _create_object(parent.session_server, parent.nodeid, nodeid, qname, ua.ObjectIds.BaseObjectType)) def create_property(parent, nodeid, bname, val, varianttype=None, datatype=None): @@ -70,7 +70,7 @@ def create_property(parent, nodeid, bname, val, varianttype=None, datatype=None) datatype = ua.NodeId(datatype, 0) if datatype and not isinstance(datatype, ua.NodeId): raise RuntimeError("datatype argument must be a nodeid or an int refering to a nodeid") - return node.Node(parent.server, _create_variable(parent.server, parent.nodeid, nodeid, qname, var, datatype=datatype, isproperty=True)) + return node.Node(parent.session_server, _create_variable(parent.session_server, parent.nodeid, nodeid, qname, var, datatype=datatype, isproperty=True)) def create_variable(parent, nodeid, bname, val, varianttype=None, datatype=None): @@ -86,7 +86,7 @@ def create_variable(parent, nodeid, bname, val, varianttype=None, datatype=None) if datatype and not isinstance(datatype, ua.NodeId): raise RuntimeError("datatype argument must be a nodeid or an int refering to a nodeid") - return node.Node(parent.server, _create_variable(parent.server, parent.nodeid, nodeid, qname, var, datatype=datatype, isproperty=False)) + return node.Node(parent.session_server, _create_variable(parent.session_server, parent.nodeid, nodeid, qname, var, datatype=datatype, isproperty=False)) def create_variable_type(parent, nodeid, bname, datatype): @@ -100,7 +100,7 @@ def create_variable_type(parent, nodeid, bname, datatype): datatype = ua.NodeId(datatype, 0) if datatype and not isinstance(datatype, ua.NodeId): raise RuntimeError("Data type argument must be a nodeid or an int refering to a nodeid, received: {}".format(datatype)) - return node.Node(parent.server, _create_variable_type(parent.server, parent.nodeid, nodeid, qname, datatype)) + return node.Node(parent.session_server, _create_variable_type(parent.session_server, parent.nodeid, nodeid, qname, datatype)) def create_reference_type(parent, nodeid, bname, symmetric=True, inversename=None): @@ -110,7 +110,7 @@ def create_reference_type(parent, nodeid, bname, symmetric=True, inversename=Non or idx and name """ nodeid, qname = _parse_nodeid_qname(nodeid, bname) - return node.Node(parent.server, _create_reference_type(parent.server, parent.nodeid, nodeid, qname, symmetric, inversename)) + return node.Node(parent.session_server, _create_reference_type(parent.session_server, parent.nodeid, nodeid, qname, symmetric, inversename)) def create_object_type(parent, nodeid, bname): @@ -120,7 +120,7 @@ def create_object_type(parent, nodeid, bname): or namespace index, name """ nodeid, qname = _parse_nodeid_qname(nodeid, bname) - return node.Node(parent.server, _create_object_type(parent.server, parent.nodeid, nodeid, qname)) + return node.Node(parent.session_server, _create_object_type(parent.session_server, parent.nodeid, nodeid, qname)) def create_method(parent, *args): @@ -142,7 +142,7 @@ def create_method(parent, *args): outputs = args[4] else: outputs = [] - return node.Node(parent.server, _create_method(parent, nodeid, qname, callback, inputs, outputs)) + return node.Node(parent.session_server, _create_method(parent, nodeid, qname, callback, inputs, outputs)) def _create_object(server, parentnodeid, nodeid, qname, objecttype): @@ -302,9 +302,9 @@ def create_data_type(parent, nodeid, bname, description=None): attrs.UserWriteMask = 0 attrs.IsAbstract = False # True mean they cannot be instanciated addnode.NodeAttributes = attrs - results = parent.server.add_nodes([addnode]) + results = parent.session_server.add_nodes([addnode]) results[0].StatusCode.check() - return node.Node(parent.server, results[0].AddedNodeId) + return node.Node(parent.session_server, results[0].AddedNodeId) def _create_method(parent, nodeid, qname, callback, inputs, outputs): @@ -323,9 +323,9 @@ def _create_method(parent, nodeid, qname, callback, inputs, outputs): attrs.Executable = True attrs.UserExecutable = True addnode.NodeAttributes = attrs - results = parent.server.add_nodes([addnode]) + results = parent.session_server.add_nodes([addnode]) results[0].StatusCode.check() - method = node.Node(parent.server, results[0].AddedNodeId) + method = node.Node(parent.session_server, results[0].AddedNodeId) if inputs: create_property(method, ua.NodeId(namespaceidx=method.nodeid.NamespaceIndex), @@ -340,8 +340,8 @@ def _create_method(parent, nodeid, qname, callback, inputs, outputs): [_vtype_to_argument(vtype) for vtype in outputs], varianttype=ua.VariantType.ExtensionObject, datatype=ua.ObjectIds.Argument) - if hasattr(parent.server, "add_method_callback"): - parent.server.add_method_callback(method.nodeid, callback) + if hasattr(parent.session_server, "add_method_callback"): + parent.session_server.add_method_callback(method.nodeid, callback) return results[0].AddedNodeId diff --git a/opcua/common/methods.py b/opcua/common/methods.py index 9c5f015d1..694c97f5a 100644 --- a/opcua/common/methods.py +++ b/opcua/common/methods.py @@ -37,18 +37,18 @@ def call_method_full(parent, methodid, *args): elif isinstance(methodid, node.Node): methodid = methodid.nodeid - result = _call_method(parent.server, parent.nodeid, methodid, to_variant(*args)) + result = _call_method(parent.session_server, parent.nodeid, methodid, to_variant(*args)) result.OutputArguments = [var.Value for var in result.OutputArguments] return result -def _call_method(server, parentnodeid, methodid, arguments): +def _call_method(session_server, parentnodeid, methodid, arguments): request = ua.CallMethodRequest() request.ObjectId = parentnodeid request.MethodId = methodid request.InputArguments = arguments methodstocall = [request] - results = server.call(methodstocall) + results = session_server.call(methodstocall) res = results[0] res.StatusCode.check() return res diff --git a/opcua/common/node.py b/opcua/common/node.py index a1bee6059..d90281803 100644 --- a/opcua/common/node.py +++ b/opcua/common/node.py @@ -35,8 +35,8 @@ class Node(object): directly UA services methods to optimize your code """ - def __init__(self, server, nodeid): - self.server = server + def __init__(self, session_server, nodeid): + self.session_server = session_server self.nodeid = None if isinstance(nodeid, Node): self.nodeid = nodeid.nodeid @@ -49,6 +49,11 @@ def __init__(self, server, nodeid): else: raise ua.UaError("argument to node must be a NodeId object or a string defining a nodeid found {0} of type {1}".format(nodeid, type(nodeid))) + @property + def server(self): + # to maintain backwards compatibility. + return self.session_server + def __eq__(self, other): if isinstance(other, Node) and self.nodeid == other.nodeid: return True @@ -93,7 +98,7 @@ def get_data_type_as_variant_type(self): may not be convertible to VariantType """ result = self.get_attribute(ua.AttributeIds.DataType) - return opcua.common.ua_utils.data_type_to_variant_type(Node(self.server, result.Value.Value)) + return opcua.common.ua_utils.data_type_to_variant_type(Node(self.session_server, result.Value.Value)) def get_access_level(self): """ @@ -253,7 +258,7 @@ def set_attribute(self, attributeid, datavalue): attr.Value = datavalue params = ua.WriteParameters() params.NodesToWrite = [attr] - result = self.server.write(params) + result = self.session_server.write(params) result[0].check() def get_attribute(self, attr): @@ -266,7 +271,7 @@ def get_attribute(self, attr): rv.AttributeId = attr params = ua.ReadParameters() params.NodesToRead.append(rv) - result = self.server.read(params) + result = self.session_server.read(params) result[0].StatusCode.check() return result[0] @@ -282,7 +287,7 @@ def get_attributes(self, attrs): rv.AttributeId = attr params.NodesToRead.append(rv) - results = self.server.read(params) + results = self.session_server.read(params) return results def get_children(self, refs=ua.ObjectIds.HierarchicalReferences, nodeclassmask=ua.NodeClass.Unspecified): @@ -360,7 +365,7 @@ def get_references(self, refs=ua.ObjectIds.References, direction=ua.BrowseDirect params.View.Timestamp = ua.get_win_epoch() params.NodesToBrowse.append(desc) params.RequestedMaxReferencesPerNode = 0 - results = self.server.browse(params) + results = self.session_server.browse(params) references = self._browse_next(results) return references @@ -371,7 +376,7 @@ def _browse_next(self, results): params = ua.BrowseNextParameters() params.ContinuationPoints = [results[0].ContinuationPoint] params.ReleaseContinuationPoints = False - results = self.server.browse_next(params) + results = self.session_server.browse_next(params) references.extend(results[0].References) return references @@ -384,7 +389,7 @@ def get_referenced_nodes(self, refs=ua.ObjectIds.References, direction=ua.Browse references = self.get_references(refs, direction, nodeclassmask, includesubtypes) nodes = [] for desc in references: - node = Node(self.server, desc.NodeId) + node = Node(self.session_server, desc.NodeId) nodes.append(node) return nodes @@ -407,7 +412,7 @@ def get_path(self, max_length=20, as_string=False): """ path = self._get_path(max_length) - path = [Node(self.server, ref.NodeId) for ref in path] + path = [Node(self.session_server, ref.NodeId) for ref in path] path.append(self) if as_string: path = [el.get_browse_name().to_string() for el in path] @@ -428,7 +433,7 @@ def _get_path(self, max_length=20): refs = node.get_references(refs=ua.ObjectIds.HierarchicalReferences, direction=ua.BrowseDirection.Inverse) if len(refs) > 0: path.insert(0, refs[0]) - node = Node(self.server, refs[0].NodeId) + node = Node(self.session_server, refs[0].NodeId) if len(path) >= (max_length -1): return path else: @@ -443,7 +448,7 @@ def get_parent(self): """ refs = self.get_references(refs=ua.ObjectIds.HierarchicalReferences, direction=ua.BrowseDirection.Inverse) if len(refs) > 0: - return Node(self.server, refs[0].NodeId) + return Node(self.session_server, refs[0].NodeId) else: return None @@ -462,11 +467,11 @@ def get_child(self, path): bpath = ua.BrowsePath() bpath.StartingNode = self.nodeid bpath.RelativePath = rpath - result = self.server.translate_browsepaths_to_nodeids([bpath]) + result = self.session_server.translate_browsepaths_to_nodeids([bpath]) result = result[0] result.StatusCode.check() # FIXME: seems this method may return several nodes - return Node(self.server, result.Targets[0].TargetId) + return Node(self.session_server, result.Targets[0].TargetId) def _make_relative_path(self, path): rpath = ua.RelativePath() @@ -518,7 +523,7 @@ def history_read(self, details): params.TimestampsToReturn = ua.TimestampsToReturn.Both params.ReleaseContinuationPoints = False params.NodesToRead.append(valueid) - result = self.server.history_read(params)[0] + result = self.session_server.history_read(params)[0] return result def read_event_history(self, starttime=None, endtime=None, numvalues=0, evtypes=ua.ObjectIds.BaseEventType): @@ -543,7 +548,7 @@ def read_event_history(self, starttime=None, endtime=None, numvalues=0, evtypes= if not isinstance(evtypes, (list, tuple)): evtypes = [evtypes] - evtypes = [Node(self.server, evtype) for evtype in evtypes] + evtypes = [Node(self.session_server, evtype) for evtype in evtypes] evfilter = events.get_filter_from_event_type(evtypes) details.Filter = evfilter @@ -568,14 +573,14 @@ def history_read_events(self, details): params.TimestampsToReturn = ua.TimestampsToReturn.Both params.ReleaseContinuationPoints = False params.NodesToRead.append(valueid) - result = self.server.history_read(params)[0] + result = self.session_server.history_read(params)[0] return result def delete(self, delete_references=True, recursive=False): """ Delete node from address space """ - results = opcua.common.manage_nodes.delete_nodes(self.server, [self], recursive, delete_references) + results = opcua.common.manage_nodes.delete_nodes(self.session_server, [self], recursive, delete_references) _check_results(results) def _fill_delete_reference_item(self, rdesc, bidirectional = False): @@ -602,7 +607,7 @@ def delete_reference(self, target, reftype, forward=True, bidirectional=True): raise ua.UaStatusCodeError(ua.StatusCodes.BadNotFound) ditem = self._fill_delete_reference_item(rdesc, bidirectional) - self.server.delete_references([ditem])[0].check() + self.session_server.delete_references([ditem])[0].check() def add_reference(self, target, reftype, forward=True, bidirectional=True): """ @@ -625,7 +630,7 @@ def add_reference(self, target, reftype, forward=True, bidirectional=True): aitem2.IsForward = not forward params.append(aitem2) - results = self.server.add_references(params) + results = self.session_server.add_references(params) _check_results(results, len(params)) def set_modelling_rule(self, mandatory): @@ -637,7 +642,7 @@ def set_modelling_rule(self, mandatory): """ # remove all existing modelling rule rules = self.get_references(ua.ObjectIds.HasModellingRule) - self.server.delete_references(list(map(self._fill_delete_reference_item, rules))) + self.session_server.delete_references(list(map(self._fill_delete_reference_item, rules))) # add new modelling rule as requested if mandatory is not None: rule = ua.ObjectIds.ModellingRule_Mandatory if mandatory else ua.ObjectIds.ModellingRule_Optional diff --git a/opcua/common/shortcuts.py b/opcua/common/shortcuts.py index 8027a6f01..69acdebb1 100644 --- a/opcua/common/shortcuts.py +++ b/opcua/common/shortcuts.py @@ -6,23 +6,23 @@ class Shortcuts(object): """ This object contains Node objects to some commonly used nodes """ - def __init__(self, server): - self.root = Node(server, ObjectIds.RootFolder) - self.objects = Node(server, ObjectIds.ObjectsFolder) - self.server = Node(server, ObjectIds.Server) - self.types = Node(server, ObjectIds.TypesFolder) - self.base_object_type = Node(server, ObjectIds.BaseObjectType) - self.base_data_type = Node(server, ObjectIds.BaseDataType) - self.base_event_type = Node(server, ObjectIds.BaseEventType) - self.base_variable_type = Node(server, ObjectIds.BaseVariableType) - self.folder_type = Node(server, ObjectIds.FolderType) - self.enum_data_type = Node(server, ObjectIds.Enumeration) - self.types = Node(server, ObjectIds.TypesFolder) - self.data_types = Node(server, ObjectIds.DataTypesFolder) - self.event_types = Node(server, ObjectIds.EventTypesFolder) - self.reference_types = Node(server, ObjectIds.ReferenceTypesFolder) - self.variable_types = Node(server, ObjectIds.VariableTypesFolder) - self.object_types = Node(server, ObjectIds.ObjectTypesFolder) - self.namespace_array = Node(server, ObjectIds.Server_NamespaceArray) - self.opc_binary = Node(server, ObjectIds.OPCBinarySchema_TypeSystem) - self.base_structure_type = Node(server, ObjectIds.Structure) + def __init__(self, session_server): + self.root = Node(session_server, ObjectIds.RootFolder) + self.objects = Node(session_server, ObjectIds.ObjectsFolder) + self.session_server = Node(session_server, ObjectIds.Server) + self.types = Node(session_server, ObjectIds.TypesFolder) + self.base_object_type = Node(session_server, ObjectIds.BaseObjectType) + self.base_data_type = Node(session_server, ObjectIds.BaseDataType) + self.base_event_type = Node(session_server, ObjectIds.BaseEventType) + self.base_variable_type = Node(session_server, ObjectIds.BaseVariableType) + self.folder_type = Node(session_server, ObjectIds.FolderType) + self.enum_data_type = Node(session_server, ObjectIds.Enumeration) + self.types = Node(session_server, ObjectIds.TypesFolder) + self.data_types = Node(session_server, ObjectIds.DataTypesFolder) + self.event_types = Node(session_server, ObjectIds.EventTypesFolder) + self.reference_types = Node(session_server, ObjectIds.ReferenceTypesFolder) + self.variable_types = Node(session_server, ObjectIds.VariableTypesFolder) + self.object_types = Node(session_server, ObjectIds.ObjectTypesFolder) + self.namespace_array = Node(session_server, ObjectIds.Server_NamespaceArray) + self.opc_binary = Node(session_server, ObjectIds.OPCBinarySchema_TypeSystem) + self.base_structure_type = Node(session_server, ObjectIds.Structure) diff --git a/opcua/common/subscription.py b/opcua/common/subscription.py index 8147ee996..c02dace2c 100644 --- a/opcua/common/subscription.py +++ b/opcua/common/subscription.py @@ -76,27 +76,27 @@ class Subscription(object): code and/or use create_monitored_items method. """ - def __init__(self, server, params, handler): + def __init__(self, session_server, params, handler): self.logger = logging.getLogger(__name__) - self.server = server + self.session_server = session_server self._client_handle = 200 self._handler = handler self.parameters = params # move to data class self._monitoreditems_map = {} self._lock = Lock() self.subscription_id = None - response = self.server.create_subscription(params, self.publish_callback) + response = self.session_server.create_subscription(params, self.publish_callback) self.subscription_id = response.SubscriptionId # move to data class - #Send a publish request so the server has one in its queue + #Send a publish request so the session server has one in its queue # Servers should alsways be able to handle at least on extra publish request per subscriptions - self.server.publish() + self.session_server.publish() def delete(self): """ Delete subscription on server. This is automatically done by Client and Server classes on exit """ - results = self.server.delete_subscriptions([self.subscription_id]) + results = self.session_server.delete_subscriptions([self.subscription_id]) results[0].check() def publish_callback(self, publishresult): @@ -120,7 +120,7 @@ def publish_callback(self, publishresult): ack = ua.SubscriptionAcknowledgement() ack.SubscriptionId = self.subscription_id ack.SequenceNumber = publishresult.NotificationMessage.SequenceNumber - self.server.publish([ack]) + self.session_server.publish([ack]) def _call_datachange(self, datachange): for item in datachange.MonitoredItems: @@ -186,13 +186,13 @@ def subscribe_events(self, sourcenode=ua.ObjectIds.Server, evtypes=ua.ObjectIds. if evtypes is a list or tuple of custom event types, the events will be filtered to the supplied types Return a handle which can be used to unsubscribe """ - sourcenode = Node(self.server, sourcenode) + sourcenode = Node(self.session_server, sourcenode) if evfilter is None: if not type(evtypes) in (list, tuple): evtypes = [evtypes] - evtypes = [Node(self.server, evtype) for evtype in evtypes] + evtypes = [Node(self.session_server, evtype) for evtype in evtypes] evfilter = events.get_filter_from_event_type(evtypes) return self._subscribe(sourcenode, ua.AttributeIds.EventNotifier, evfilter, queuesize=queuesize) @@ -252,12 +252,12 @@ def create_monitored_items(self, monitored_items): for mi in monitored_items: data = SubscriptionItemData() data.client_handle = mi.RequestedParameters.ClientHandle - data.node = Node(self.server, mi.ItemToMonitor.NodeId) + data.node = Node(self.session_server, mi.ItemToMonitor.NodeId) data.attribute = mi.ItemToMonitor.AttributeId #TODO: Either use the filter from request or from response. Here it uses from request, in modify it uses from response data.mfilter = mi.RequestedParameters.Filter self._monitoreditems_map[mi.RequestedParameters.ClientHandle] = data - results = self.server.create_monitored_items(params) + results = self.session_server.create_monitored_items(params) mids = [] # process result, add server_handle, or remove it if failed with self._lock: @@ -280,7 +280,7 @@ def unsubscribe(self, handle): params = ua.DeleteMonitoredItemsParameters() params.SubscriptionId = self.subscription_id params.MonitoredItemIds = [handle] - results = self.server.delete_monitored_items(params) + results = self.session_server.delete_monitored_items(params) results[0].check() with self._lock: for k, v in self._monitoreditems_map.items(): @@ -317,7 +317,7 @@ def modify_monitored_item(self, handle, new_samp_time, new_queuesize=0, mod_filt params = ua.ModifyMonitoredItemsParameters() params.SubscriptionId = self.subscription_id params.ItemsToModify.append(modif_item) - results = self.server.modify_monitored_items(params) + results = self.session_server.modify_monitored_items(params) item_to_change.mfilter = results[0].FilterResult return results diff --git a/opcua/common/type_dictionary_buider.py b/opcua/common/type_dictionary_buider.py index 7305c28c1..ed17f5f65 100644 --- a/opcua/common/type_dictionary_buider.py +++ b/opcua/common/type_dictionary_buider.py @@ -122,7 +122,7 @@ class DataTypeDictionaryBuilder: def __init__(self, server, idx, idx_name, dict_name): self._server = server - self._session_server = server.get_root_node().server + self._session_server = server.get_root_node().session_server self._idx = idx # Risk of bugs using a fixed number without checking self._id_counter = 8000 diff --git a/opcua/server/standard_address_space/standard_address_space.py b/opcua/server/standard_address_space/standard_address_space.py index 4187c1f83..d27adb68f 100644 --- a/opcua/server/standard_address_space/standard_address_space.py +++ b/opcua/server/standard_address_space/standard_address_space.py @@ -13,17 +13,17 @@ 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 + def __init__(self, node_mgt_service): + self.node_mgt_service = node_mgt_service self.postponed_refs = None self.postponed_nodes = None - #self.add_nodes = self.server.add_nodes + #self.add_nodes = self.node_mgt_service.add_nodes def add_nodes(self,nodes): - self.postponed_nodes.extend(self.server.try_add_nodes(nodes, check=False)) + self.postponed_nodes.extend(self.node_mgt_service.try_add_nodes(nodes, check=False)) def add_references(self, refs): - self.postponed_refs.extend(self.server.try_add_references(refs)) + self.postponed_refs.extend(self.node_mgt_service.try_add_references(refs)) # no return def __enter__(self): @@ -33,13 +33,13 @@ def __enter__(self): def __exit__(self, exc_type, exc_val, exc_tb): if exc_type is None and exc_val is None: - remaining_nodes = list(self.server.try_add_nodes(self.postponed_nodes, check=False)) + remaining_nodes = list(self.node_mgt_service.try_add_nodes(self.postponed_nodes, check=False)) assert len(remaining_nodes) == 0, remaining_nodes - remaining_refs = list(self.server.try_add_references(self.postponed_refs)) + remaining_refs = list(self.node_mgt_service.try_add_references(self.postponed_refs)) assert len(remaining_refs) == 0, remaining_refs -def fill_address_space(nodeservice): - with PostponeReferences(nodeservice) as server: +def fill_address_space(node_mgt_service): + with PostponeReferences(node_mgt_service) as server: create_standard_address_space_Part3(server) create_standard_address_space_Part4(server) create_standard_address_space_Part5(server) diff --git a/opcua/tools.py b/opcua/tools.py index 889cd5fe6..b79721743 100644 --- a/opcua/tools.py +++ b/opcua/tools.py @@ -315,7 +315,7 @@ def _lsprint_0(node, depth, indent=""): for desc in node.get_children_descriptions(): print("{0}{1:30} {2:25}".format(indent, desc.DisplayName.to_string(), desc.NodeId.to_string())) if depth: - _lsprint_0(Node(node.server, desc.NodeId), depth - 1, indent + " ") + _lsprint_0(Node(node.session_server, desc.NodeId), depth - 1, indent + " ") def _lsprint_1(node, depth, indent=""): @@ -326,14 +326,14 @@ def _lsprint_1(node, depth, indent=""): for desc in node.get_children_descriptions(): if desc.NodeClass == ua.NodeClass.Variable: try: - val = Node(node.server, desc.NodeId).get_value() + val = Node(node.session_server, desc.NodeId).get_value() except UaStatusCodeError as err: val = "Bad (0x{0:x})".format(err.code) print("{0}{1:30} {2!s:25} {3!s:25}, {4!s:3}".format(indent, desc.DisplayName.to_string(), desc.NodeId.to_string(), desc.BrowseName.to_string(), val)) else: print("{0}{1:30} {2!s:25} {3!s:25}".format(indent, desc.DisplayName.to_string(), desc.NodeId.to_string(), desc.BrowseName.to_string())) if depth: - _lsprint_1(Node(node.server, desc.NodeId), depth - 1, indent + " ") + _lsprint_1(Node(node.session_server, desc.NodeId), depth - 1, indent + " ") def _lsprint_long(pnode, depth, indent=""): diff --git a/tests/tests_unit.py b/tests/tests_unit.py index 23ab90e54..dc31da259 100755 --- a/tests/tests_unit.py +++ b/tests/tests_unit.py @@ -16,7 +16,6 @@ from opcua.server.internal_subscription import WhereClauseEvaluator from opcua.common.event_objects import BaseEvent from opcua.common.ua_utils import string_to_variant, variant_to_string, string_to_val, val_to_string -from opcua.common.xmlimporter import XmlImporter from opcua.ua.uatypes import _MaskEnum from opcua.common.structures import StructGenerator from opcua.common.connection import MessageChunk