From 0012e6a7920d91929afe1dd1a6bdf012d670a7cd Mon Sep 17 00:00:00 2001 From: Daniel Martin Yerga Date: Wed, 17 Feb 2010 16:52:27 +0100 Subject: [PATCH] change and % columns added to portfolio --- changelog | 4 ++++ stockthis.py | 48 ++++++++++++++++++++++++++++++++++++++++-------- 2 files changed, 44 insertions(+), 8 deletions(-) diff --git a/changelog b/changelog index 16f59ed..67d450e 100644 --- a/changelog +++ b/changelog @@ -1,3 +1,7 @@ +2010-02-17 Daniel Martin Yerga + + * Change and percentage columns added to portfolio view. + 2010-02-07 Daniel Martin Yerga * Settings are saved with the system backup. MB#6078 diff --git a/stockthis.py b/stockthis.py index 8775a57..328853e 100644 --- a/stockthis.py +++ b/stockthis.py @@ -779,6 +779,9 @@ class StocksPy: def show_portfolio_view(self, widget): data = settings.load_portfolio(settingsdb) + for item in data: + item.append('-') + item.append('-') win = hildon.StackableWindow() self.create_menu(win) @@ -847,7 +850,6 @@ class StocksPy: dlg.run() dlg.destroy() - def add_item(self, widget, dlg, button, entry1, entry2): symbol = entry2.get_text() name = entry1.get_text() @@ -923,33 +925,54 @@ class StocksPy: def refresh_portfolio(self, widget, tv, win): data = settings.load_portfolio(settingsdb) + for item in data: + item.append('-') + item.append('-') import thread winprogind(win, 1) thread.start_new_thread(self._do_refresh_portfolio, (data, tv, win)) def _do_refresh_portfolio(self, data, tv, win): + print data for item in data: - item[3] = self.get_price(item[0]) + item[3], item[4] = self.get_portfolio_data(item[0]) + try: + ch_percent = \ + 100.0 * float(item[4])/(float(item[3]) - \ + float(item[4])) + except ValueError: + ch_percent = 0.0 + item[5] = '%6.2f %%' % ch_percent + + + print data self.portfolio_model = self._create_portfolio_model(data) tv.set_model(self.portfolio_model) winprogind(win, 0) - def get_price(self, symbol): + def get_portfolio_data(self, symbol): from ystockquote import ystockquote as yt try: - price = yt.get_price(symbol) - return price + data = yt.get_all(symbol) + return data['price'], data['change'] except: logger.exception("Getting price from Yahoo: %s" % symbol) - return "N/A" + return "-", "-" def _create_portfolio_model(self, data): lstore = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING, - gobject.TYPE_STRING, gobject.TYPE_STRING) + gobject.TYPE_STRING, gobject.TYPE_STRING, + gobject.TYPE_STRING, gobject.TYPE_STRING, + gobject.TYPE_STRING) for item in data: iter = lstore.append() - lstore.set(iter, 0, item[0], 1, item[1], 2, item[2], 3, item[3]) + if '+' in item[4]: + color = 'green' + else: + color = 'red' + lstore.set(iter, 0, item[0], 1, item[1], 2, item[2], 3, item[3], + 4, item[4], 5, item[5], 6, color) return lstore def _tv_portfolio_columns(self, treeview): @@ -967,6 +990,15 @@ class StocksPy: column = gtk.TreeViewColumn('Price', gtk.CellRendererText(), text=3) treeview.append_column(column) + column = gtk.TreeViewColumn('Change', gtk.CellRendererText(), text=4) + treeview.append_column(column) + + + renderer = gtk.CellRendererText() + renderer.set_property("foreground-set", True) + column = gtk.TreeViewColumn('%', renderer, text=5, foreground=6) + treeview.append_column(column) + def show_confirmation(self, window, msg): dialog = hildon.hildon_note_new_confirmation(window, msg) dialog.show_all() -- 1.7.9.5