From b39f766941e99d11da827e4dab2452909b27cbf5 Mon Sep 17 00:00:00 2001 From: Worros Date: Mon, 19 Oct 2009 19:39:46 +0800 Subject: [PATCH 1/8] Color cash columns in red and green --- pyfpdb/GuiPlayerStats.py | 73 ++++++++++++++++++++++++++-------------- 1 file changed, 48 insertions(+), 25 deletions(-) diff --git a/pyfpdb/GuiPlayerStats.py b/pyfpdb/GuiPlayerStats.py index e51ff4a3..c12f16e1 100644 --- a/pyfpdb/GuiPlayerStats.py +++ b/pyfpdb/GuiPlayerStats.py @@ -79,30 +79,30 @@ class GuiPlayerStats (threading.Thread): # ToDo: store in config # ToDo: create popup to adjust column config # columns to display, keys match column name returned by sql, values in tuple are: - # is column displayed, column heading, xalignment, formatting - self.columns = [ ["game", True, "Game", 0.0, "%s"] - , ["hand", False, "Hand", 0.0, "%s"] # true not allowed for this line - , ["plposition", False, "Posn", 1.0, "%s"] # true not allowed for this line (set in code) - , ["pname", False, "Name", 0.0, "%s"] # true not allowed for this line (set in code) - , ["n", True, "Hds", 1.0, "%d"] - , ["avgseats", False, "Seats", 1.0, "%3.1f"] - , ["vpip", True, "VPIP", 1.0, "%3.1f"] - , ["pfr", True, "PFR", 1.0, "%3.1f"] - , ["pf3", True, "PF3", 1.0, "%3.1f"] - , ["steals", True, "Steals", 1.0, "%3.1f"] - , ["saw_f", True, "Saw_F", 1.0, "%3.1f"] - , ["sawsd", True, "SawSD", 1.0, "%3.1f"] - , ["wtsdwsf", True, "WtSDwsF", 1.0, "%3.1f"] - , ["wmsd", True, "W$SD", 1.0, "%3.1f"] - , ["flafq", True, "FlAFq", 1.0, "%3.1f"] - , ["tuafq", True, "TuAFq", 1.0, "%3.1f"] - , ["rvafq", True, "RvAFq", 1.0, "%3.1f"] - , ["pofafq", False, "PoFAFq", 1.0, "%3.1f"] - , ["net", True, "Net($)", 1.0, "%6.2f"] - , ["bbper100", True, "bb/100", 1.0, "%4.2f"] - , ["rake", True, "Rake($)", 1.0, "%6.2f"] - , ["bb100xr", True, "bbxr/100", 1.0, "%4.2f"] - , ["variance", True, "Variance", 1.0, "%5.2f"] + # is column displayed, column heading, xalignment, formatting, celltype + self.columns = [ ["game", True, "Game", 0.0, "%s", "str"] + , ["hand", False, "Hand", 0.0, "%s", "str"] # true not allowed for this line + , ["plposition", False, "Posn", 1.0, "%s", "str"] # true not allowed for this line (set in code) + , ["pname", False, "Name", 0.0, "%s", "str"] # true not allowed for this line (set in code) + , ["n", True, "Hds", 1.0, "%d", "str"] + , ["avgseats", False, "Seats", 1.0, "%3.1f", "str"] + , ["vpip", True, "VPIP", 1.0, "%3.1f", "str"] + , ["pfr", True, "PFR", 1.0, "%3.1f", "str"] + , ["pf3", True, "PF3", 1.0, "%3.1f", "str"] + , ["steals", True, "Steals", 1.0, "%3.1f", "str"] + , ["saw_f", True, "Saw_F", 1.0, "%3.1f", "str"] + , ["sawsd", True, "SawSD", 1.0, "%3.1f", "str"] + , ["wtsdwsf", True, "WtSDwsF", 1.0, "%3.1f", "str"] + , ["wmsd", True, "W$SD", 1.0, "%3.1f", "str"] + , ["flafq", True, "FlAFq", 1.0, "%3.1f", "str"] + , ["tuafq", True, "TuAFq", 1.0, "%3.1f", "str"] + , ["rvafq", True, "RvAFq", 1.0, "%3.1f", "str"] + , ["pofafq", False, "PoFAFq", 1.0, "%3.1f", "str"] + , ["net", True, "Net($)", 1.0, "%6.2f", "cash"] + , ["bbper100", True, "bb/100", 1.0, "%4.2f", "str"] + , ["rake", True, "Rake($)", 1.0, "%6.2f", "cash"] + , ["bb100xr", True, "bbxr/100", 1.0, "%4.2f", "str"] + , ["variance", True, "Variance", 1.0, "%5.2f", "str"] ] # Detail filters: This holds the data used in the popup window, extra values are @@ -235,10 +235,29 @@ class GuiPlayerStats (threading.Thread): print "Stats page displayed in %4.2f seconds" % (time() - starttime) #end def fillStatsFrame(self, vbox): + def reset_style_render_func(self, treeviewcolumn, cell, model, iter): + cell.set_property('foreground', 'black') + + def ledger_style_render_func(self, treeviewcolumn, cell, model, iter): + str = cell.get_property('text') + #Weird, if you set for one cell it affects all others unless you set explicitly + cell.set_property('foreground', 'black') + if '-' in str: + str = str.replace("-", "") + str = "(%s)" %(str) + cell.set_property('text', str) + cell.set_property('foreground', 'red') + else: + cell.set_property('foreground', 'green') + + return + + def addTable(self, vbox, query, flags, playerids, sitenos, limits, type, seats, groups, dates): + counter = 0 row = 0 sqlrow = 0 - colalias,colshow,colheading,colxalign,colformat = 0,1,2,3,4 + colalias,colshow,colheading,colxalign,colformat,coltype = 0,1,2,3,4,5 if not flags: holecards = False else: holecards = flags[0] @@ -285,6 +304,10 @@ class GuiPlayerStats (threading.Thread): listcols[col].add_attribute(numcell, 'text', col) listcols[col].set_expand(True) #listcols[col].set_alignment(column[colxalign]) # no effect? + if column[coltype] == 'cash': + listcols[col].set_cell_data_func(numcell, self.ledger_style_render_func) + else: + listcols[col].set_cell_data_func(numcell, self.reset_style_render_func) rows = len(result) # +1 for title row From 4f754fa8819684634c6688e5f5f2752a8e993929 Mon Sep 17 00:00:00 2001 From: Worros Date: Tue, 20 Oct 2009 12:06:29 +0800 Subject: [PATCH 2/8] Add some prep work for sorting the stats page --- pyfpdb/GuiPlayerStats.py | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/pyfpdb/GuiPlayerStats.py b/pyfpdb/GuiPlayerStats.py index c12f16e1..dd3db0be 100644 --- a/pyfpdb/GuiPlayerStats.py +++ b/pyfpdb/GuiPlayerStats.py @@ -36,6 +36,8 @@ class GuiPlayerStats (threading.Thread): self.main_window = mainwin self.sql = querylist + self.liststore = None + self.MYSQL_INNODB = 2 self.PGSQL = 3 self.SQLITE = 4 @@ -238,10 +240,8 @@ class GuiPlayerStats (threading.Thread): def reset_style_render_func(self, treeviewcolumn, cell, model, iter): cell.set_property('foreground', 'black') - def ledger_style_render_func(self, treeviewcolumn, cell, model, iter): + def ledger_style_render_func(self, tvcol, cell, model, iter): str = cell.get_property('text') - #Weird, if you set for one cell it affects all others unless you set explicitly - cell.set_property('foreground', 'black') if '-' in str: str = str.replace("-", "") str = "(%s)" %(str) @@ -252,6 +252,16 @@ class GuiPlayerStats (threading.Thread): return + def sortcols(self, col, n): + #This doesn't actually work yet + if n == 0: + # Card values can stay the same for the moment. + return + if col.get_sort_order() == gtk.SORT_ASCENDING: + col.set_sort_order(gtk.SORT_DESCENDING) + else: + col.set_sort_order(gtk.SORT_ASCENDING) + self.liststore.set_sort_column_id(n, col.get_sort_order()) def addTable(self, vbox, query, flags, playerids, sitenos, limits, type, seats, groups, dates): counter = 0 @@ -271,8 +281,8 @@ class GuiPlayerStats (threading.Thread): cols_to_show = [x for x in self.columns if x[colshow]] hgametypeid_idx = colnames.index('hgametypeid') - liststore = gtk.ListStore(*([str] * len(cols_to_show))) - view = gtk.TreeView(model=liststore) + self.liststore = gtk.ListStore(*([str] * len(cols_to_show))) + view = gtk.TreeView(model=self.liststore) view.set_grid_lines(gtk.TREE_VIEW_GRID_LINES_BOTH) #vbox.pack_start(view, expand=False, padding=3) vbox.add(view) @@ -282,6 +292,7 @@ class GuiPlayerStats (threading.Thread): numcell = gtk.CellRendererText() numcell.set_property('xalign', 1.0) listcols = [] + idx = 0 # Create header row eg column: ("game", True, "Game", 0.0, "%s") for col, column in enumerate(cols_to_show): @@ -291,6 +302,9 @@ class GuiPlayerStats (threading.Thread): s = column[colheading] listcols.append(gtk.TreeViewColumn(s)) view.append_column(listcols[col]) + #listcols[col].set_clickable(True) + #listcols[col].set_sort_indicator(True) + #listcols[col].connect("clicked", self.sortcols, idx) if column[colformat] == '%s': if column[colxalign] == 0.0: listcols[col].pack_start(textcell, expand=True) @@ -308,6 +322,7 @@ class GuiPlayerStats (threading.Thread): listcols[col].set_cell_data_func(numcell, self.ledger_style_render_func) else: listcols[col].set_cell_data_func(numcell, self.reset_style_render_func) + idx = idx+1 rows = len(result) # +1 for title row @@ -348,7 +363,7 @@ class GuiPlayerStats (threading.Thread): treerow.append(column[colformat] % value) else: treerow.append(' ') - iter = liststore.append(treerow) + iter = self.liststore.append(treerow) sqlrow += 1 row += 1 vbox.show_all() From ca714ddd54b22c40bb4b8a4ab583ce1a746f99e0 Mon Sep 17 00:00:00 2001 From: Mika Bostrom Date: Wed, 21 Oct 2009 09:19:36 +0300 Subject: [PATCH 3/8] Icon graphics Pick up graphics from icontest branch. These may be used for packaging improvements --- gfx/fpdb-icon.png | Bin 0 -> 4279 bytes gfx/fpdb-icon2.png | Bin 0 -> 4980 bytes gfx/magnified_cards.png | Bin 0 -> 108378 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 gfx/fpdb-icon.png create mode 100644 gfx/fpdb-icon2.png create mode 100644 gfx/magnified_cards.png diff --git a/gfx/fpdb-icon.png b/gfx/fpdb-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..673b0e541db5682761affdff996f54639b7968c9 GIT binary patch literal 4279 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 Z_+N?k+f?qKSQP*O002ovPDHLkV1lCME~Nkf literal 0 HcmV?d00001 diff --git a/gfx/fpdb-icon2.png b/gfx/fpdb-icon2.png new file mode 100644 index 0000000000000000000000000000000000000000..acf5012491c88bea77bf9d15b02be1f59c03772e GIT binary patch literal 4980 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 P`QUJ40}Fi|)HU{h7kt@X literal 0 HcmV?d00001 From 690c00470b1cdddc143f547d9a28692d354ae7ad Mon Sep 17 00:00:00 2001 From: Mika Bostrom Date: Wed, 21 Oct 2009 10:18:34 +0300 Subject: [PATCH 4/8] Add .desktop file --- packaging/debian/files/fpdb.desktop | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 packaging/debian/files/fpdb.desktop diff --git a/packaging/debian/files/fpdb.desktop b/packaging/debian/files/fpdb.desktop new file mode 100644 index 00000000..eed85047 --- /dev/null +++ b/packaging/debian/files/fpdb.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Name=Free Poker Database +Comment=Online Poker Tracker + HUD +Exec=/usr/bin/fpdb +Icon=fpdb-icon.png +Terminal=true +Type=Application +Categories=Utility + From 58707d2022fa4b4f0dd57770dba58f4d0522c007 Mon Sep 17 00:00:00 2001 From: Worros Date: Wed, 21 Oct 2009 17:22:47 +0800 Subject: [PATCH 5/8] Update GuiSessionViewer. Still horribly broken, but on its way --- pyfpdb/GuiSessionViewer.py | 292 ++++++++++++++++++++----------------- pyfpdb/fpdb.py | 16 +- 2 files changed, 170 insertions(+), 138 deletions(-) mode change 100644 => 100755 pyfpdb/GuiSessionViewer.py diff --git a/pyfpdb/GuiSessionViewer.py b/pyfpdb/GuiSessionViewer.py old mode 100644 new mode 100755 index 0587e5e0..96586263 --- a/pyfpdb/GuiSessionViewer.py +++ b/pyfpdb/GuiSessionViewer.py @@ -15,6 +15,7 @@ #In the "official" distribution you can find the license in #agpl-3.0.txt in the docs folder of the package. +import sys import threading import pygtk pygtk.require('2.0') @@ -22,7 +23,10 @@ import gtk import os from time import time, strftime, localtime try: - from numpy import diff, nonzero + from numpy import diff, nonzero, sum +# from matplotlib.dates import DateFormatter, WeekdayLocator, HourLocator, \ +# DayLocator, MONDAY, timezone + except: print """Failed to load numpy in Session Viewer""" print """This is of no consequence as the module currently doesn't do anything.""" @@ -34,10 +38,13 @@ import Filters import FpdbSQLQueries class GuiSessionViewer (threading.Thread): - def __init__(self, config, querylist, debug=True): + def __init__(self, config, querylist, mainwin, debug=True): self.debug = debug self.conf = config self.sql = querylist + + self.liststore = None + self.MYSQL_INNODB = 2 self.PGSQL = 3 self.SQLITE = 4 @@ -56,55 +63,63 @@ class GuiSessionViewer (threading.Thread): self.filterText = {'handhead':'Hand Breakdown for all levels listed above' } - filters_display = { "Heroes" : True, - "Sites" : True, - "Games" : False, - "Limits" : True, - "LimitSep" : True, - "Seats" : True, - "SeatSep" : True, - "Dates" : False, - "Groups" : True, - "Button1" : True, - "Button2" : True + filters_display = { "Heroes" : True, + "Sites" : True, + "Games" : False, + "Limits" : True, + "LimitSep" : True, + "LimitType" : True, + "Type" : True, + "Seats" : True, + "SeatSep" : True, + "Dates" : True, + "Groups" : True, + "GroupsAll" : True, + "Button1" : True, + "Button2" : True } self.filters = Filters.Filters(self.db, self.conf, self.sql, display = filters_display) - self.filters.registerButton2Name("_Refresh") - self.filters.registerButton2Callback(self.refreshStats) + self.filters.registerButton1Name("_Refresh") + self.filters.registerButton1Callback(self.refreshStats) # ToDo: store in config # ToDo: create popup to adjust column config # columns to display, keys match column name returned by sql, values in tuple are: # is column displayed, column heading, xalignment, formatting - self.columns = [ ("game", True, "Game", 0.0, "%s") + self.columns = [ ("sid", True, "SID", 0.0, "%s") , ("hand", False, "Hand", 0.0, "%s") # true not allowed for this line , ("n", True, "Hds", 1.0, "%d") - , ("avgseats", True, "Seats", 1.0, "%3.1f") - , ("vpip", True, "VPIP", 1.0, "%3.1f") - , ("pfr", True, "PFR", 1.0, "%3.1f") - , ("pf3", True, "PF3", 1.0, "%3.1f") - , ("steals", True, "Steals", 1.0, "%3.1f") - , ("saw_f", True, "Saw_F", 1.0, "%3.1f") - , ("sawsd", True, "SawSD", 1.0, "%3.1f") - , ("wtsdwsf", True, "WtSDwsF", 1.0, "%3.1f") - , ("wmsd", True, "W$SD", 1.0, "%3.1f") - , ("flafq", True, "FlAFq", 1.0, "%3.1f") - , ("tuafq", True, "TuAFq", 1.0, "%3.1f") - , ("rvafq", True, "RvAFq", 1.0, "%3.1f") - , ("pofafq", False, "PoFAFq", 1.0, "%3.1f") - , ("net", True, "Net($)", 1.0, "%6.2f") - , ("bbper100", True, "BB/100", 1.0, "%4.2f") - , ("rake", True, "Rake($)", 1.0, "%6.2f") - , ("variance", True, "Variance", 1.0, "%5.2f") + , ("start", True, "Start", 1.0, "%d") + , ("end", True, "End", 1.0, "%d") + , ("hph", True, "Hands/h", 1.0, "%d") + , ("profit", True, "Profit", 1.0, "%s") + #, ("avgseats", True, "Seats", 1.0, "%3.1f") + #, ("vpip", True, "VPIP", 1.0, "%3.1f") + #, ("pfr", True, "PFR", 1.0, "%3.1f") + #, ("pf3", True, "PF3", 1.0, "%3.1f") + #, ("steals", True, "Steals", 1.0, "%3.1f") + #, ("saw_f", True, "Saw_F", 1.0, "%3.1f") + #, ("sawsd", True, "SawSD", 1.0, "%3.1f") + #, ("wtsdwsf", True, "WtSDwsF", 1.0, "%3.1f") + #, ("wmsd", True, "W$SD", 1.0, "%3.1f") + #, ("flafq", True, "FlAFq", 1.0, "%3.1f") + #, ("tuafq", True, "TuAFq", 1.0, "%3.1f") + #, ("rvafq", True, "RvAFq", 1.0, "%3.1f") + #, ("pofafq", False, "PoFAFq", 1.0, "%3.1f") + #, ("net", True, "Net($)", 1.0, "%6.2f") + #, ("bbper100", True, "BB/100", 1.0, "%4.2f") + #, ("rake", True, "Rake($)", 1.0, "%6.2f") + #, ("variance", True, "Variance", 1.0, "%5.2f") ] self.stats_frame = None self.stats_vbox = None self.detailFilters = [] # the data used to enhance the sql select - - self.main_hbox = gtk.HBox(False, 0) - self.main_hbox.show() + + #self.main_hbox = gtk.HBox(False, 0) + #self.main_hbox.show() + self.main_hbox = gtk.HPaned() self.stats_frame = gtk.Frame() self.stats_frame.show() @@ -112,21 +127,46 @@ class GuiSessionViewer (threading.Thread): self.stats_vbox = gtk.VBox(False, 0) self.stats_vbox.show() self.stats_frame.add(self.stats_vbox) - self.fillStatsFrame(self.stats_vbox) - - self.main_hbox.pack_start(self.filters.get_vbox()) - self.main_hbox.pack_start(self.stats_frame, expand=True, fill=True) - -################################ + # self.fillStatsFrame(self.stats_vbox) + #self.main_hbox.pack_start(self.filters.get_vbox()) + #self.main_hbox.pack_start(self.stats_frame, expand=True, fill=True) + self.main_hbox.pack1(self.filters.get_vbox()) + self.main_hbox.pack2(self.stats_frame) + self.main_hbox.show() # make sure Hand column is not displayed - [x for x in self.columns if x[0] == 'hand'][0][1] == False + #[x for x in self.columns if x[0] == 'hand'][0][1] = False def get_vbox(self): """returns the vbox of this thread""" return self.main_hbox + def generateGraph(self): + fig = figure() + fig.subplots_adjust(bottom=0.2) + ax = fig.add_subplot(111) + ax.xaxis.set_major_locator(mondays) + ax.xaxis.set_minor_locator(alldays) + ax.xaxis.set_major_formatter(weekFormatter) + #ax.xaxis.set_minor_formatter(dayFormatter) + #plot_day_summary(ax, quotes, ticksize=3) +# candlestick(ax, quotes, width=0.6) +# candlestick2(ax, opens, closes, highs, lows, width=4, colorup='k', colordown='r', alpha=0.75) +# Represent the open, close as a bar line and high low range as a vertical line. +# ax : an Axes instance to plot to +# width : the bar width in points +# colorup : the color of the lines where close >= open +# colordown : the color of the lines where close < open +# alpha : bar transparency +# return value is lineCollection, barCollection + ax.xaxis_date() + ax.autoscale_view() + setp( gca().get_xticklabels(), rotation=45, horizontalalignment='right') + + show() + + def refreshStats(self, widget, data): try: self.stats_vbox.destroy() except AttributeError: pass @@ -209,105 +249,97 @@ class GuiSessionViewer (threading.Thread): if not flags: holecards = False else: holecards = flags[0] + # pre-fetch some constant values: + cols_to_show = [x for x in self.columns if x[colshow]] - self.stats_table = gtk.Table(1, 1, False) - self.stats_table.set_col_spacings(4) - self.stats_table.show() - - self.db.cursor.execute("""select UNIX_TIMESTAMP(handStart) as time, id from Hands ORDER BY time""") + self.liststore = gtk.ListStore(*([str] * len(cols_to_show))) + + view = gtk.TreeView(model=self.liststore) + view.set_grid_lines(gtk.TREE_VIEW_GRID_LINES_BOTH) + vbox.add(view) + textcell = gtk.CellRendererText() + textcell50 = gtk.CellRendererText() + textcell50.set_property('xalign', 0.5) + numcell = gtk.CellRendererText() + numcell.set_property('xalign', 1.0) + listcols = [] + + # Create header row eg column: ("game", True, "Game", 0.0, "%s") + for col, column in enumerate(cols_to_show): + s = column[colheading] + listcols.append(gtk.TreeViewColumn(s)) + view.append_column(listcols[col]) + if column[colformat] == '%s': + if column[colxalign] == 0.0: + listcols[col].pack_start(textcell, expand=True) + listcols[col].add_attribute(textcell, 'text', col) + else: + listcols[col].pack_start(textcell50, expand=True) + listcols[col].add_attribute(textcell50, 'text', col) + listcols[col].set_expand(True) + else: + listcols[col].pack_start(numcell, expand=True) + listcols[col].add_attribute(numcell, 'text', col) + listcols[col].set_expand(True) + + # Get a list of all handids and their timestampts + # FIXME: Will probably want to be able to filter this list eventually + # FIXME: Join on handsplayers for Hero to get other useful stuff like total profit? + q = """ +select UNIX_TIMESTAMP(h.handStart) as time, hp.handId, hp.startCash, hp.winnings, hp.totalProfit +from HandsPlayers hp + inner join Hands h on (h.id = hp.handId) + inner join Gametypes gt on (gt.Id = h.gameTypeId) + inner join Sites s on (s.Id = gt.siteId) + inner join Players p on (p.Id = hp.playerId) +where hp.playerId in (2) +order by time +""" + self.db.cursor.execute(q) THRESHOLD = 1800 hands = self.db.cursor.fetchall() + # Take that list and create an array of the time between hands times = map(lambda x:long(x[0]), hands) handids = map(lambda x:int(x[1]), hands) + winnings = map(lambda x:int(x[4]), hands) print "DEBUG: len(times) %s" %(len(times)) - diffs = diff(times) - print "DEBUG: len(diffs) %s" %(len(diffs)) - index = nonzero(diff(times) > THRESHOLD) - print "DEBUG: len(index[0]) %s" %(len(index[0])) - print "DEBUG: index %s" %(index) - print "DEBUG: index[0][0] %s" %(index[0][0]) + diffs = diff(times) # This array is the difference in starttime between consecutive hands + index = nonzero(diff(times) > THRESHOLD) # This array represents the indexes into 'times' for start/end times of sessions + # ie. times[index[0][0]] is the end of the first session + #print "DEBUG: len(index[0]) %s" %(len(index[0])) + #print "DEBUG: index %s" %(index) + #print "DEBUG: index[0][0] %s" %(index[0][0]) total = 0 - last_idx = 0 + lowidx = 0 + uppidx = 0 + results = [] + # Take all results and format them into a list for feeding into gui model. for i in range(len(index[0])): - print "Hands in session %4s: %4s Start: %s End: %s Total: %s" %(i, index[0][i] - last_idx, strftime("%d/%m/%Y %H:%M", localtime(times[last_idx])), strftime("%d/%m/%Y %H:%M", localtime(times[index[0][i]])), times[index[0][i]] - times[last_idx]) + sid = i # Session id + hds = index[0][i] - last_idx # Number of hands in session + stime = strftime("%d/%m/%Y %H:%M", localtime(times[last_idx])) # Formatted start time + etime = strftime("%d/%m/%Y %H:%M", localtime(times[index[0][i]])) # Formatted end time + hph = (times[index[0][i]] - times[last_idx])/60 # Hands per hour + won = sum(winnings[last_idx:index[0][i]]) + print "DEBUG: range: %s - %s" %(last_idx, index[0][i]) + + results.append([sid, hds, stime, etime, hph, won]) + print "Hands in session %4s: %4s Start: %s End: %s HPH: %s Profit: %s" %(sid, hds, stime, etime, hph, won) total = total + (index[0][i] - last_idx) last_idx = index[0][i] + 1 - print "Total: ", total -# -# colnames = [desc[0].lower() for desc in self.cursor.description] -# -# # pre-fetch some constant values: -# cols_to_show = [x for x in self.columns if x[colshow]] -# hgametypeid_idx = colnames.index('hgametypeid') -# -# liststore = gtk.ListStore(*([str] * len(cols_to_show))) -# view = gtk.TreeView(model=liststore) -# view.set_grid_lines(gtk.TREE_VIEW_GRID_LINES_BOTH) -# vbox.pack_start(view, expand=False, padding=3) -# textcell = gtk.CellRendererText() -# numcell = gtk.CellRendererText() -# numcell.set_property('xalign', 1.0) -# listcols = [] -# -# # Create header row eg column: ("game", True, "Game", 0.0, "%s") -# for col, column in enumerate(cols_to_show): -# if column[colalias] == 'game' and holecards: -# s = [x for x in self.columns if x[colalias] == 'hand'][0][colheading] -# else: -# s = column[colheading] -# listcols.append(gtk.TreeViewColumn(s)) -# view.append_column(listcols[col]) -# if column[colformat] == '%s': -# if col == 1 and holecards: -# listcols[col].pack_start(textcell, expand=True) -# else: -# listcols[col].pack_start(textcell, expand=False) -# listcols[col].add_attribute(textcell, 'text', col) -# else: -# listcols[col].pack_start(numcell, expand=False) -# listcols[col].add_attribute(numcell, 'text', col) -# -# rows = len(result) # +1 for title row -# -# while sqlrow < rows: -# treerow = [] -# if(row%2 == 0): -# bgcolor = "white" -# else: -# bgcolor = "lightgrey" -# for col,column in enumerate(cols_to_show): -# if column[colalias] in colnames: -# value = result[sqlrow][colnames.index(column[colalias])] -# else: -# if column[colalias] == 'game': -# if holecards: -# value = Card.twoStartCardString( result[sqlrow][hgametypeid_idx] ) -# else: -# minbb = result[sqlrow][colnames.index('minbigblind')] -# maxbb = result[sqlrow][colnames.index('maxbigblind')] -# value = result[sqlrow][colnames.index('limittype')] + ' ' \ -# + result[sqlrow][colnames.index('category')].title() + ' ' \ -# + result[sqlrow][colnames.index('name')] + ' $' -# if 100 * int(minbb/100.0) != minbb: -# value += '%.2f' % (minbb/100.0) -# else: -# value += '%.0f' % (minbb/100.0) -# if minbb != maxbb: -# if 100 * int(maxbb/100.0) != maxbb: -# value += ' - $' + '%.2f' % (maxbb/100.0) -# else: -# value += ' - $' + '%.0f' % (maxbb/100.0) -# else: -# continue -# if value and value != -999: -# treerow.append(column[colformat] % value) -# else: -# treerow.append(' ') -# iter = liststore.append(treerow) -# sqlrow += 1 -# row += 1 + for row in results: + iter = self.liststore.append(row) + vbox.show_all() + +def main(argv=None): + config = Configuration.Config() + i = GuiBulkImport(settings, config) + +if __name__ == '__main__': + sys.exit(main()) + diff --git a/pyfpdb/fpdb.py b/pyfpdb/fpdb.py index 18bc65d9..4f3210f4 100755 --- a/pyfpdb/fpdb.py +++ b/pyfpdb/fpdb.py @@ -155,12 +155,6 @@ class fpdb: def dia_database_stats(self, widget, data=None): self.warning_box("Unimplemented: Database Stats") - def dia_database_sessions(self, widget, data=None): - new_sessions_thread = GuiSessionViewer.GuiSessionViewer(self.config, self.sql) - self.threads.append(new_sessions_thread) - sessions_tab=new_sessions_thread.get_vbox() - self.add_and_display_tab(sessions_tab, "Sessions") - def dia_delete_db_parts(self, widget, data=None): self.warning_box("Unimplemented: Delete Database Parts") self.obtain_global_lock() @@ -368,6 +362,7 @@ class fpdb: + @@ -377,7 +372,6 @@ class fpdb: -

