def _show_timestamps(self, item, dv): #while item.hasChildren(): #self.model.removeRow(0, item.index()) string = val_to_string(dv.ServerTimestamp) item.appendRow([QStandardItem("Server Timestamp"), QStandardItem(string), QStandardItem(ua.VariantType.DateTime.name)]) string = val_to_string(dv.SourceTimestamp) item.appendRow([QStandardItem("Source Timestamp"), QStandardItem(string), QStandardItem(ua.VariantType.DateTime.name)])
def _show_attrs(self, node): try: attrs = self.uaclient.get_all_attrs(node) except Exception as ex: self.window.show_error(ex) raise self.model.setHorizontalHeaderLabels(['Attribute', 'Value', 'DataType']) for name, dv in attrs: if name == "DataType": if isinstance(dv.Value.Value.Identifier, int) and dv.Value.Value.Identifier < 63: string = ua.DataType_to_VariantType(dv.Value.Value).name elif dv.Value.Value.Identifier in ua.ObjectIdNames: string = ua.ObjectIdNames[dv.Value.Value.Identifier] else: string = dv.Value.Value.to_string() elif name in ("AccessLevel", "UserAccessLevel"): string = ",".join([e.name for e in ua.int_to_AccessLevel(dv.Value.Value)]) elif name in ("WriteMask", "UserWriteMask"): string = ",".join([e.name for e in ua.int_to_WriteMask(dv.Value.Value)]) elif name in ("EventNotifier"): string = ",".join([e.name for e in ua.int_to_EventNotifier(dv.Value.Value)]) else: string = variant_to_string(dv.Value) name_item = QStandardItem(name) vitem = QStandardItem(string) vitem.setData(dv.Value) self.model.appendRow([name_item, vitem, QStandardItem(dv.Value.VariantType.name)]) if name == "Value": string = val_to_string(dv.ServerTimestamp) name_item.appendRow([QStandardItem("Server Timestamp"), QStandardItem(string), QStandardItem(ua.VariantType.DateTime.name)]) string = val_to_string(dv.SourceTimestamp) name_item.appendRow([QStandardItem("Source Timestamp"), QStandardItem(string), QStandardItem(ua.VariantType.DateTime.name)])
def _show_timestamps(self, item, dv): while item.hasChildren(): self.model.removeRow(0, item.index()) string = val_to_string(dv.ServerTimestamp) item.appendRow([QStandardItem("Server Timestamp"), QStandardItem(string), QStandardItem(ua.VariantType.DateTime.name)]) string = val_to_string(dv.SourceTimestamp) item.appendRow([QStandardItem("Source Timestamp"), QStandardItem(string), QStandardItem(ua.VariantType.DateTime.name)])
def _show_attrs(self): attrs = self.get_all_attrs() self.model.setHorizontalHeaderLabels(['Attribute', 'Value', 'DataType']) for attr, dv in attrs: if attr == ua.AttributeIds.DataType: string = data_type_to_string(dv) elif attr in (ua.AttributeIds.AccessLevel, ua.AttributeIds.UserAccessLevel, ua.AttributeIds.WriteMask, ua.AttributeIds.UserWriteMask, ua.AttributeIds.EventNotifier): attr_name = attr.name if attr_name.startswith("User"): attr_name = attr_name[4:] attr_enum = getattr(ua, attr_name) string = ", ".join([e.name for e in attr_enum.parse_bitfield(dv.Value.Value)]) else: string = variant_to_string(dv.Value) name_item = QStandardItem(attr.name) vitem = QStandardItem(string) vitem.setData((attr, dv), Qt.UserRole) self.model.appendRow([name_item, vitem, QStandardItem(dv.Value.VariantType.name)]) # special case for Value, we want to show timestamps if attr == ua.AttributeIds.Value: string = val_to_string(dv.ServerTimestamp) name_item.appendRow([QStandardItem("Server Timestamp"), QStandardItem(string), QStandardItem(ua.VariantType.DateTime.name)]) string = val_to_string(dv.SourceTimestamp) name_item.appendRow([QStandardItem("Source Timestamp"), QStandardItem(string), QStandardItem(ua.VariantType.DateTime.name)])
def test_string_to_variant_localized_text(self): string = "_This is my string" # string = "_This is my nøåæ"FIXME: does not work with python2 ?!?! obj = ua.LocalizedText(string) self.assertEqual(string_to_val(string, ua.VariantType.LocalizedText), obj) self.assertEqual(val_to_string(obj), string)
def test_string_to_variant_datetime_string(self): s_arr_datetime = "[2014-05-6, 2016-10-3]" arr_string = ['2014-05-6', '2016-10-3'] arr_datetime = [datetime(2014, 5, 6), datetime(2016, 10, 3)] s_datetime = "2014-05-3" self.assertEqual(val_to_string(arr_string), s_arr_datetime) self.assertEqual(string_to_val(s_arr_datetime, ua.VariantType.String), arr_string) self.assertEqual(string_to_val(s_arr_datetime, ua.VariantType.DateTime), arr_datetime)
def edit_attr_finished(self, item): if not self._check_edit(item): return try: var = item.data() val = item.text() var = string_to_variant(val, var.VariantType) self.current_node.set_value(var) except Exception as ex: self.window.show_error(ex) raise finally: dv = self.current_node.get_data_value() item.setText(variant_to_string(dv.Value)) name_item = self.model.item(item.row(), 0) name_item.child(0, 1).setText(val_to_string(dv.ServerTimestamp)) name_item.child(1, 1).setText(val_to_string(dv.SourceTimestamp))
def test_string_to_variant_int(self): s_arr_uint = "[1, 2, 3, 4]" arr_uint = [1, 2, 3, 4] s_uint = "1" self.assertEqual(string_to_val(s_arr_uint, ua.VariantType.UInt32), arr_uint) self.assertEqual(string_to_val(s_arr_uint, ua.VariantType.UInt16), arr_uint) self.assertEqual(val_to_string(arr_uint), s_arr_uint)
def test_string_to_variant_datetime_string(self): s_arr_datetime = "[2014-05-6, 2016-10-3]" arr_string = ['2014-05-6', '2016-10-3'] arr_datetime = [datetime(2014, 5, 6), datetime(2016, 10, 3)] s_datetime = "2014-05-3" self.assertEqual(val_to_string(arr_string), s_arr_datetime) self.assertEqual(string_to_val(s_arr_datetime, ua.VariantType.String), arr_string) self.assertEqual(string_to_val(s_arr_datetime, ua.VariantType.DateTime), arr_datetime )
def test_string_to_variant_int(self): s_arr_uint = "[1, 2, 3, 4]" arr_uint = [1, 2, 3, 4] s_uint = "1" self.assertEqual(string_to_val(s_arr_uint, ua.VariantType.UInt32), arr_uint) self.assertEqual(string_to_val(s_arr_uint, ua.VariantType.UInt16), arr_uint) self.assertEqual(val_to_string(arr_uint), s_arr_uint)
def _show_list(self, parent, mylist, vtype): for idx, val in enumerate(mylist): name_item = QStandardItem(str(idx)) vitem = QStandardItem() vitem.setText(val_to_string(val)) vitem.setData(ListData(mylist, idx, val, vtype), Qt.UserRole) row = [name_item, vitem, QStandardItem(vtype.name)] parent.appendRow(row) if vtype == ua.VariantType.ExtensionObject: self._show_ext_obj(name_item, val)
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 show_attr(attr, dv): if attr == ua.AttributeIds.DataType: string = data_type_to_string(dv.Value.Value) elif attr in (ua.AttributeIds.AccessLevel, ua.AttributeIds.UserAccessLevel, ua.AttributeIds.WriteMask, ua.AttributeIds.UserWriteMask, ua.AttributeIds.EventNotifier): string = enum_to_string(attr, dv.Value.Value) else: string = val_to_string(dv.Value.Value) print(attr.name, ':', string)
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 = obj.to_binary() obj2 = obj.from_binary(ua.utils.Buffer(b)) self.assertEqual(obj, obj2)
def _show_list(self, parent, mylist, vtype): for idx, val in enumerate(mylist): name_item = QStandardItem(str(idx)) vitem = QStandardItem() vitem.setText(val_to_string(val)) vitem.setData(ListData(mylist, idx, val, vtype), Qt.UserRole) row = [name_item, vitem, QStandardItem(vtype.name)] parent.appendRow(row) if vtype == ua.VariantType.ExtensionObject: self._show_ext_obj(name_item, val)
def _call(self): parent = self.node.get_parent() args = [] for inp in self.inputs: val = string_to_variant(inp.text(), data_type_to_variant_type(inp.data_type)) args.append(val) result = call_method_full(parent, self.node, *args) self.result_label.setText(str(result.StatusCode)) for idx, res in enumerate(result.OutputArguments): self.outputs[idx].setText(val_to_string(res))
def _call(self): parent = self.node.get_parent() args = [] for inp in self.inputs: val = string_to_variant(inp.text(), data_type_to_variant_type(inp.data_type)) args.append(val) result = call_method_full(parent, self.node, *args) self.result_label.setText(str(result.StatusCode)) for idx, res in enumerate(result.OutputArguments): self.outputs[idx].setText(val_to_string(res))
def _show_val(self, parent, obj, name, val, vtype): name_item = QStandardItem(name) vitem = QStandardItem() vitem.setText(val_to_string(val)) vitem.setData(MemberData(obj, name, val, vtype), Qt.UserRole) row = [name_item, vitem, QStandardItem(vtype.name)] # if we have a list or extension object we display children if isinstance(val, list): row[2].setText("List of " + vtype.name) self._show_list(name_item, val, vtype) elif vtype == ua.VariantType.ExtensionObject: self._show_ext_obj(name_item, val) parent.appendRow(row) return row
def _show_val(self, parent, obj, name, val, vtype): name_item = QStandardItem(name) vitem = QStandardItem() vitem.setText(val_to_string(val)) vitem.setData(MemberData(obj, name, val, vtype), Qt.UserRole) row = [name_item, vitem, QStandardItem(vtype.name)] # if we have a list or extension object we display children if isinstance(val, list): row[2].setText("List of " + vtype.name) self._show_list(name_item, val, vtype) elif vtype == ua.VariantType.ExtensionObject: self._show_ext_obj(name_item, val) parent.appendRow(row) return row
def _show_attr(self, attr, dv): if attr == ua.AttributeIds.DataType: # FIXME: Could query for browsename here, it does not cost much string = data_type_to_string(dv.Value.Value) elif attr in (ua.AttributeIds.AccessLevel, ua.AttributeIds.UserAccessLevel, ua.AttributeIds.WriteMask, ua.AttributeIds.UserWriteMask, ua.AttributeIds.EventNotifier): string = enum_to_string(attr, dv.Value.Value) else: string = val_to_string(dv.Value.Value) name_item = QStandardItem(attr.name) vitem = QStandardItem(string) vitem.setData(AttributeData(attr, dv.Value.Value, dv.Value.VariantType), Qt.UserRole) self.model.appendRow([name_item, vitem, QStandardItem(dv.Value.VariantType.name)])
def _show_attr(self, attr, dv): if attr == ua.AttributeIds.DataType: # FIXME: Could query for browsename here, it does not cost much string = data_type_to_string(dv.Value.Value) elif attr in (ua.AttributeIds.AccessLevel, ua.AttributeIds.UserAccessLevel, ua.AttributeIds.WriteMask, ua.AttributeIds.UserWriteMask, ua.AttributeIds.EventNotifier): string = enum_to_string(attr, dv.Value.Value) else: string = val_to_string(dv.Value.Value) name_item = QStandardItem(attr.name) vitem = QStandardItem(string) vitem.setData(AttributeData(attr, dv.Value.Value, dv.Value.VariantType), Qt.UserRole) self.model.appendRow([name_item, vitem, QStandardItem(dv.Value.VariantType.name)])
def _show_val(self, parent, obj, name, val, vtype, status_code=None): name_item = QStandardItem(name) vitem = QStandardItem() vitem.setText(val_to_string(val)) vitem.setData(MemberData(obj, name, val, vtype), Qt.UserRole) row = [name_item, vitem, QStandardItem(vtype.name)] # Color value according to status code if status_code is not None: if status_code == ua.StatusCodes.Good: vitem.setForeground(QBrush(QColor("green"))) elif status_code == ua.StatusCodes.Uncertain: vitem.setForeground(QBrush(QColor("yellow"))) else: # StatusCode = Bad: vitem.setForeground(QBrush(QColor("red"))) # if we have a list or extension object we display children if isinstance(val, list): row[2].setText("List of " + vtype.name) self._show_list(name_item, val, vtype) elif vtype == ua.VariantType.ExtensionObject: self._show_ext_obj(name_item, val) parent.appendRow(row) return row
def test_string_to_variant_float(self): s_arr_float = "[1.1, 2.1, 3, 4.0]" arr_float = [1.1, 2.1, 3, 4.0] s_float = "1.9" self.assertEqual(string_to_val(s_float, ua.VariantType.Float), 1.9) self.assertEqual(val_to_string(arr_float), s_arr_float)
def test_string_to_variant_qname(self): string = "2:name" obj = ua.QualifiedName("name", 2) self.assertEqual(string_to_val(string, ua.VariantType.QualifiedName), obj) self.assertEqual(val_to_string(obj), string)
def show_value_attr(attr, dv): print('Value', ':', dv.Value.Value) print('Server Timestamp', ':', val_to_string(dv.ServerTimestamp)) print('Source Timestamp', ':', val_to_string(dv.SourceTimestamp))
def test_string_to_variant_float(self): s_arr_float = "[1.1, 2.1, 3, 4.0]" arr_float = [1.1, 2.1, 3, 4.0] s_float = "1.9" self.assertEqual(string_to_val(s_float, ua.VariantType.Float), 1.9) self.assertEqual(val_to_string(arr_float), s_arr_float)
def _item_collapsed(self, idx): it = self.model.itemFromIndex(idx.sibling(0, 1)) data = it.data(Qt.UserRole) it.setText(val_to_string(data.value))
def test_string_to_variant_localized_text(self): string = "_This is my string" #string = "_This is my nøåæ"FIXME: does not work with python2 ?!?! obj = ua.LocalizedText(string) self.assertEqual(string_to_val(string, ua.VariantType.LocalizedText), obj) self.assertEqual(val_to_string(obj), string)
def test_string_to_variant_qname(self): string = "2:name" obj = ua.QualifiedName("name", 2) self.assertEqual(string_to_val(string, ua.VariantType.QualifiedName), obj) self.assertEqual(val_to_string(obj), string)
def _item_collapsed(self, idx): it = self.model.itemFromIndex(idx.sibling(0, 1)) data = it.data(Qt.UserRole) it.setText(val_to_string(data.value))