From 6706fac752d97ecbe992acd359e0c2fde4a3fbdf Mon Sep 17 00:00:00 2001 From: Felix Ruess Date: Wed, 18 Feb 2015 12:54:26 +0100 Subject: [PATCH] [python] pprz_msg using properties --- .../python/ivytoredis/ivy_to_redis.py | 4 +- .../python/messages_app/messagesframe.py | 30 +++++++------- sw/lib/python/ivy_msg_interface.py | 6 +-- sw/lib/python/pprz_msg/message.py | 39 ++++++++++++------- 4 files changed, 43 insertions(+), 36 deletions(-) diff --git a/sw/ground_segment/python/ivytoredis/ivy_to_redis.py b/sw/ground_segment/python/ivytoredis/ivy_to_redis.py index 285bc508c4..e782781d4c 100755 --- a/sw/ground_segment/python/ivytoredis/ivy_to_redis.py +++ b/sw/ground_segment/python/ivytoredis/ivy_to_redis.py @@ -33,9 +33,9 @@ class Ivy2RedisServer(): # if ac_id is not 0 (i.e. telemetry from an aircraft) include it in the key # don't add it to the key for ground messages if ac_id: - key = "{0}.{1}.{2}".format(msg.get_classname(), msg.get_msgname(), ac_id) + key = "{0}.{1}.{2}".format(msg.msg_class, msg.name, ac_id) else: - key = "{0}.{1}".format(msg.get_classname(), msg.get_msgname()) + key = "{0}.{1}".format(msg.msg_class, msg.name) if self.verbose: print("received message, key=%s, msg=%s" % (key, msg.to_json(payload_only=True))) sys.stdout.flush() diff --git a/sw/ground_segment/python/messages_app/messagesframe.py b/sw/ground_segment/python/messages_app/messagesframe.py index 4a1862ea69..7c6a427837 100644 --- a/sw/ground_segment/python/messages_app/messagesframe.py +++ b/sw/ground_segment/python/messages_app/messagesframe.py @@ -29,7 +29,6 @@ class Message(PprzMessage): self.field_controls = [] self.index = None self.last_seen = time.clock() - self.name = name class Aircraft(object): @@ -51,12 +50,13 @@ class MessagesFrame(wx.Frame): :type msg: PprzMessage """ # only show messages of the requested class - if msg.get_classname() != self.msg_class: + if msg.msg_class != self.msg_class: return - if ac_id in self.aircrafts and msg.get_msgname() in self.aircrafts[ac_id].messages: - if time.time() - self.aircrafts[ac_id].messages[msg.get_msgname()].last_seen < 0.2: + if ac_id in self.aircrafts and msg.name in self.aircrafts[ac_id].messages: + if time.time() - self.aircrafts[ac_id].messages[msg.name].last_seen < 0.2: return - wx.CallAfter(self.gui_update, msg.get_classname(), msg.get_msgname(), ac_id, msg) + + wx.CallAfter(self.gui_update, ac_id, msg) def find_page(self, book, name): if book.GetPageCount() < 1: @@ -113,7 +113,7 @@ class MessagesFrame(wx.Frame): messages_book = aircraft.messages_book aircraft.messages[name] = Message(msg_class, name) field_panel = wx.Panel(messages_book) - grid_sizer = wx.FlexGridSizer(len(aircraft.messages[name].get_fieldnames()), 2) + grid_sizer = wx.FlexGridSizer(len(aircraft.messages[name].fieldnames), 2) index = self.find_page(messages_book, name) messages_book.InsertPage(index, field_panel, name, imageId=1) @@ -123,7 +123,7 @@ class MessagesFrame(wx.Frame): for message_name in aircraft.messages: aircraft.messages[message_name].index = self.find_page(messages_book, message_name) - for field_name in aircraft.messages[name].get_fieldnames(): + for field_name in aircraft.messages[name].fieldnames: name_text = wx.StaticText(field_panel, -1, field_name) size = name_text.GetSize() size.x = LABEL_WIDTH @@ -141,20 +141,18 @@ class MessagesFrame(wx.Frame): field_panel.SetSizer(grid_sizer) field_panel.Layout() - def gui_update(self, msg_class, msg_name, ac_id, msg): + def gui_update(self, ac_id, msg): if ac_id not in self.aircrafts: self.add_new_aircraft(ac_id) - aircraft = self.aircrafts[ac_id] + if msg.name not in aircraft.messages: + self.add_new_message(aircraft, msg.msg_class, msg.name) - if msg_name not in aircraft.messages: - self.add_new_message(aircraft, msg_class, msg_name) + aircraft.messages_book.SetPageImage(aircraft.messages[msg.name].index, 1) + self.aircrafts[ac_id].messages[msg.name].last_seen = time.time() - aircraft.messages_book.SetPageImage(aircraft.messages[msg_name].index, 1) - self.aircrafts[ac_id].messages[msg_name].last_seen = time.time() - - for index in range(0, len(msg.get_fieldvalues())): - aircraft.messages[msg_name].field_controls[index].SetLabel(msg.get_field(index)) + for index in range(0, len(msg.fieldvalues)): + aircraft.messages[msg.name].field_controls[index].SetLabel(msg.get_field(index)) def __init__(self, msg_class="telemetry"): wx.Frame.__init__(self, id=-1, parent=None, name=u'MessagesFrame', size=wx.Size(WIDTH, HEIGHT), style=wx.DEFAULT_FRAME_STYLE, title=u'Messages') diff --git a/sw/lib/python/ivy_msg_interface.py b/sw/lib/python/ivy_msg_interface.py index 55afd16d87..1885f039bd 100644 --- a/sw/lib/python/ivy_msg_interface.py +++ b/sw/lib/python/ivy_msg_interface.py @@ -91,12 +91,12 @@ class IvyMessagesInterface(object): def send(self, msg, ac_id=None): if isinstance(msg, PprzMessage): - if "telemetry" in msg.get_classname(): + if "telemetry" in msg.msg_class: if ac_id is None: print("ac_id needed to send telemetry message.") else: - IvySendMsg("%d %s %s" % (ac_id, msg.get_msgname(), msg.payload_to_ivy_string())) + IvySendMsg("%d %s %s" % (ac_id, msg.name, msg.payload_to_ivy_string())) else: - IvySendMsg("%s %s %s" % (msg.get_classname(), msg.get_msgname(), msg.payload_to_ivy_string())) + IvySendMsg("%s %s %s" % (msg.msg_class, msg.name, msg.payload_to_ivy_string())) else: IvySendMsg(msg) diff --git a/sw/lib/python/pprz_msg/message.py b/sw/lib/python/pprz_msg/message.py index ce7f6f7c58..703434da8c 100644 --- a/sw/lib/python/pprz_msg/message.py +++ b/sw/lib/python/pprz_msg/message.py @@ -36,19 +36,28 @@ class PprzMessage(object): else: self._fieldvalues.append(0) - def get_msgname(self): + @property + def name(self): + """Get the message name.""" return self._name - def get_classname(self): + @property + def msg_class(self): + """Get the message class.""" return self._class_name - def get_fieldnames(self): + @property + def fieldnames(self): + """Get list of field names.""" return self._fieldnames - def get_fieldvalues(self): + @property + def fieldvalues(self): + """Get list of field values.""" return self._fieldvalues def get_field(self, idx): + """Get field value by index.""" return self._fieldvalues[idx] def set_values(self, values): @@ -58,19 +67,19 @@ class PprzMessage(object): raise PprzMessageError("Error: fields not matching") def __str__(self): - ret = '%s.%s {' % (self._class_name, self._name) - for idx, f in enumerate(self._fieldnames): - ret += '%s : %s, ' % (f, self._fieldvalues[idx]) + ret = '%s.%s {' % (self.msg_class, self.name) + for idx, f in enumerate(self.fieldnames): + ret += '%s : %s, ' % (f, self.fieldvalues[idx]) ret = ret[0:-2] + '}' return ret def to_dict(self, payload_only=False): d = {} if not payload_only: - d['msgname'] = self._name - d['msgclass'] = self._class_name - for idx, f in enumerate(self._fieldnames): - d[f] = self._fieldvalues[idx] + d['msgname'] = self.name + d['msgclass'] = self.msg_class + for idx, f in enumerate(self.fieldnames): + d[f] = self.fieldvalues[idx] return d def to_json(self, payload_only=False): @@ -78,13 +87,13 @@ class PprzMessage(object): def payload_to_ivy_string(self): ivy_str = '' - for idx, t in enumerate(self._fieldtypes): + for idx, t in enumerate(self.fieldtypes): if "char[" in t: - ivy_str += '"' + self._fieldvalues[idx] + '"' + ivy_str += '"' + self.fieldvalues[idx] + '"' elif '[' in t: - ivy_str += ','.join([str(x) for x in self._fieldvalues[idx]]) + ivy_str += ','.join([str(x) for x in self.fieldvalues[idx]]) else: - ivy_str += str(self._fieldvalues[idx]) + ivy_str += str(self.fieldvalues[idx]) ivy_str += ' ' return ivy_str