[python] more cleanup

- pep8: 4spaces indentation
- print_funtion
- use 'in' instead of has_key for dicts
- log stuff not tested...
This commit is contained in:
Felix Ruess
2013-04-03 22:53:38 +02:00
parent 1dbbf8f97f
commit 8cd3c4923a
7 changed files with 380 additions and 372 deletions
+42 -43
View File
@@ -9,58 +9,57 @@ from ivy.std_api import *
import logging
class Base:
def __init__(self):
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.window.connect("destroy", self.destroy)
def __init__(self):
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.window.connect("destroy", self.destroy)
self.entry = gtk.Entry()
self.entry.set_width_chars(120)
self.entry.connect("key-release-event", self.key_release_event)
self.entry.show()
self.entry = gtk.Entry()
self.entry.set_width_chars(120)
self.entry.connect("key-release-event", self.key_release_event)
self.entry.show()
self.window.add(self.entry)
self.window.show()
self.ivy_init()
self.ticks = 0
self.window.add(self.entry)
self.window.show()
self.ivy_init()
self.ticks = 0
def ontick(self):
if self.ticks == 5:
IvyStop()
elif self.ticks <= 2:
IvySendMsg("1 BAT " + self.text)
self.ticks = self.ticks + 1
def ontick(self):
if self.ticks == 5:
IvyStop()
elif self.ticks <= 2:
IvySendMsg("1 BAT " + self.text)
self.ticks = self.ticks + 1
def ivy_init(self):
logging.getLogger('Ivy').setLevel(logging.WARN)
IvyInit("Log Annotate",
"Annotate Ready Msg",
0
)
def ivy_init(self):
logging.getLogger('Ivy').setLevel(logging.WARN)
IvyInit("Log Annotate",
"Annotate Ready Msg",
0)
def key_release_event(self, widget, event, data=None):
if event.string == '\r': # Return
self.text = self.entry.get_text()
self.destroy(self, None)
if event.string == '\033': # Escape
self.destroy(self, None)
return False
def key_release_event(self, widget, event, data=None):
if event.string == '\r': # Return
self.text = self.entry.get_text()
self.destroy(self, None)
if event.string == '\033': # Escape
self.destroy(self, None)
return False
def delete_event(self, widget, event, data=None):
return False
def delete_event(self, widget, event, data=None):
return False
def destroy(self, widget, data=None):
gtk.main_quit()
def destroy(self, widget, data=None):
gtk.main_quit()
def main(self):
IvyStart("")
gtk.main()
def main(self):
IvyStart("")
gtk.main()
if self.text:
timerid = IvyTimerRepeatAfter(0, # number of time to be called
100, # delay in ms between calls
self.ontick # handler to call
)
IvyMainLoop()
if self.text:
timerid = IvyTimerRepeatAfter(0, # number of time to be called
100, # delay in ms between calls
self.ontick # handler to call
)
IvyMainLoop()
if __name__ == "__main__":
base = Base()
@@ -16,74 +16,70 @@ import messages_xml_map
class OnboardLogTransformTool():
def __init__(self):
messages_xml_map.ParseMessages()
self.data_types = { 'float' : ['f', 4],
'uint8' : ['B', 1],
'uint16' : ['H', 2],
'uint32' : ['L', 4],
'int8' : ['b', 1],
'int16' : ['h', 2],
'int32' : ['l', 4]
}
messages_xml_map.ParseMessages()
self.data_types = { 'float' : ['f', 4],
'uint8' : ['B', 1],
'uint16' : ['H', 2],
'uint32' : ['L', 4],
'int8' : ['b', 1],
'int16' : ['h', 2],
'int32' : ['l', 4]
}
def Unpack(self, data_fields, type, start, length):
return struct.unpack(type, "".join(data_fields[start:start + length]))[0]
def ProcessLine(self, line):
fields = line.strip().split(' ')
[timestamp, pprz_tstamp, ac_id, msg_id] = fields[0:4]
data_fields = map(lambda x: chr(int(x, 16)), fields[5:])
ac_id = int(ac_id)
timestamp = float(pprz_tstamp)
msg_id = int(msg_id)
fields = line.strip().split(' ')
[timestamp, pprz_tstamp, ac_id, msg_id] = fields[0:4]
data_fields = map(lambda x: chr(int(x, 16)), fields[5:])
ac_id = int(ac_id)
timestamp = float(pprz_tstamp)
msg_id = int(msg_id)
# print "Next message: ", timestamp, pprz_tstamp, ac_id, msg_id
# print messages_xml_map.message_dictionary_id_name.keys()
# print messages_xml_map.message_dictionary_types.keys()
msg_name = messages_xml_map.message_dictionary_id_name['telemetry'][msg_id]
msg_fields = messages_xml_map.message_dictionary_types['telemetry'][msg_id]
# print "Next message: ", timestamp, pprz_tstamp, ac_id, msg_id
# print messages_xml_map.message_dictionary_id_name.keys()
# print messages_xml_map.message_dictionary_types.keys()
result = "%f %i %s " % (timestamp, ac_id, msg_name)
msg_name = messages_xml_map.message_dictionary_id_name['telemetry'][msg_id]
msg_fields = messages_xml_map.message_dictionary_types['telemetry'][msg_id]
field_offset = 0
for field in msg_fields:
if field[-2:] == "[]":
baseType = field[:-2]
array_length = int(self.Unpack(data_fields, 'B', field_offset, 1))
field_offset = field_offset + 1
for count in range(0, array_length):
array_value = str(self.Unpack(data_fields, self.data_types[baseType][0], field_offset, self.data_types[baseType][1]))
field_offset = field_offset + self.data_types[baseType][1]
if (count == array_length - 1):
result += array_value + " "
else:
result += array_value + ","
else:
result += str(self.Unpack(data_fields, self.data_types[field][0], field_offset, self.data_types[field][1])) + " "
field_offset = field_offset + self.data_types[field][1]
result = "%f %i %s " % (timestamp, ac_id, msg_name)
field_offset = 0
for field in msg_fields:
if field[-2:] == "[]":
baseType = field[:-2]
array_length = int(self.Unpack(data_fields, 'B', field_offset, 1))
field_offset = field_offset + 1
for count in range(0, array_length):
array_value = str(self.Unpack(data_fields, self.data_types[baseType][0], field_offset, self.data_types[baseType][1]))
field_offset = field_offset + self.data_types[baseType][1]
if (count == array_length - 1):
result += array_value + " "
else:
result += array_value + ","
else:
result += str(self.Unpack(data_fields, self.data_types[field][0], field_offset, self.data_types[field][1])) + " "
field_offset = field_offset + self.data_types[field][1]
if (field_offset > len(data_fields)):
print "finished without parsing %s" % field
break
if (field_offset > len(data_fields)):
print "finished without parsing %s" % field
break
return result[:-1]
return result[:-1]
def Run(self, logfile):
# open log file
INPUT = open(logfile, "r")
for line in INPUT:
print self.ProcessLine(line)
# print self.ProcessLine(line)
# except:
# pass
INPUT.close()
# open log file
INPUT = open(logfile, "r")
for line in INPUT:
print self.ProcessLine(line)
INPUT.close()
def main():
log_transform = OnboardLogTransformTool()
log_transform.Run(sys.argv[1])
log_transform = OnboardLogTransformTool()
log_transform.Run(sys.argv[1])
if __name__ == '__main__':
main()
main()
@@ -1,5 +1,7 @@
#!/usr/bin/env python
from __future__ import absolute_import, print_function
import wx
import getopt
import sys
@@ -11,96 +13,96 @@ sys.path.append(os.getenv("PAPARAZZI_HOME") + "/sw/lib/python")
import messages_tool
class MessagePicker(wx.Frame):
def __init__(self, parent, callback, initIvy = True):
wx.Frame.__init__(self, parent, name="MessagePicker", title=u'Message Picker', size=wx.Size(320,640))
self.aircrafts = {}
self.callback = callback
def __init__(self, parent, callback, initIvy = True):
wx.Frame.__init__(self, parent, name="MessagePicker", title=u'Message Picker', size=wx.Size(320,640))
self.tree = wx.TreeCtrl(self)
self.root = self.tree.AddRoot("Telemetry")
self.tree.Bind(wx.EVT_LEFT_DCLICK, self.OnDoubleClick)
self.tree.Bind(wx.EVT_CHAR, self.OnKeyChar)
self.Bind( wx.EVT_CLOSE, self.OnClose)
self.message_interface = messages_tool.IvyMessagesInterface(self.msg_recv, initIvy)
self.aircrafts = {}
self.callback = callback
def OnClose(self, event):
self.message_interface.Stop()
self.Destroy()
self.tree = wx.TreeCtrl(self)
self.root = self.tree.AddRoot("Telemetry")
self.tree.Bind(wx.EVT_LEFT_DCLICK, self.OnDoubleClick)
self.tree.Bind(wx.EVT_CHAR, self.OnKeyChar)
self.Bind( wx.EVT_CLOSE, self.OnClose)
self.message_interface = messages_tool.IvyMessagesInterface(self.msg_recv, initIvy)
def msg_recv(self, ac_id, name, values):
self.tree.Expand(self.root)
if not self.aircrafts.has_key(ac_id):
ac_node = self.tree.AppendItem(self.root, str(ac_id))
self.aircrafts[ac_id] = messages_tool.Aircraft(ac_id)
self.aircrafts[ac_id].messages_book = ac_node
def OnClose(self, event):
self.message_interface.Stop()
self.Destroy()
aircraft = self.aircrafts[ac_id]
ac_node = aircraft.messages_book
def msg_recv(self, ac_id, name, values):
self.tree.Expand(self.root)
if ac_id not in self.aircrafts:
ac_node = self.tree.AppendItem(self.root, str(ac_id))
self.aircrafts[ac_id] = messages_tool.Aircraft(ac_id)
self.aircrafts[ac_id].messages_book = ac_node
if not aircraft.messages.has_key(name):
msg_node = self.tree.AppendItem(ac_node, str(name))
self.tree.SortChildren(ac_node)
aircraft.messages[name] = messages_tool.Message("telemetry", name)
for field in aircraft.messages[name].field_names:
item = self.tree.AppendItem(msg_node, field)
aircraft = self.aircrafts[ac_id]
ac_node = aircraft.messages_book
def OnKeyChar(self, event):
if event.GetKeyCode() != 13:
return False
node = self.tree.GetSelection()
field_name = self.tree.GetItemText(node)
if name not in aircraft.messages:
msg_node = self.tree.AppendItem(ac_node, str(name))
self.tree.SortChildren(ac_node)
aircraft.messages[name] = messages_tool.Message("telemetry", name)
for field in aircraft.messages[name].field_names:
item = self.tree.AppendItem(msg_node, field)
parent = self.tree.GetItemParent(node)
message_name = self.tree.GetItemText(parent)
def OnKeyChar(self, event):
if event.GetKeyCode() != 13:
return False
node = self.tree.GetSelection()
field_name = self.tree.GetItemText(node)
grandparent = self.tree.GetItemParent(parent)
ac_id = self.tree.GetItemText(grandparent)
parent = self.tree.GetItemParent(node)
message_name = self.tree.GetItemText(parent)
if node == self.root or parent == self.root or grandparent == self.root:
# if not leaf, double click = expand
if self.tree.IsExpanded(node):
self.tree.Collapse(node)
else:
self.tree.Expand(node)
return
grandparent = self.tree.GetItemParent(parent)
ac_id = self.tree.GetItemText(grandparent)
self.callback(int(ac_id), message_name, field_name)
def OnDoubleClick(self, event):
node = self.tree.GetSelection()
field_name = self.tree.GetItemText(node)
if node == self.root or parent == self.root or grandparent == self.root:
# if not leaf, double click = expand
if self.tree.IsExpanded(node):
self.tree.Collapse(node)
else:
self.tree.Expand(node)
return
parent = self.tree.GetItemParent(node)
message_name = self.tree.GetItemText(parent)
self.callback(int(ac_id), message_name, field_name)
grandparent = self.tree.GetItemParent(parent)
ac_id = self.tree.GetItemText(grandparent)
def OnDoubleClick(self, event):
node = self.tree.GetSelection()
field_name = self.tree.GetItemText(node)
if node == self.root or parent == self.root or grandparent == self.root:
# if not leaf, double click = expand
if self.tree.IsExpanded(node):
self.tree.Collapse(node)
else:
self.tree.Expand(node)
return
parent = self.tree.GetItemParent(node)
message_name = self.tree.GetItemText(parent)
self.callback(int(ac_id), message_name, field_name)
grandparent = self.tree.GetItemParent(parent)
ac_id = self.tree.GetItemText(grandparent)
if node == self.root or parent == self.root or grandparent == self.root:
# if not leaf, double click = expand
if self.tree.IsExpanded(node):
self.tree.Collapse(node)
else:
self.tree.Expand(node)
return
self.callback(int(ac_id), message_name, field_name)
class TestApp(wx.App):
def OnInit(self):
self.main = MessagePicker(None, callback)
self.main.Show()
self.SetTopWindow(self.main)
def OnInit(self):
self.main = MessagePicker(None, callback)
self.main.Show()
self.SetTopWindow(self.main)
return True
return True
def test():
application = TestApp(0)
application.MainLoop()
def callback(ac_id, message, field):
print ac_id, message, field
print(ac_id, message, field)
if __name__ == '__main__':
test()
@@ -108,7 +108,7 @@ class PlotFrame(wx.Frame):
def __init__(self, parent):
self._init_ctrls(parent)
self.canvas = plotpanel.create(self.panel1, self)
self.dynamic_menus = {}
@@ -128,21 +128,21 @@ class PlotFrame(wx.Frame):
self.editMax.SetValue(str(max_))
def OnClose(self, event):
# need to forward close to canvas so that ivy is shut down, otherwise ivy hangs the shutdown
self.canvas.OnClose()
self.Destroy()
# need to forward close to canvas so that ivy is shut down, otherwise ivy hangs the shutdown
self.canvas.OnClose()
self.Destroy()
def OnErase(self, event):
pass
def OnSize(self, event):
self.canvas.OnSize( event.GetSize())
self.canvas.OnSize( event.GetSize())
def OnSliderTimeCommandScroll(self, event):
value = event.GetPosition()
self.canvas.SetPlotInterval(value)
self.editTime.SetValue( '%.3f' % (value/1000.0))
def OnEditTimeTextEnter(self, event):
try:
value = int(float(event.GetString()) * 1000.0)
@@ -169,7 +169,7 @@ class PlotFrame(wx.Frame):
def OnMenu1Item_pauseMenu(self, event):
self.canvas.Pause(event.IsChecked())
def AddCurve(self, menu_id, title, use_as_x = False):
curveMenu = wx.Menu(title='')
@@ -186,7 +186,7 @@ class PlotFrame(wx.Frame):
self.Bind(wx.EVT_MENU, self.OnMenuScaleCurve, id=menu_id*10+2)
self.Bind(wx.EVT_MENU, self.OnMenuRealTime, id=menu_id*10+3)
self.Bind(wx.EVT_MENU, self.OnMenuUseAsXAxis, id=menu_id*10+4)
self.dynamic_menus[menu_id] = self.menuCurves.AppendSubMenu(submenu=curveMenu, text=title)
def OnMenuDeleteCurve(self, event):
@@ -198,25 +198,25 @@ class PlotFrame(wx.Frame):
def OnMenuOffsetCurve(self, event):
menu_id = (event.GetId()-1) / 10
default_value = str(self.canvas.FindPlot(menu_id).offset)
value = wx.GetTextFromUser("Enter a value to offset the plot", "Offset", default_value)
try:
value = float(value)
self.canvas.OffsetPlot( menu_id, value)
value = float(value)
self.canvas.OffsetPlot( menu_id, value)
except:
pass
pass
def OnMenuScaleCurve(self, event):
menu_id = (event.GetId()-2) / 10
default_value = str(self.canvas.FindPlot(menu_id).scale)
value = wx.GetTextFromUser("Enter a factor to scale the plot", "Scale", default_value)
try:
value = float(value)
self.canvas.ScalePlot( menu_id, value)
value = float(value)
self.canvas.ScalePlot( menu_id, value)
except:
pass
pass
def OnMenuRealTime(self,event):
menu_id = (event.GetId()-3) / 10
@@ -227,15 +227,15 @@ class PlotFrame(wx.Frame):
menu_id = (event_id-4) / 10
value = event.IsChecked()
if value:
# go through and clear the checks from any other curves
for i in self.dynamic_menus:
for item in self.dynamic_menus[i].GetSubMenu().GetMenuItems():
if item.GetText() == u'_Use as X-axis' and event_id != item.GetId():
item.Check(False)
self.canvas.SetXAxis(menu_id)
if value:
# go through and clear the checks from any other curves
for i in self.dynamic_menus:
for item in self.dynamic_menus[i].GetSubMenu().GetMenuItems():
if item.GetText() == u'_Use as X-axis' and event_id != item.GetId():
item.Check(False)
self.canvas.SetXAxis(menu_id)
else:
self.canvas.ClearXAxis()
self.canvas.ClearXAxis()
def OnEditMinText(self, event):
File diff suppressed because it is too large Load Diff
@@ -7,10 +7,10 @@ import sys
import plotframe
modules ={u'PlotFrame': [1, 'Main frame of Application', u'plotframe.py'],
u'messages_xml_map': [0, '', u'messages_xml_map.py'],
u'plotpanel': [0, '', u'plotpanel.py'],
u'realtimeplotapp': [0, '', u'realtimeplotapp.py'],
u'textdroptarget': [0, '', u'textdroptarget.py']}
u'messages_xml_map': [0, '', u'messages_xml_map.py'],
u'plotpanel': [0, '', u'plotpanel.py'],
u'realtimeplotapp': [0, '', u'realtimeplotapp.py'],
u'textdroptarget': [0, '', u'textdroptarget.py']}
class RealTimePlotApp(wx.App):
def OnInit(self):
@@ -20,9 +20,9 @@ class RealTimePlotApp(wx.App):
opts, args = getopt.getopt(sys.argv[1:], "p:",
["plot"])
for o,a in opts:
if o in ("-p", "--plot"):
[ac_id, message, field, color, use_x] = a.split(':')
self.main.AddPlot(int(ac_id), message, field, color, bool(int(use_x)))
if o in ("-p", "--plot"):
[ac_id, message, field, color, use_x] = a.split(':')
self.main.AddPlot(int(ac_id), message, field, color, bool(int(use_x)))
return True
def main():
@@ -3,11 +3,11 @@ import wx
class TextDropTarget(wx.TextDropTarget):
""" This object implements Drop Target functionality for Text """
def __init__(self, reference):
""" Initialize the Drop Target, passing in the Object Reference to
indicate what should receive the dropped text """
wx.TextDropTarget.__init__(self)
self.reference = reference
""" Initialize the Drop Target, passing in the Object Reference to
indicate what should receive the dropped text """
wx.TextDropTarget.__init__(self)
self.reference = reference
def OnDropText(self, x, y, data):
""" When text is dropped, send it to the object specified """
self.reference.OnDropText(data)
""" When text is dropped, send it to the object specified """
self.reference.OnDropText(data)