Example #1
0
 def _get_sdef(self, obj):
     if not obj.definitions:
         return None
     sdef = ua.StructureDefinition()
     if obj.parent:
         sdef.BaseDataType = obj.parent
     for refdata in obj.refs:
         if refdata.reftype == self.server.nodes.HasEncoding.nodeid:
             # supposing that default encoding is the first one...
             sdef.DefaultEncodingId = refdata.target
             break
     optional = False
     for field in obj.definitions:
         f = ua.StructureField()
         f.Name = field.name
         f.DataType = field.datatype
         f.ValueRank = field.valuerank
         f.IsOptional = field.optional
         if f.IsOptional:
             optional = True
         if field.arraydim is None:
             f.ArrayDimensions = field.arraydim
         else:
             f.ArrayDimensions = [int(i) for i in field.arraydim.split(",")]
         f.Description = ua.LocalizedText(Text=field.desc)
         sdef.Fields.append(f)
     if obj.struct_type == "IsUnion":
         sdef.StructureType = ua.StructureType.Union
     elif optional or obj.struct_type == "IsOptional":
         sdef.StructureType = ua.StructureType.StructureWithOptionalFields
     else:
         sdef.StructureType = ua.StructureType.Structure
     return sdef
Example #2
0
async def new_struct(
    server: Union["Server", "Client"],
    idx: Union[int, ua.NodeId],
    name: Union[int, ua.QualifiedName],
    fields: List[ua.StructureField],
) -> Tuple[Node, List[Node]]:
    """
    simple way to create a new structure
    return the created data type node and the list of encoding nodes
    """
    dtype = await create_data_type(server.nodes.base_structure_type, idx, name)

    if isinstance(idx, ua.NodeId):
        # user has provided a node id, we cannot reuse it
        idx = idx.NamespaceIndex
    enc = await create_encoding(dtype, idx, "Default Binary")
    # TODO: add other encoding the day we support them

    sdef = ua.StructureDefinition()
    sdef.StructureType = ua.StructureType.Structure
    for sfield in fields:
        if sfield.IsOptional:
            sdef.StructureType = ua.StructureType.StructureWithOptionalFields
            break
    sdef.Fields = fields
    sdef.BaseDataType = server.nodes.base_data_type.nodeid
    sdef.DefaultEncodingId = enc.nodeid

    await dtype.write_data_type_definition(sdef)
    return dtype, [enc]
Example #3
0
 def _get_sdef(self, node, obj):
     if not obj.definitions:
         return None
     sdef = ua.StructureDefinition()
     if obj.parent:
         sdef.BaseDataType = obj.parent
     for data in obj.refs:
         if data.reftype == self.server.nodes.HasEncoding.nodeid:
             # looks likebinary encodingisthe firt one...can someone confirm?
             sdef.DefaultEncodingId = data.target
             break
     optional = False
     for field in obj.definitions:
         f = ua.StructureField()
         f.Name = field.name
         f.DataType = field.datatype
         f.ValueRank = field.valuerank
         f.IsOptional = field.optional
         if f.IsOptional:
             optional = True
         f.ArrayDimensions = field.arraydim
         f.Description = ua.LocalizedText(text=field.desc)
         sdef.Fields.append(f)
     if optional:
         sdef.StructureType = ua.StructureType.StructureWithOptionalFields
     else:
         sdef.StructureType = ua.StructureType.Structure
     return sdef
async def new_struct(server, idx, name, fields):
    """
    simple way to create a new structure
    """
    dtype = await create_data_type(server.nodes.base_structure_type, idx, name)
    enc = await create_encoding(dtype, idx, "Default Binary")
    # TODO: add other encoding the day we support them

    sdef = ua.StructureDefinition()
    sdef.StructureType = ua.StructureType.Structure
    for field in fields:
        if field.IsOptional:
            sdef.StructureType = ua.StructureType.StructureWithOptionalFields
            break
    sdef.Fields = fields
    sdef.BaseDatatype = server.nodes.base_data_type.nodeid
    sdef.DefaultEncodingId = enc.nodeid

    await dtype.write_data_type_definition(sdef)
    return dtype