def test_unknown_extension_object(self): obj = ua.ExtensionObject() obj.Body = b'example of data in custom format' obj.TypeId = ua.NodeId.from_string('ns=3;i=42') data = ua.utils.Buffer(extensionobject_to_binary(obj)) obj2 = ua.extensionobject_from_binary(data) self.assertEqual(type(obj2), ua.ExtensionObject) self.assertEqual(obj2.TypeId, obj.TypeId) self.assertEqual(obj2.Body, b'example of data in custom format')
def test_extension_object(self): obj = ua.UserNameIdentityToken() obj.UserName = "******" obj.Password = b"pass" obj2 = ua.extensionobject_from_binary(ua.utils.Buffer(extensionobject_to_binary(obj))) self.assertEqual(type(obj), type(obj2)) self.assertEqual(obj.UserName, obj2.UserName) self.assertEqual(obj.Password, obj2.Password) v1 = ua.Variant(obj) v2 = ua.Variant.from_binary(ua.utils.Buffer(v1.to_binary())) self.assertEqual(type(v1), type(v2)) self.assertEqual(v1.VariantType, v2.VariantType)
def unpack_uatype(vtype, data): if hasattr(Primitives, vtype.name): st = getattr(Primitives, vtype.name) return st.unpack(data) elif vtype.value > 25: return Primitives.Bytes.unpack(data) elif vtype.name == "ExtensionObject": # dependency loop: classes in uaprotocol_auto use Variant defined in this file, # but Variant can contain any object from uaprotocol_auto as ExtensionObject. # Using local import to avoid import loop from opcua.ua import extensionobject_from_binary return extensionobject_from_binary(data) else: from opcua.ua import uatypes if hasattr(uatypes, vtype.name): klass = getattr(uatypes, vtype.name) return klass.from_binary(data) else: raise UaError("can not unpack unknown vtype {0!s}".format(vtype))