@@ -409,6 +403,7 @@ class fpdb: ('playerdetails', None, 'Player _Details (todo)', None, 'Player Details (todo)', self.not_implemented), ('playerstats', None, '_Player Stats (tabulated view)', 'P', 'Player Stats (tabulated view)', self.tab_player_stats), ('posnstats', None, 'P_ositional Stats (tabulated view)', 'O', 'Positional Stats (tabulated view)', self.tab_positional_stats), + ('sessionstats', None, 'Session Stats', None, 'Session Stats', self.tab_session_stats), ('sessionreplay', None, '_Session Replayer (todo)', None, 'Session Replayer (todo)', self.not_implemented), ('tableviewer', None, 'Poker_table Viewer (mostly obselete)', None, 'Poker_table Viewer (mostly obselete)', self.tab_table_viewer), ('database', None, '_Database'), @@ -417,7 +412,6 @@ class fpdb: ('createtabs', None, 'Create or Recreate _Tables', None, 'Create or Recreate Tables ', self.dia_recreate_tables), ('rebuildhudcache', None, 'Rebuild HUD Cache', None, 'Rebuild HUD Cache', self.dia_recreate_hudcache), ('stats', None, '_Statistics (todo)', None, 'View Database Statistics', self.dia_database_stats), - ('sessions', None, 'Sessions', None, 'View Sessions', self.dia_database_sessions), ('help', None, '_Help'), ('Abbrev', None, '_Abbrevations (todo)', None, 'List of Abbrevations', self.tab_abbreviations), ('About', None, 'A_bout', None, 'About the program', self.dia_about), @@ -554,6 +548,12 @@ class fpdb: ps_tab=new_ps_thread.get_vbox() self.add_and_display_tab(ps_tab, "Positional Stats") + def tab_session_stats(self, widget, data=None): + new_ps_thread = GuiSessionViewer.GuiSessionViewer(self.config, self.sql, self.window) + self.threads.append(new_ps_thread) + ps_tab=new_ps_thread.get_vbox() + self.add_and_display_tab(ps_tab, "Session Stats") + def tab_main_help(self, widget, data=None): """Displays a tab with the main fpdb help screen""" mh_tab=gtk.Label("""Welcome to Fpdb! From 89aa0fb726ab4a2cc79595444fe2896e17d79037 Mon Sep 17 00:00:00 2001 From: Mika Bostrom Date: Wed, 21 Oct 2009 16:42:34 +0300 Subject: [PATCH 6/8] Move other files to non-packaging --- {packaging/debian/files => files}/fpdb.desktop | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {packaging/debian/files => files}/fpdb.desktop (100%) diff --git a/packaging/debian/files/fpdb.desktop b/files/fpdb.desktop similarity index 100% rename from packaging/debian/files/fpdb.desktop rename to files/fpdb.desktop From b8f19741e0b7fb6258c6d788e45ba400590be494 Mon Sep 17 00:00:00 2001 From: Mika Bostrom Date: Wed, 21 Oct 2009 20:24:46 +0300 Subject: [PATCH 7/8] Fix packaging issues Affected files: * Configuration.py * Database.py * HandHistoryConverter.py * fpdb_import.py and setup.py to a lesser extent. Logging requires a configuration file when initialising the class. If we are executing from outside the source tree, this file is not present. Catch config parser's error and try to provide the logging config file from debian package path. Update symlink target to match python-support from latest Debian and the oncoming Ubuntu versions. --- packaging/debian/changelog | 6 ++++++ packaging/debian/links | 2 +- pyfpdb/Configuration.py | 8 +++++++- pyfpdb/Database.py | 8 +++++++- pyfpdb/HandHistoryConverter.py | 8 +++++++- pyfpdb/fpdb_import.py | 8 +++++++- setup.py | 11 +++++++++-- 7 files changed, 44 insertions(+), 7 deletions(-) diff --git a/packaging/debian/changelog b/packaging/debian/changelog index 84ecbce5..ce102bf5 100644 --- a/packaging/debian/changelog +++ b/packaging/debian/changelog @@ -1,3 +1,9 @@ +free-poker-tools (0.11.3+git20091023) unstable; urgency=low + + * Snapshot release + + -- Mika Bostrom Wed, 21 Oct 2009 16:47:12 +0300 + free-poker-tools (0.10.99) unstable; urgency=low * Initial packaging release. diff --git a/packaging/debian/links b/packaging/debian/links index 01d1c490..5a4601a7 100644 --- a/packaging/debian/links +++ b/packaging/debian/links @@ -1 +1 @@ -/usr/share/python-support/python-fpdb/fpdb/fpdb.py /usr/bin/fpdb +/usr/share/pyshared/fpdb/fpdb.py /usr/bin/fpdb diff --git a/pyfpdb/Configuration.py b/pyfpdb/Configuration.py index 924d6584..5dba6aac 100755 --- a/pyfpdb/Configuration.py +++ b/pyfpdb/Configuration.py @@ -35,7 +35,13 @@ import xml.dom.minidom from xml.dom.minidom import Node import logging, logging.config -logging.config.fileConfig(os.path.join(sys.path[0],"logging.conf")) +import ConfigParser + +try: # local path + logging.config.fileConfig(os.path.join(sys.path[0],"logging.conf")) +except ConfigParser.NoSectionError: # debian package path + logging.config.fileConfig('/usr/share/python-fpdb/logging.conf') + log = logging.getLogger("config") log.debug("config logger initialised") diff --git a/pyfpdb/Database.py b/pyfpdb/Database.py index 4a0f2e17..87b1cd52 100755 --- a/pyfpdb/Database.py +++ b/pyfpdb/Database.py @@ -46,7 +46,13 @@ import Tourney from Exceptions import * import logging, logging.config -logging.config.fileConfig(os.path.join(sys.path[0],"logging.conf")) +import ConfigParser + +try: # local path + logging.config.fileConfig(os.path.join(sys.path[0],"logging.conf")) +except ConfigParser.NoSectionError: # debian package path + logging.config.fileConfig('/usr/share/python-fpdb/logging.conf') + log = logging.getLogger('db') diff --git a/pyfpdb/HandHistoryConverter.py b/pyfpdb/HandHistoryConverter.py index e40694ea..0642d845 100644 --- a/pyfpdb/HandHistoryConverter.py +++ b/pyfpdb/HandHistoryConverter.py @@ -37,7 +37,13 @@ import gettext gettext.install('fpdb') import logging, logging.config -logging.config.fileConfig(os.path.join(sys.path[0],"logging.conf")) +import ConfigParser + +try: + logging.config.fileConfig(os.path.join(sys.path[0],"logging.conf")) +except ConfigParser.NoSectionError: # debian package path + logging.config.fileConfig('/usr/share/python-fpdb/logging.conf') + log = logging.getLogger("parser") import pygtk diff --git a/pyfpdb/fpdb_import.py b/pyfpdb/fpdb_import.py index 878b64b2..4d384372 100644 --- a/pyfpdb/fpdb_import.py +++ b/pyfpdb/fpdb_import.py @@ -43,7 +43,13 @@ import Configuration import Exceptions import logging, logging.config -logging.config.fileConfig(os.path.join(sys.path[0],"logging.conf")) +import ConfigParser + +try: + logging.config.fileConfig(os.path.join(sys.path[0],"logging.conf")) +except ConfigParser.NoSectionError: # debian package path + logging.config.fileConfig('/usr/share/python-fpdb/logging.conf') + log = logging.getLogger('importer') # database interface modules diff --git a/setup.py b/setup.py index 668693cf..737ad18e 100644 --- a/setup.py +++ b/setup.py @@ -5,7 +5,7 @@ from distutils.core import setup setup(name = 'fpdb', description = 'Free Poker Database', - version = '0.10.999', + version = '0.11.3', author = 'FPDB team', author_email = 'fpdb-main@lists.sourceforge.net', packages = ['fpdb'], @@ -13,5 +13,12 @@ setup(name = 'fpdb', data_files = [ ('/usr/share/doc/python-fpdb', ['docs/readme.txt', 'docs/release-notes.txt', - 'docs/tabledesign.html', 'THANKS.txt'])] + 'docs/tabledesign.html', 'THANKS.txt']), + ('/usr/share/pixmaps', + ['gfx/fpdb-icon.png']), + ('/usr/share/applications', + ['files/fpdb.desktop']), + ('/usr/share/python-fpdb', + ['pyfpdb/logging.conf']) + ] ) From 397f65478986cdb1c9ba551526d93fd57598334e Mon Sep 17 00:00:00 2001 From: Worros Date: Thu, 22 Oct 2009 14:09:36 +0800 Subject: [PATCH 8/8] GuiSession viewer update. Still broken, got the math right in preparation for candlestick graph --- pyfpdb/GuiSessionViewer.py | 74 ++++++++++++++++++++++++-------------- 1 file changed, 47 insertions(+), 27 deletions(-) diff --git a/pyfpdb/GuiSessionViewer.py b/pyfpdb/GuiSessionViewer.py index 96586263..76ad682b 100755 --- a/pyfpdb/GuiSessionViewer.py +++ b/pyfpdb/GuiSessionViewer.py @@ -23,7 +23,8 @@ import gtk import os from time import time, strftime, localtime try: - from numpy import diff, nonzero, sum + from numpy import diff, nonzero, sum, cumsum, max, mina + import matplotlib.finance # from matplotlib.dates import DateFormatter, WeekdayLocator, HourLocator, \ # DayLocator, MONDAY, timezone @@ -142,29 +143,6 @@ class GuiSessionViewer (threading.Thread): """returns the vbox of this thread""" return self.main_hbox - def generateGraph(self): - fig = figure() - fig.subplots_adjust(bottom=0.2) - ax = fig.add_subplot(111) - ax.xaxis.set_major_locator(mondays) - ax.xaxis.set_minor_locator(alldays) - ax.xaxis.set_major_formatter(weekFormatter) - #ax.xaxis.set_minor_formatter(dayFormatter) - #plot_day_summary(ax, quotes, ticksize=3) -# candlestick(ax, quotes, width=0.6) -# candlestick2(ax, opens, closes, highs, lows, width=4, colorup='k', colordown='r', alpha=0.75) -# Represent the open, close as a bar line and high low range as a vertical line. -# ax : an Axes instance to plot to -# width : the bar width in points -# colorup : the color of the lines where close >= open -# colordown : the color of the lines where close < open -# alpha : bar transparency -# return value is lineCollection, barCollection - ax.xaxis_date() - ax.autoscale_view() - setp( gca().get_xticklabels(), rotation=45, horizontalalignment='right') - - show() def refreshStats(self, widget, data): @@ -242,6 +220,31 @@ class GuiSessionViewer (threading.Thread): print "Stats page displayed in %4.2f seconds" % (time() - starttime) #end def fillStatsFrame(self, vbox): + def generateGraph(self, vbox, data): + fig = figure() + fig.subplots_adjust(bottom=0.2) + ax = fig.add_subplot(111) + ax.xaxis.set_major_locator(mondays) + ax.xaxis.set_minor_locator(alldays) + ax.xaxis.set_major_formatter(weekFormatter) + #ax.xaxis.set_minor_formatter(dayFormatter) + #plot_day_summary(ax, quotes, ticksize=3) +# candlestick(ax, quotes, width=0.6) +# candlestick2(ax, opens, closes, highs, lows, width=4, colorup='k', colordown='r', alpha=0.75) +# Represent the open, close as a bar line and high low range as a vertical line. +# ax : an Axes instance to plot to +# width : the bar width in points +# colorup : the color of the lines where close >= open +# colordown : the color of the lines where close < open +# alpha : bar transparency +# return value is lineCollection, barCollection + ax.xaxis_date() + ax.autoscale_view() + setp( gca().get_xticklabels(), rotation=45, horizontalalignment='right') + + show() + + def addTable(self, vbox, query, flags, playerids, sitenos, limits, seats): row = 0 sqlrow = 0 @@ -302,7 +305,7 @@ order by time # Take that list and create an array of the time between hands times = map(lambda x:long(x[0]), hands) handids = map(lambda x:int(x[1]), hands) - winnings = map(lambda x:int(x[4]), hands) + winnings = map(lambda x:float(x[4]), hands) print "DEBUG: len(times) %s" %(len(times)) diffs = diff(times) # This array is the difference in starttime between consecutive hands index = nonzero(diff(times) > THRESHOLD) # This array represents the indexes into 'times' for start/end times of sessions @@ -315,7 +318,13 @@ order by time last_idx = 0 lowidx = 0 uppidx = 0 + opens = [] + closes = [] + highs = [] + lows = [] results = [] + cum_sum = cumsum(winnings) + cum_sum = cum_sum/100 # Take all results and format them into a list for feeding into gui model. for i in range(len(index[0])): sid = i # Session id @@ -323,10 +332,16 @@ order by time stime = strftime("%d/%m/%Y %H:%M", localtime(times[last_idx])) # Formatted start time etime = strftime("%d/%m/%Y %H:%M", localtime(times[index[0][i]])) # Formatted end time hph = (times[index[0][i]] - times[last_idx])/60 # Hands per hour - won = sum(winnings[last_idx:index[0][i]]) - print "DEBUG: range: %s - %s" %(last_idx, index[0][i]) + won = sum(winnings[last_idx:index[0][i]])/100.0 + hwm = max(cum_sum[last_idx:index[0][i]]) + lwm = min(cum_sum[last_idx:index[0][i]]) + print "DEBUG: range: (%s, %s) - (min, max): (%s, %s)" %(last_idx, index[0][i], hwm, lwm) results.append([sid, hds, stime, etime, hph, won]) + opens.append((sum(winnings[:last_idx]))/100) + closes.append((sum(winnings[:index[0][i]]))/100) + highs.append(hwm) + lows.append(lwm) print "Hands in session %4s: %4s Start: %s End: %s HPH: %s Profit: %s" %(sid, hds, stime, etime, hph, won) total = total + (index[0][i] - last_idx) last_idx = index[0][i] + 1 @@ -334,6 +349,11 @@ order by time for row in results: iter = self.liststore.append(row) + print "DEBUG: highs = %s" % highs + print "DEBUG: lows = %s" % lows + print "DEBUG: opens = %s" % opens + print "DEBUG: closes = %s" % closes + vbox.show_all() def main(argv=None):