async def create_data_type(parent, nodeid, bname, description=None): """ Create a new data type to be used in new variables, etc .. arguments are nodeid, browsename or namespace index, name """ nodeid, qname = _parse_nodeid_qname(nodeid, bname) addnode = ua.AddNodesItem() addnode.RequestedNewNodeId = nodeid addnode.BrowseName = qname addnode.NodeClass = ua.NodeClass.DataType addnode.ParentNodeId = parent.nodeid addnode.ReferenceTypeId = ua.NodeId(ua.ObjectIds.HasSubtype) # addnode.TypeDefinition = ua.NodeId(ua.ObjectIds.BaseDataVariableType) # No type definition for types attrs = ua.DataTypeAttributes() if description is None: attrs.Description = ua.LocalizedText(qname.Name) else: attrs.Description = ua.LocalizedText(description) attrs.DisplayName = ua.LocalizedText(qname.Name) attrs.WriteMask = 0 attrs.UserWriteMask = 0 attrs.IsAbstract = False # True mean they cannot be instanciated addnode.NodeAttributes = attrs results = await parent.server.add_nodes([addnode]) results[0].StatusCode.check() return make_node(parent.server, results[0].AddedNodeId)
async def add_datatype(self, obj, no_namespace_migration=False): node = self._get_add_node_item(obj, no_namespace_migration) attrs = ua.DataTypeAttributes() if obj.desc: attrs.Description = ua.LocalizedText(obj.desc) attrs.DisplayName = ua.LocalizedText(obj.displayname) if obj.abstract: attrs.IsAbstract = obj.abstract if not obj.definitions: pass else: if obj.parent == self.server.nodes.enum_data_type.nodeid: attrs.DataTypeDefinition = self._get_edef(obj) elif obj.parent == self.server.nodes.base_structure_type.nodeid: attrs.DataTypeDefinition = self._get_sdef(obj) else: parent_node = self.server.get_node(obj.parent) path = await parent_node.get_path() if self.server.nodes.base_structure_type in path: attrs.DataTypeDefinition = self._get_sdef(obj) else: _logger.warning( "%s has datatypedefinition and path %s" " but we could not find out if this is a struct", obj, path, ) node.NodeAttributes = attrs res = await self._get_server().add_nodes([node]) res[0].StatusCode.check() await self._add_refs(obj) return res[0].AddedNodeId
def test_bin_datattributes(): dta = ua.DataTypeAttributes() dta.DisplayName = ua.LocalizedText("titi") data = struct_to_binary(dta) dta2 = struct_from_binary(ua.DataTypeAttributes, ua.utils.Buffer(data)) assert dta.DisplayName == dta2.DisplayName
def test_bin_data_type_def(): ad = ua.AddNodesItem() ad.ParentNodeId = ua.NodeId(22) dta = ua.DataTypeAttributes() dta.DisplayName = ua.LocalizedText("titi") ad.NodeAttributes = dta data = struct_to_binary(ad) ad2 = struct_from_binary(ua.AddNodesItem, ua.utils.Buffer(data)) assert ad.ParentNodeId == ad2.ParentNodeId assert ad.NodeAttributes.DisplayName == ad2.NodeAttributes.DisplayName
async def add_datatype(self, obj): node = self._get_node(obj) attrs = ua.DataTypeAttributes() if obj.desc: attrs.Description = ua.LocalizedText(obj.desc) attrs.DisplayName = ua.LocalizedText(obj.displayname) if obj.abstract: attrs.IsAbstract = obj.abstract node.NodeAttributes = attrs res = await self._add_node(node) await self._add_refs(obj) res[0].StatusCode.check() return res[0].AddedNodeId
def create_standard_address_space_Part17(server): node = ua.AddNodesItem() node.RequestedNewNodeId = NumericNodeId(23455, 0) node.BrowseName = QualifiedName('AliasNameType', 0) node.NodeClass = NodeClass.ObjectType node.ParentNodeId = NumericNodeId(58, 0) node.ReferenceTypeId = NumericNodeId(45, 0) attrs = ua.ObjectTypeAttributes() attrs.DisplayName = LocalizedText("AliasNameType") attrs.IsAbstract = False node.NodeAttributes = attrs server.add_nodes([node]) refs = [] ref = ua.AddReferencesItem() ref.IsForward = False ref.ReferenceTypeId = NumericNodeId(45, 0) ref.SourceNodeId = NumericNodeId(23455, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(58, 0) refs.append(ref) server.add_references(refs) node = ua.AddNodesItem() node.RequestedNewNodeId = NumericNodeId(23456, 0) node.BrowseName = QualifiedName('AliasNameCategoryType', 0) node.NodeClass = NodeClass.ObjectType node.ParentNodeId = NumericNodeId(61, 0) node.ReferenceTypeId = NumericNodeId(45, 0) attrs = ua.ObjectTypeAttributes() attrs.DisplayName = LocalizedText("AliasNameCategoryType") attrs.IsAbstract = False node.NodeAttributes = attrs server.add_nodes([node]) refs = [] ref = ua.AddReferencesItem() ref.IsForward = True ref.ReferenceTypeId = NumericNodeId(47, 0) ref.SourceNodeId = NumericNodeId(23456, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(23457, 0) refs.append(ref) ref = ua.AddReferencesItem() ref.IsForward = True ref.ReferenceTypeId = NumericNodeId(47, 0) ref.SourceNodeId = NumericNodeId(23456, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(23458, 0) refs.append(ref) ref = ua.AddReferencesItem() ref.IsForward = True ref.ReferenceTypeId = NumericNodeId(47, 0) ref.SourceNodeId = NumericNodeId(23456, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(23462, 0) refs.append(ref) ref = ua.AddReferencesItem() ref.IsForward = False ref.ReferenceTypeId = NumericNodeId(45, 0) ref.SourceNodeId = NumericNodeId(23456, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(61, 0) refs.append(ref) server.add_references(refs) node = ua.AddNodesItem() node.RequestedNewNodeId = NumericNodeId(23457, 0) node.BrowseName = QualifiedName('<Alias>', 0) node.NodeClass = NodeClass.Object node.ParentNodeId = NumericNodeId(23456, 0) node.ReferenceTypeId = NumericNodeId(47, 0) node.TypeDefinition = NumericNodeId(23455, 0) attrs = ua.ObjectAttributes() attrs.DisplayName = LocalizedText("<Alias>") attrs.EventNotifier = 0 node.NodeAttributes = attrs server.add_nodes([node]) refs = [] ref = ua.AddReferencesItem() ref.IsForward = True ref.ReferenceTypeId = NumericNodeId(40, 0) ref.SourceNodeId = NumericNodeId(23457, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(23455, 0) refs.append(ref) ref = ua.AddReferencesItem() ref.IsForward = True ref.ReferenceTypeId = NumericNodeId(37, 0) ref.SourceNodeId = NumericNodeId(23457, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(11508, 0) refs.append(ref) ref = ua.AddReferencesItem() ref.IsForward = False ref.ReferenceTypeId = NumericNodeId(47, 0) ref.SourceNodeId = NumericNodeId(23457, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(23456, 0) refs.append(ref) server.add_references(refs) node = ua.AddNodesItem() node.RequestedNewNodeId = NumericNodeId(23458, 0) node.BrowseName = QualifiedName('<SubAliasNameCategories>', 0) node.NodeClass = NodeClass.Object node.ParentNodeId = NumericNodeId(23456, 0) node.ReferenceTypeId = NumericNodeId(47, 0) node.TypeDefinition = NumericNodeId(23456, 0) attrs = ua.ObjectAttributes() attrs.DisplayName = LocalizedText("<SubAliasNameCategories>") attrs.EventNotifier = 0 node.NodeAttributes = attrs server.add_nodes([node]) refs = [] ref = ua.AddReferencesItem() ref.IsForward = True ref.ReferenceTypeId = NumericNodeId(47, 0) ref.SourceNodeId = NumericNodeId(23458, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(23459, 0) refs.append(ref) ref = ua.AddReferencesItem() ref.IsForward = True ref.ReferenceTypeId = NumericNodeId(40, 0) ref.SourceNodeId = NumericNodeId(23458, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(23456, 0) refs.append(ref) ref = ua.AddReferencesItem() ref.IsForward = True ref.ReferenceTypeId = NumericNodeId(37, 0) ref.SourceNodeId = NumericNodeId(23458, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(11508, 0) refs.append(ref) ref = ua.AddReferencesItem() ref.IsForward = False ref.ReferenceTypeId = NumericNodeId(47, 0) ref.SourceNodeId = NumericNodeId(23458, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(23456, 0) refs.append(ref) server.add_references(refs) node = ua.AddNodesItem() node.RequestedNewNodeId = NumericNodeId(23459, 0) node.BrowseName = QualifiedName('FindAlias', 0) node.NodeClass = NodeClass.Method node.ParentNodeId = NumericNodeId(23458, 0) node.ReferenceTypeId = NumericNodeId(47, 0) attrs = ua.MethodAttributes() attrs.DisplayName = LocalizedText("FindAlias") node.NodeAttributes = attrs server.add_nodes([node]) refs = [] ref = ua.AddReferencesItem() ref.IsForward = True ref.ReferenceTypeId = NumericNodeId(46, 0) ref.SourceNodeId = NumericNodeId(23459, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(23460, 0) refs.append(ref) ref = ua.AddReferencesItem() ref.IsForward = True ref.ReferenceTypeId = NumericNodeId(46, 0) ref.SourceNodeId = NumericNodeId(23459, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(23461, 0) refs.append(ref) ref = ua.AddReferencesItem() ref.IsForward = True ref.ReferenceTypeId = NumericNodeId(37, 0) ref.SourceNodeId = NumericNodeId(23459, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(78, 0) refs.append(ref) ref = ua.AddReferencesItem() ref.IsForward = False ref.ReferenceTypeId = NumericNodeId(47, 0) ref.SourceNodeId = NumericNodeId(23459, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(23458, 0) refs.append(ref) server.add_references(refs) node = ua.AddNodesItem() node.RequestedNewNodeId = NumericNodeId(23460, 0) node.BrowseName = QualifiedName('InputArguments', 0) node.NodeClass = NodeClass.Variable node.ParentNodeId = NumericNodeId(23459, 0) node.ReferenceTypeId = NumericNodeId(46, 0) node.TypeDefinition = NumericNodeId(68, 0) attrs = ua.VariableAttributes() attrs.DisplayName = LocalizedText("InputArguments") attrs.DataType = NumericNodeId(296, 0) value = [] extobj = ua.Argument() extobj.Name = 'AliasNameSearchPattern' extobj.DataType = NumericNodeId(12, 0) extobj.ValueRank = -1 value.append(extobj) extobj = ua.Argument() extobj.Name = 'ReferenceTypeFilter' extobj.DataType = NumericNodeId(17, 0) extobj.ValueRank = -1 value.append(extobj) attrs.Value = ua.Variant(value, ua.VariantType.ExtensionObject) attrs.ValueRank = 1 attrs.ArrayDimensions = [0] node.NodeAttributes = attrs server.add_nodes([node]) refs = [] ref = ua.AddReferencesItem() ref.IsForward = True ref.ReferenceTypeId = NumericNodeId(40, 0) ref.SourceNodeId = NumericNodeId(23460, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(68, 0) refs.append(ref) ref = ua.AddReferencesItem() ref.IsForward = True ref.ReferenceTypeId = NumericNodeId(37, 0) ref.SourceNodeId = NumericNodeId(23460, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(78, 0) refs.append(ref) ref = ua.AddReferencesItem() ref.IsForward = False ref.ReferenceTypeId = NumericNodeId(46, 0) ref.SourceNodeId = NumericNodeId(23460, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(23459, 0) refs.append(ref) server.add_references(refs) node = ua.AddNodesItem() node.RequestedNewNodeId = NumericNodeId(23461, 0) node.BrowseName = QualifiedName('OutputArguments', 0) node.NodeClass = NodeClass.Variable node.ParentNodeId = NumericNodeId(23459, 0) node.ReferenceTypeId = NumericNodeId(46, 0) node.TypeDefinition = NumericNodeId(68, 0) attrs = ua.VariableAttributes() attrs.DisplayName = LocalizedText("OutputArguments") attrs.DataType = NumericNodeId(296, 0) value = [] extobj = ua.Argument() extobj.Name = 'AliasNodeList' extobj.DataType = NumericNodeId(23468, 0) extobj.ValueRank = 1 extobj.ArrayDimensions = 0 value.append(extobj) attrs.Value = ua.Variant(value, ua.VariantType.ExtensionObject) attrs.ValueRank = 1 attrs.ArrayDimensions = [0] node.NodeAttributes = attrs server.add_nodes([node]) refs = [] ref = ua.AddReferencesItem() ref.IsForward = True ref.ReferenceTypeId = NumericNodeId(40, 0) ref.SourceNodeId = NumericNodeId(23461, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(68, 0) refs.append(ref) ref = ua.AddReferencesItem() ref.IsForward = True ref.ReferenceTypeId = NumericNodeId(37, 0) ref.SourceNodeId = NumericNodeId(23461, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(78, 0) refs.append(ref) ref = ua.AddReferencesItem() ref.IsForward = False ref.ReferenceTypeId = NumericNodeId(46, 0) ref.SourceNodeId = NumericNodeId(23461, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(23459, 0) refs.append(ref) server.add_references(refs) node = ua.AddNodesItem() node.RequestedNewNodeId = NumericNodeId(23462, 0) node.BrowseName = QualifiedName('FindAlias', 0) node.NodeClass = NodeClass.Method node.ParentNodeId = NumericNodeId(23456, 0) node.ReferenceTypeId = NumericNodeId(47, 0) attrs = ua.MethodAttributes() attrs.DisplayName = LocalizedText("FindAlias") node.NodeAttributes = attrs server.add_nodes([node]) refs = [] ref = ua.AddReferencesItem() ref.IsForward = True ref.ReferenceTypeId = NumericNodeId(46, 0) ref.SourceNodeId = NumericNodeId(23462, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(23463, 0) refs.append(ref) ref = ua.AddReferencesItem() ref.IsForward = True ref.ReferenceTypeId = NumericNodeId(46, 0) ref.SourceNodeId = NumericNodeId(23462, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(23464, 0) refs.append(ref) ref = ua.AddReferencesItem() ref.IsForward = True ref.ReferenceTypeId = NumericNodeId(37, 0) ref.SourceNodeId = NumericNodeId(23462, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(78, 0) refs.append(ref) ref = ua.AddReferencesItem() ref.IsForward = False ref.ReferenceTypeId = NumericNodeId(47, 0) ref.SourceNodeId = NumericNodeId(23462, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(23456, 0) refs.append(ref) server.add_references(refs) node = ua.AddNodesItem() node.RequestedNewNodeId = NumericNodeId(23463, 0) node.BrowseName = QualifiedName('InputArguments', 0) node.NodeClass = NodeClass.Variable node.ParentNodeId = NumericNodeId(23462, 0) node.ReferenceTypeId = NumericNodeId(46, 0) node.TypeDefinition = NumericNodeId(68, 0) attrs = ua.VariableAttributes() attrs.DisplayName = LocalizedText("InputArguments") attrs.DataType = NumericNodeId(296, 0) value = [] extobj = ua.Argument() extobj.Name = 'AliasNameSearchPattern' extobj.DataType = NumericNodeId(12, 0) extobj.ValueRank = -1 value.append(extobj) extobj = ua.Argument() extobj.Name = 'ReferenceTypeFilter' extobj.DataType = NumericNodeId(17, 0) extobj.ValueRank = -1 value.append(extobj) attrs.Value = ua.Variant(value, ua.VariantType.ExtensionObject) attrs.ValueRank = 1 attrs.ArrayDimensions = [0] node.NodeAttributes = attrs server.add_nodes([node]) refs = [] ref = ua.AddReferencesItem() ref.IsForward = True ref.ReferenceTypeId = NumericNodeId(40, 0) ref.SourceNodeId = NumericNodeId(23463, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(68, 0) refs.append(ref) ref = ua.AddReferencesItem() ref.IsForward = True ref.ReferenceTypeId = NumericNodeId(37, 0) ref.SourceNodeId = NumericNodeId(23463, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(78, 0) refs.append(ref) ref = ua.AddReferencesItem() ref.IsForward = False ref.ReferenceTypeId = NumericNodeId(46, 0) ref.SourceNodeId = NumericNodeId(23463, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(23462, 0) refs.append(ref) server.add_references(refs) node = ua.AddNodesItem() node.RequestedNewNodeId = NumericNodeId(23464, 0) node.BrowseName = QualifiedName('OutputArguments', 0) node.NodeClass = NodeClass.Variable node.ParentNodeId = NumericNodeId(23462, 0) node.ReferenceTypeId = NumericNodeId(46, 0) node.TypeDefinition = NumericNodeId(68, 0) attrs = ua.VariableAttributes() attrs.DisplayName = LocalizedText("OutputArguments") attrs.DataType = NumericNodeId(296, 0) value = [] extobj = ua.Argument() extobj.Name = 'AliasNodeList' extobj.DataType = NumericNodeId(23468, 0) extobj.ValueRank = 1 extobj.ArrayDimensions = 0 value.append(extobj) attrs.Value = ua.Variant(value, ua.VariantType.ExtensionObject) attrs.ValueRank = 1 attrs.ArrayDimensions = [0] node.NodeAttributes = attrs server.add_nodes([node]) refs = [] ref = ua.AddReferencesItem() ref.IsForward = True ref.ReferenceTypeId = NumericNodeId(40, 0) ref.SourceNodeId = NumericNodeId(23464, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(68, 0) refs.append(ref) ref = ua.AddReferencesItem() ref.IsForward = True ref.ReferenceTypeId = NumericNodeId(37, 0) ref.SourceNodeId = NumericNodeId(23464, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(78, 0) refs.append(ref) ref = ua.AddReferencesItem() ref.IsForward = False ref.ReferenceTypeId = NumericNodeId(46, 0) ref.SourceNodeId = NumericNodeId(23464, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(23462, 0) refs.append(ref) server.add_references(refs) node = ua.AddNodesItem() node.RequestedNewNodeId = NumericNodeId(23468, 0) node.BrowseName = QualifiedName('AliasNameDataType', 0) node.NodeClass = NodeClass.DataType node.ParentNodeId = NumericNodeId(22, 0) node.ReferenceTypeId = NumericNodeId(45, 0) attrs = ua.DataTypeAttributes() attrs.DisplayName = LocalizedText("AliasNameDataType") node.NodeAttributes = attrs server.add_nodes([node]) refs = [] ref = ua.AddReferencesItem() ref.IsForward = False ref.ReferenceTypeId = NumericNodeId(45, 0) ref.SourceNodeId = NumericNodeId(23468, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(22, 0) refs.append(ref) server.add_references(refs) node = ua.AddNodesItem() node.RequestedNewNodeId = NumericNodeId(23469, 0) node.BrowseName = QualifiedName('AliasFor', 0) node.NodeClass = NodeClass.ReferenceType node.ParentNodeId = NumericNodeId(32, 0) node.ReferenceTypeId = NumericNodeId(45, 0) attrs = ua.ReferenceTypeAttributes() attrs.DisplayName = LocalizedText("AliasFor") attrs.InverseName = LocalizedText("HasAlias") node.NodeAttributes = attrs server.add_nodes([node]) refs = [] ref = ua.AddReferencesItem() ref.IsForward = False ref.ReferenceTypeId = NumericNodeId(45, 0) ref.SourceNodeId = NumericNodeId(23469, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(32, 0) refs.append(ref) server.add_references(refs) node = ua.AddNodesItem() node.RequestedNewNodeId = NumericNodeId(23470, 0) node.BrowseName = QualifiedName('Aliases', 0) node.NodeClass = NodeClass.Object node.ParentNodeId = NumericNodeId(85, 0) node.ReferenceTypeId = NumericNodeId(35, 0) node.TypeDefinition = NumericNodeId(23456, 0) attrs = ua.ObjectAttributes() attrs.DisplayName = LocalizedText("Aliases") attrs.EventNotifier = 0 node.NodeAttributes = attrs server.add_nodes([node]) refs = [] ref = ua.AddReferencesItem() ref.IsForward = True ref.ReferenceTypeId = NumericNodeId(47, 0) ref.SourceNodeId = NumericNodeId(23470, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(23476, 0) refs.append(ref) ref = ua.AddReferencesItem() ref.IsForward = False ref.ReferenceTypeId = NumericNodeId(35, 0) ref.SourceNodeId = NumericNodeId(23470, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(85, 0) refs.append(ref) ref = ua.AddReferencesItem() ref.IsForward = True ref.ReferenceTypeId = NumericNodeId(40, 0) ref.SourceNodeId = NumericNodeId(23470, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(23456, 0) refs.append(ref) server.add_references(refs) node = ua.AddNodesItem() node.RequestedNewNodeId = NumericNodeId(23476, 0) node.BrowseName = QualifiedName('FindAlias', 0) node.NodeClass = NodeClass.Method node.ParentNodeId = NumericNodeId(23470, 0) node.ReferenceTypeId = NumericNodeId(47, 0) attrs = ua.MethodAttributes() attrs.DisplayName = LocalizedText("FindAlias") node.NodeAttributes = attrs server.add_nodes([node]) refs = [] ref = ua.AddReferencesItem() ref.IsForward = True ref.ReferenceTypeId = NumericNodeId(46, 0) ref.SourceNodeId = NumericNodeId(23476, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(23477, 0) refs.append(ref) ref = ua.AddReferencesItem() ref.IsForward = True ref.ReferenceTypeId = NumericNodeId(46, 0) ref.SourceNodeId = NumericNodeId(23476, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(23478, 0) refs.append(ref) ref = ua.AddReferencesItem() ref.IsForward = False ref.ReferenceTypeId = NumericNodeId(47, 0) ref.SourceNodeId = NumericNodeId(23476, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(23470, 0) refs.append(ref) server.add_references(refs) node = ua.AddNodesItem() node.RequestedNewNodeId = NumericNodeId(23477, 0) node.BrowseName = QualifiedName('InputArguments', 0) node.NodeClass = NodeClass.Variable node.ParentNodeId = NumericNodeId(23476, 0) node.ReferenceTypeId = NumericNodeId(46, 0) node.TypeDefinition = NumericNodeId(68, 0) attrs = ua.VariableAttributes() attrs.DisplayName = LocalizedText("InputArguments") attrs.DataType = NumericNodeId(296, 0) value = [] extobj = ua.Argument() extobj.Name = 'AliasNameSearchPattern' extobj.DataType = NumericNodeId(12, 0) extobj.ValueRank = -1 value.append(extobj) extobj = ua.Argument() extobj.Name = 'ReferenceTypeFilter' extobj.DataType = NumericNodeId(17, 0) extobj.ValueRank = -1 value.append(extobj) attrs.Value = ua.Variant(value, ua.VariantType.ExtensionObject) attrs.ValueRank = 1 attrs.ArrayDimensions = [0] node.NodeAttributes = attrs server.add_nodes([node]) refs = [] ref = ua.AddReferencesItem() ref.IsForward = True ref.ReferenceTypeId = NumericNodeId(40, 0) ref.SourceNodeId = NumericNodeId(23477, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(68, 0) refs.append(ref) ref = ua.AddReferencesItem() ref.IsForward = False ref.ReferenceTypeId = NumericNodeId(46, 0) ref.SourceNodeId = NumericNodeId(23477, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(23476, 0) refs.append(ref) server.add_references(refs) node = ua.AddNodesItem() node.RequestedNewNodeId = NumericNodeId(23478, 0) node.BrowseName = QualifiedName('OutputArguments', 0) node.NodeClass = NodeClass.Variable node.ParentNodeId = NumericNodeId(23476, 0) node.ReferenceTypeId = NumericNodeId(46, 0) node.TypeDefinition = NumericNodeId(68, 0) attrs = ua.VariableAttributes() attrs.DisplayName = LocalizedText("OutputArguments") attrs.DataType = NumericNodeId(296, 0) value = [] extobj = ua.Argument() extobj.Name = 'AliasNodeList' extobj.DataType = NumericNodeId(23468, 0) extobj.ValueRank = 1 extobj.ArrayDimensions = 0 value.append(extobj) attrs.Value = ua.Variant(value, ua.VariantType.ExtensionObject) attrs.ValueRank = 1 attrs.ArrayDimensions = [0] node.NodeAttributes = attrs server.add_nodes([node]) refs = [] ref = ua.AddReferencesItem() ref.IsForward = True ref.ReferenceTypeId = NumericNodeId(40, 0) ref.SourceNodeId = NumericNodeId(23478, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(68, 0) refs.append(ref) ref = ua.AddReferencesItem() ref.IsForward = False ref.ReferenceTypeId = NumericNodeId(46, 0) ref.SourceNodeId = NumericNodeId(23478, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(23476, 0) refs.append(ref) server.add_references(refs) node = ua.AddNodesItem() node.RequestedNewNodeId = NumericNodeId(23479, 0) node.BrowseName = QualifiedName('Tags', 0) node.NodeClass = NodeClass.Object node.ParentNodeId = NumericNodeId(23470, 0) node.ReferenceTypeId = NumericNodeId(35, 0) node.TypeDefinition = NumericNodeId(23456, 0) attrs = ua.ObjectAttributes() attrs.DisplayName = LocalizedText("Tags") attrs.EventNotifier = 0 node.NodeAttributes = attrs server.add_nodes([node]) refs = [] ref = ua.AddReferencesItem() ref.IsForward = True ref.ReferenceTypeId = NumericNodeId(47, 0) ref.SourceNodeId = NumericNodeId(23479, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(23485, 0) refs.append(ref) ref = ua.AddReferencesItem() ref.IsForward = False ref.ReferenceTypeId = NumericNodeId(35, 0) ref.SourceNodeId = NumericNodeId(23479, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(23470, 0) refs.append(ref) ref = ua.AddReferencesItem() ref.IsForward = True ref.ReferenceTypeId = NumericNodeId(40, 0) ref.SourceNodeId = NumericNodeId(23479, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(23456, 0) refs.append(ref) server.add_references(refs) node = ua.AddNodesItem() node.RequestedNewNodeId = NumericNodeId(23485, 0) node.BrowseName = QualifiedName('FindAlias', 0) node.NodeClass = NodeClass.Method node.ParentNodeId = NumericNodeId(23479, 0) node.ReferenceTypeId = NumericNodeId(47, 0) attrs = ua.MethodAttributes() attrs.DisplayName = LocalizedText("FindAlias") node.NodeAttributes = attrs server.add_nodes([node]) refs = [] ref = ua.AddReferencesItem() ref.IsForward = True ref.ReferenceTypeId = NumericNodeId(46, 0) ref.SourceNodeId = NumericNodeId(23485, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(23486, 0) refs.append(ref) ref = ua.AddReferencesItem() ref.IsForward = True ref.ReferenceTypeId = NumericNodeId(46, 0) ref.SourceNodeId = NumericNodeId(23485, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(23487, 0) refs.append(ref) ref = ua.AddReferencesItem() ref.IsForward = False ref.ReferenceTypeId = NumericNodeId(47, 0) ref.SourceNodeId = NumericNodeId(23485, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(23479, 0) refs.append(ref) server.add_references(refs) node = ua.AddNodesItem() node.RequestedNewNodeId = NumericNodeId(23486, 0) node.BrowseName = QualifiedName('InputArguments', 0) node.NodeClass = NodeClass.Variable node.ParentNodeId = NumericNodeId(23485, 0) node.ReferenceTypeId = NumericNodeId(46, 0) node.TypeDefinition = NumericNodeId(68, 0) attrs = ua.VariableAttributes() attrs.DisplayName = LocalizedText("InputArguments") attrs.DataType = NumericNodeId(296, 0) value = [] extobj = ua.Argument() extobj.Name = 'AliasNameSearchPattern' extobj.DataType = NumericNodeId(12, 0) extobj.ValueRank = -1 value.append(extobj) extobj = ua.Argument() extobj.Name = 'ReferenceTypeFilter' extobj.DataType = NumericNodeId(17, 0) extobj.ValueRank = -1 value.append(extobj) attrs.Value = ua.Variant(value, ua.VariantType.ExtensionObject) attrs.ValueRank = 1 attrs.ArrayDimensions = [0] node.NodeAttributes = attrs server.add_nodes([node]) refs = [] ref = ua.AddReferencesItem() ref.IsForward = True ref.ReferenceTypeId = NumericNodeId(40, 0) ref.SourceNodeId = NumericNodeId(23486, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(68, 0) refs.append(ref) ref = ua.AddReferencesItem() ref.IsForward = False ref.ReferenceTypeId = NumericNodeId(46, 0) ref.SourceNodeId = NumericNodeId(23486, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(23485, 0) refs.append(ref) server.add_references(refs) node = ua.AddNodesItem() node.RequestedNewNodeId = NumericNodeId(23487, 0) node.BrowseName = QualifiedName('OutputArguments', 0) node.NodeClass = NodeClass.Variable node.ParentNodeId = NumericNodeId(23485, 0) node.ReferenceTypeId = NumericNodeId(46, 0) node.TypeDefinition = NumericNodeId(68, 0) attrs = ua.VariableAttributes() attrs.DisplayName = LocalizedText("OutputArguments") attrs.DataType = NumericNodeId(296, 0) value = [] extobj = ua.Argument() extobj.Name = 'AliasNodeList' extobj.DataType = NumericNodeId(23468, 0) extobj.ValueRank = 1 extobj.ArrayDimensions = 0 value.append(extobj) attrs.Value = ua.Variant(value, ua.VariantType.ExtensionObject) attrs.ValueRank = 1 attrs.ArrayDimensions = [0] node.NodeAttributes = attrs server.add_nodes([node]) refs = [] ref = ua.AddReferencesItem() ref.IsForward = True ref.ReferenceTypeId = NumericNodeId(40, 0) ref.SourceNodeId = NumericNodeId(23487, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(68, 0) refs.append(ref) ref = ua.AddReferencesItem() ref.IsForward = False ref.ReferenceTypeId = NumericNodeId(46, 0) ref.SourceNodeId = NumericNodeId(23487, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(23485, 0) refs.append(ref) server.add_references(refs) node = ua.AddNodesItem() node.RequestedNewNodeId = NumericNodeId(23488, 0) node.BrowseName = QualifiedName('Topics', 0) node.NodeClass = NodeClass.Object node.ParentNodeId = NumericNodeId(23470, 0) node.ReferenceTypeId = NumericNodeId(35, 0) node.TypeDefinition = NumericNodeId(23456, 0) attrs = ua.ObjectAttributes() attrs.DisplayName = LocalizedText("Topics") attrs.EventNotifier = 0 node.NodeAttributes = attrs server.add_nodes([node]) refs = [] ref = ua.AddReferencesItem() ref.IsForward = True ref.ReferenceTypeId = NumericNodeId(47, 0) ref.SourceNodeId = NumericNodeId(23488, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(23494, 0) refs.append(ref) ref = ua.AddReferencesItem() ref.IsForward = False ref.ReferenceTypeId = NumericNodeId(35, 0) ref.SourceNodeId = NumericNodeId(23488, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(23470, 0) refs.append(ref) ref = ua.AddReferencesItem() ref.IsForward = True ref.ReferenceTypeId = NumericNodeId(40, 0) ref.SourceNodeId = NumericNodeId(23488, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(23456, 0) refs.append(ref) server.add_references(refs) node = ua.AddNodesItem() node.RequestedNewNodeId = NumericNodeId(23494, 0) node.BrowseName = QualifiedName('FindAlias', 0) node.NodeClass = NodeClass.Method node.ParentNodeId = NumericNodeId(23488, 0) node.ReferenceTypeId = NumericNodeId(47, 0) attrs = ua.MethodAttributes() attrs.DisplayName = LocalizedText("FindAlias") node.NodeAttributes = attrs server.add_nodes([node]) refs = [] ref = ua.AddReferencesItem() ref.IsForward = True ref.ReferenceTypeId = NumericNodeId(46, 0) ref.SourceNodeId = NumericNodeId(23494, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(23495, 0) refs.append(ref) ref = ua.AddReferencesItem() ref.IsForward = True ref.ReferenceTypeId = NumericNodeId(46, 0) ref.SourceNodeId = NumericNodeId(23494, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(23496, 0) refs.append(ref) ref = ua.AddReferencesItem() ref.IsForward = False ref.ReferenceTypeId = NumericNodeId(47, 0) ref.SourceNodeId = NumericNodeId(23494, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(23488, 0) refs.append(ref) server.add_references(refs) node = ua.AddNodesItem() node.RequestedNewNodeId = NumericNodeId(23495, 0) node.BrowseName = QualifiedName('InputArguments', 0) node.NodeClass = NodeClass.Variable node.ParentNodeId = NumericNodeId(23494, 0) node.ReferenceTypeId = NumericNodeId(46, 0) node.TypeDefinition = NumericNodeId(68, 0) attrs = ua.VariableAttributes() attrs.DisplayName = LocalizedText("InputArguments") attrs.DataType = NumericNodeId(296, 0) value = [] extobj = ua.Argument() extobj.Name = 'AliasNameSearchPattern' extobj.DataType = NumericNodeId(12, 0) extobj.ValueRank = -1 value.append(extobj) extobj = ua.Argument() extobj.Name = 'ReferenceTypeFilter' extobj.DataType = NumericNodeId(17, 0) extobj.ValueRank = -1 value.append(extobj) attrs.Value = ua.Variant(value, ua.VariantType.ExtensionObject) attrs.ValueRank = 1 attrs.ArrayDimensions = [0] node.NodeAttributes = attrs server.add_nodes([node]) refs = [] ref = ua.AddReferencesItem() ref.IsForward = True ref.ReferenceTypeId = NumericNodeId(40, 0) ref.SourceNodeId = NumericNodeId(23495, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(68, 0) refs.append(ref) ref = ua.AddReferencesItem() ref.IsForward = False ref.ReferenceTypeId = NumericNodeId(46, 0) ref.SourceNodeId = NumericNodeId(23495, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(23494, 0) refs.append(ref) server.add_references(refs) node = ua.AddNodesItem() node.RequestedNewNodeId = NumericNodeId(23496, 0) node.BrowseName = QualifiedName('OutputArguments', 0) node.NodeClass = NodeClass.Variable node.ParentNodeId = NumericNodeId(23494, 0) node.ReferenceTypeId = NumericNodeId(46, 0) node.TypeDefinition = NumericNodeId(68, 0) attrs = ua.VariableAttributes() attrs.DisplayName = LocalizedText("OutputArguments") attrs.DataType = NumericNodeId(296, 0) value = [] extobj = ua.Argument() extobj.Name = 'AliasNodeList' extobj.DataType = NumericNodeId(23468, 0) extobj.ValueRank = 1 extobj.ArrayDimensions = 0 value.append(extobj) attrs.Value = ua.Variant(value, ua.VariantType.ExtensionObject) attrs.ValueRank = 1 attrs.ArrayDimensions = [0] node.NodeAttributes = attrs server.add_nodes([node]) refs = [] ref = ua.AddReferencesItem() ref.IsForward = True ref.ReferenceTypeId = NumericNodeId(40, 0) ref.SourceNodeId = NumericNodeId(23496, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(68, 0) refs.append(ref) ref = ua.AddReferencesItem() ref.IsForward = False ref.ReferenceTypeId = NumericNodeId(46, 0) ref.SourceNodeId = NumericNodeId(23496, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(23494, 0) refs.append(ref) server.add_references(refs) node = ua.AddNodesItem() node.RequestedNewNodeId = NumericNodeId(23499, 0) node.BrowseName = QualifiedName('Default Binary', 0) node.NodeClass = NodeClass.Object node.ParentNodeId = NumericNodeId(23468, 0) node.ReferenceTypeId = NumericNodeId(38, 0) node.TypeDefinition = NumericNodeId(76, 0) attrs = ua.ObjectAttributes() attrs.DisplayName = LocalizedText("Default Binary") attrs.EventNotifier = 0 node.NodeAttributes = attrs server.add_nodes([node]) refs = [] ref = ua.AddReferencesItem() ref.IsForward = False ref.ReferenceTypeId = NumericNodeId(38, 0) ref.SourceNodeId = NumericNodeId(23499, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(23468, 0) refs.append(ref) ref = ua.AddReferencesItem() ref.IsForward = True ref.ReferenceTypeId = NumericNodeId(39, 0) ref.SourceNodeId = NumericNodeId(23499, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(23502, 0) refs.append(ref) ref = ua.AddReferencesItem() ref.IsForward = True ref.ReferenceTypeId = NumericNodeId(40, 0) ref.SourceNodeId = NumericNodeId(23499, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(76, 0) refs.append(ref) server.add_references(refs) node = ua.AddNodesItem() node.RequestedNewNodeId = NumericNodeId(23505, 0) node.BrowseName = QualifiedName('Default XML', 0) node.NodeClass = NodeClass.Object node.ParentNodeId = NumericNodeId(23468, 0) node.ReferenceTypeId = NumericNodeId(38, 0) node.TypeDefinition = NumericNodeId(76, 0) attrs = ua.ObjectAttributes() attrs.DisplayName = LocalizedText("Default XML") attrs.EventNotifier = 0 node.NodeAttributes = attrs server.add_nodes([node]) refs = [] ref = ua.AddReferencesItem() ref.IsForward = False ref.ReferenceTypeId = NumericNodeId(38, 0) ref.SourceNodeId = NumericNodeId(23505, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(23468, 0) refs.append(ref) ref = ua.AddReferencesItem() ref.IsForward = True ref.ReferenceTypeId = NumericNodeId(39, 0) ref.SourceNodeId = NumericNodeId(23505, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(23508, 0) refs.append(ref) ref = ua.AddReferencesItem() ref.IsForward = True ref.ReferenceTypeId = NumericNodeId(40, 0) ref.SourceNodeId = NumericNodeId(23505, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(76, 0) refs.append(ref) server.add_references(refs) node = ua.AddNodesItem() node.RequestedNewNodeId = NumericNodeId(23511, 0) node.BrowseName = QualifiedName('Default JSON', 0) node.NodeClass = NodeClass.Object node.ParentNodeId = NumericNodeId(23468, 0) node.ReferenceTypeId = NumericNodeId(38, 0) node.TypeDefinition = NumericNodeId(76, 0) attrs = ua.ObjectAttributes() attrs.DisplayName = LocalizedText("Default JSON") attrs.EventNotifier = 0 node.NodeAttributes = attrs server.add_nodes([node]) refs = [] ref = ua.AddReferencesItem() ref.IsForward = False ref.ReferenceTypeId = NumericNodeId(38, 0) ref.SourceNodeId = NumericNodeId(23511, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(23468, 0) refs.append(ref) ref = ua.AddReferencesItem() ref.IsForward = True ref.ReferenceTypeId = NumericNodeId(40, 0) ref.SourceNodeId = NumericNodeId(23511, 0) ref.TargetNodeClass = NodeClass.DataType ref.TargetNodeId = NumericNodeId(76, 0) refs.append(ref) server.add_references(refs)
async def _create_data_type(self, type_name, nodeid=None, init=True): #name = _to_camel_case(type_name) name = type_name if nodeid is None: # create data type node dt_node = ua.AddNodesItem() dt_node.RequestedNewNodeId = ua.NodeId(0, self._idx) dt_node.BrowseName = ua.QualifiedName(name, self._idx) dt_node.NodeClass = ua.NodeClass.DataType dt_node.ParentNodeId = ua.NodeId(ua.ObjectIds.Structure, 0) dt_node.ReferenceTypeId = ua.NodeId(ua.ObjectIds.HasSubtype, 0) dt_attributes = ua.DataTypeAttributes() dt_attributes.DisplayName = ua.LocalizedText(type_name) dt_node.NodeAttributes = dt_attributes res = await self._session_server.add_nodes([dt_node]) data_type_node_id = res[0].AddedNodeId else: data_type_node_id = nodeid added = [data_type_node_id] if init: # create description node desc_node = ua.AddNodesItem() desc_node.RequestedNewNodeId = ua.NodeId(0, self._idx) desc_node.BrowseName = ua.QualifiedName(name, self._idx) desc_node.NodeClass = ua.NodeClass.Variable desc_node.ParentNodeId = self.dict_id desc_node.ReferenceTypeId = ua.NodeId(ua.ObjectIds.HasComponent, 0) desc_node.TypeDefinition = ua.NodeId( ua.ObjectIds.DataTypeDescriptionType, 0) desc_attributes = ua.VariableAttributes() desc_attributes.DisplayName = ua.LocalizedText(type_name) desc_attributes.DataType = ua.NodeId(ua.ObjectIds.String) desc_attributes.Value = ua.Variant(name, ua.VariantType.String) desc_attributes.ValueRank = -1 desc_node.NodeAttributes = desc_attributes res = await self._session_server.add_nodes([desc_node]) description_node_id = res[0].AddedNodeId added.append(description_node_id) # create object node which the loaded python class should link to obj_node = ua.AddNodesItem() obj_node.RequestedNewNodeId = ua.NodeId(0, self._idx) obj_node.BrowseName = ua.QualifiedName('Default Binary', 0) obj_node.NodeClass = ua.NodeClass.Object obj_node.ParentNodeId = data_type_node_id obj_node.ReferenceTypeId = ua.NodeId(ua.ObjectIds.HasEncoding, 0) obj_node.TypeDefinition = ua.NodeId( ua.ObjectIds.DataTypeEncodingType, 0) obj_attributes = ua.ObjectAttributes() obj_attributes.DisplayName = ua.LocalizedText('Default Binary') obj_attributes.EventNotifier = 0 obj_node.NodeAttributes = obj_attributes res = await self._session_server.add_nodes([obj_node]) bind_obj_node_id = res[0].AddedNodeId added.append(bind_obj_node_id) await self._link_nodes(bind_obj_node_id, data_type_node_id, description_node_id) self._type_dictionary.append_struct(type_name) return StructNode(self, data_type_node_id, type_name, added)
async def _instantiate_node(server, node_type, parentid, rdesc, nodeid, bname, dname=None, recursive=True, instantiate_optional=True): """ instantiate a node type under parent """ addnode = ua.AddNodesItem() addnode.RequestedNewNodeId = nodeid addnode.BrowseName = bname addnode.ParentNodeId = parentid addnode.ReferenceTypeId = rdesc.ReferenceTypeId addnode.TypeDefinition = rdesc.TypeDefinition if rdesc.NodeClass in (ua.NodeClass.Object, ua.NodeClass.ObjectType): addnode.NodeClass = ua.NodeClass.Object await _read_and_copy_attrs(node_type, ua.ObjectAttributes(), addnode) elif rdesc.NodeClass in (ua.NodeClass.Variable, ua.NodeClass.VariableType): addnode.NodeClass = ua.NodeClass.Variable await _read_and_copy_attrs(node_type, ua.VariableAttributes(), addnode) elif rdesc.NodeClass in (ua.NodeClass.Method, ): addnode.NodeClass = ua.NodeClass.Method await _read_and_copy_attrs(node_type, ua.MethodAttributes(), addnode) elif rdesc.NodeClass in (ua.NodeClass.DataType, ): addnode.NodeClass = ua.NodeClass.DataType await _read_and_copy_attrs(node_type, ua.DataTypeAttributes(), addnode) else: logger.error("Instantiate: Node class not supported: %s", rdesc.NodeClass) raise RuntimeError("Instantiate: Node class not supported") if dname is not None: addnode.NodeAttributes.DisplayName = dname res = (await server.add_nodes([addnode]))[0] added_nodes = [res.AddedNodeId] if recursive: parents = await get_node_supertypes(node_type, includeitself=True) node = make_node(server, res.AddedNodeId) for parent in parents: descs = await 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 await is_child_present(node, c_rdesc.BrowseName): c_node_type = make_node(server, c_rdesc.NodeId) refs = await c_node_type.get_referenced_nodes( refs=ua.ObjectIds.HasModellingRule) if not refs: # spec says to ignore nodes without modelling rules logger.info( "Instantiate: Skip node without modelling rule %s as part of %s", c_rdesc.BrowseName, addnode.BrowseName) continue # exclude nodes with optional ModellingRule if requested if refs[0].nodeid in ( ua.NodeId(ua.ObjectIds.ModellingRule_Optional), ua.NodeId( ua.ObjectIds.ModellingRule_OptionalPlaceholder) ): # instatiate optionals if not instantiate_optional: logger.info( "Instantiate: Skip optional node %s as part of %s", c_rdesc.BrowseName, addnode.BrowseName) continue # if root node being instantiated has a String NodeId, create the children with a String NodeId if res.AddedNodeId.NodeIdType is ua.NodeIdType.String: inst_nodeid = res.AddedNodeId.Identifier + "." + c_rdesc.BrowseName.Name nodeids = await _instantiate_node( server, c_node_type, res.AddedNodeId, c_rdesc, nodeid=ua.NodeId( Identifier=inst_nodeid, NamespaceIndex=res.AddedNodeId.NamespaceIndex), bname=c_rdesc.BrowseName, instantiate_optional=instantiate_optional) else: nodeids = await _instantiate_node( server, c_node_type, res.AddedNodeId, c_rdesc, nodeid=ua.NodeId( NamespaceIndex=res.AddedNodeId.NamespaceIndex), bname=c_rdesc.BrowseName, instantiate_optional=instantiate_optional) added_nodes.extend(nodeids) return added_nodes