def __init__(self): self.BooleanValue = True self.SByteValue = 0 self.ByteValue = 0 self.Int16Value = 0 self.UInt16Value = 0 self.Int32Value = 0 self.UInt32Value = 0 self.Int64Value = 0 self.UInt64Value = 0 self.FloatValue = 0 self.DoubleValue = 0 self.StringValue = '' self.DateTimeValue = datetime.utcnow() self.GuidValue = uuid.uuid4() self.ByteStringValue = b'' self.XmlElementValue = ua.XmlElement() self.NodeIdValue = ua.NodeId() self.ExpandedNodeIdValue = ua.ExpandedNodeId() self.QualifiedNameValue = ua.QualifiedName() self.LocalizedTextValue = ua.LocalizedText() self.StatusCodeValue = ua.StatusCode() self.VariantValue = ua.Variant() self.EnumerationValue = 0 self.StructureValue = ua.ExtensionObject() self.Number = ua.Variant() self.Integer = ua.Variant() self.UInteger = ua.Variant()
def test_string_to_val_xml_element(self): string = "<p> titi toto </p>" obj = ua.XmlElement(string) self.assertEqual(string_to_val(string, ua.VariantType.XmlElement), obj) self.assertEqual(val_to_string(obj), string) b = struct_to_binary(obj) obj2 = struct_from_binary(ua.XmlElement, ua.utils.Buffer(b)) self.assertEqual(obj, obj2)
def string_to_val(string, vtype): """ Convert back a string to a python or python-opcua object Note: no error checking is done here, supplying null strings could raise exceptions (datetime and guid) """ string = string.strip() if string.startswith("["): string = string[1:-1] var = [] for s in string.split(","): s = s.strip() val = string_to_val(s, vtype) var.append(val) return var if vtype == ua.VariantType.Null: val = None elif vtype == ua.VariantType.Boolean: if string in ("True", "true", "on", "On", "1"): val = True else: val = False elif vtype in (ua.VariantType.SByte, ua.VariantType.Int16, ua.VariantType.Int32, ua.VariantType.Int64): val = int(string) elif vtype in (ua.VariantType.Byte, ua.VariantType.UInt16, ua.VariantType.UInt32, ua.VariantType.UInt64): val = int(string) elif vtype in (ua.VariantType.Float, ua.VariantType.Double): val = float(string) elif vtype == ua.VariantType.XmlElement: val = ua.XmlElement(string) elif vtype == ua.VariantType.String: val = string elif vtype == ua.VariantType.ByteString: val = string.encode() elif vtype in (ua.VariantType.NodeId, ua.VariantType.ExpandedNodeId): val = ua.NodeId.from_string(string) elif vtype == ua.VariantType.QualifiedName: val = ua.QualifiedName.from_string(string) elif vtype == ua.VariantType.DateTime: val = parser.parse(string) elif vtype == ua.VariantType.LocalizedText: val = ua.LocalizedText(string) elif vtype == ua.VariantType.StatusCode: val = ua.StatusCode(string) elif vtype == ua.VariantType.Guid: val = uuid.UUID(string) else: # FIXME: Some types are probably missing! raise NotImplementedError return val
def test_custom_structs_array(self): xmlpath = "tests/example.bsd" c = StructGenerator() c.make_model_from_file(xmlpath) c.save_to_file("tests/structures.py") import structures as s # test with default values v = s.ArrayValueDataType() data = struct_to_binary(v) v2 = struct_from_binary(s.ArrayValueDataType, ua.utils.Buffer(data)) # set some values v = s.ArrayValueDataType() v.SbyteValue = [1] v.ByteValue = [2] v.Int16Value = [3] v.UInt16Value = [4] v.Int32Value = [5] v.UInt32Value = [6] v.Int64Value = [7] v.UInt64Value = [8] v.FloatValue = [9.0] v.DoubleValue = [10.0] v.StringValue = ["elleven"] v.DateTimeValue = [datetime.utcnow()] #self.GuidValue = uuid.uudib"14" v.ByteStringValue = [b"fifteen", b"sixteen"] v.XmlElementValue = [ua.XmlElement("<toto>titi</toto>")] v.NodeIdValue = [ ua.NodeId.from_string("ns=4;i=9999"), ua.NodeId.from_string("i=6") ] #self.ExpandedNodeIdValue = #self.QualifiedNameValue = #self.LocalizedTextValue = #self.StatusCodeValue = #self.VariantValue = #self.EnumerationValue = #self.StructureValue = #self.Number = #self.Integer = #self.UInteger = data = struct_to_binary(v) v2 = struct_from_binary(s.ArrayValueDataType, ua.utils.Buffer(data)) self.assertEqual(v.NodeIdValue, v2.NodeIdValue) print(v2.NodeIdValue)
def test_custom_structs(self): xmlpath = "tests/example.bsd" c = StructGenerator() c.make_model_from_file(xmlpath) c.save_to_file("structures.py") import structures as s # test with default values v = s.ScalarValueDataType() data = v.to_binary() v2 = s.ScalarValueDataType.from_binary(ua.utils.Buffer(data)) # set some values v = s.ScalarValueDataType() v.SbyteValue = 1 v.ByteValue = 2 v.Int16Value = 3 v.UInt16Value = 4 v.Int32Value = 5 v.UInt32Value = 6 v.Int64Value = 7 v.UInt64Value = 8 v.FloatValue = 9.0 v.DoubleValue = 10.0 v.StringValue = "elleven" v.DateTimeValue = datetime.utcnow() #self.GuidValue = uuid.uudib"14" v.ByteStringValue = b"fifteen" v.XmlElementValue = ua.XmlElement("<toto>titi</toto>") v.NodeIdValue = ua.NodeId.from_string("ns=4;i=9999") #self.ExpandedNodeIdValue = #self.QualifiedNameValue = #self.LocalizedTextValue = #self.StatusCodeValue = #self.VariantValue = #self.EnumerationValue = #self.StructureValue = #self.Number = #self.Integer = #self.UInteger = data = v.to_binary() v2 = s.ScalarValueDataType.from_binary(ua.utils.Buffer(data)) self.assertEqual(v.NodeIdValue, v2.NodeIdValue)
def __init__(self): self.BooleanDataType = True self.SByteDataType = 0 self.ByteDataType = 0 self.Int16DataType = 0 self.UInt16DataType = 0 self.Int32DataType = 0 self.UInt32DataType = 0 self.Int64DataType = 0 self.UInt64DataType = 0 self.FloatDataType = 0 self.DoubleDataType = 0 self.StringDataType = '' self.DateTimeDataType = datetime.utcnow() self.GuidDataType = uuid.uuid4() self.ByteStringDataType = b'' self.XmlElementDataType = ua.XmlElement() self.NodeIdDataType = ua.NodeId() self.ExpandedNodeIdDataType = ua.ExpandedNodeId() self.QualifiedNameDataType = ua.QualifiedName() self.LocalizedTextDataType = ua.LocalizedText() self.StatusCodeDataType = ua.StatusCode() self.VariantDataType = ua.Variant()