From 490af1acafef41dec205341bd885ed6c592158cb Mon Sep 17 00:00:00 2001 From: steffen123 Date: Thu, 7 Aug 2008 11:08:50 +0100 Subject: [PATCH] git15 - fixed bug that it read sawShowdown wrong. fixed postflop fold importing. fairly certain importer is running correctly now :) also added SD/F, the percentage of the time the user saw the showdown when they saw the flop. I believe this is normally called WtSD, but this is clearer. widened main GUI a bit more the todolist is still growing hehe --- docs/known-bugs-and-planned-features.txt | 38 +++++------ docs/status.txt | 8 +-- pyfpdb/fpdb.py | 4 +- pyfpdb/fpdb_simple.py | 80 ++++++++++++++++-------- pyfpdb/table_viewer.py | 8 +-- 5 files changed, 82 insertions(+), 56 deletions(-) diff --git a/docs/known-bugs-and-planned-features.txt b/docs/known-bugs-and-planned-features.txt index 0e3b56c5..376f1591 100644 --- a/docs/known-bugs-and-planned-features.txt +++ b/docs/known-bugs-and-planned-features.txt @@ -2,26 +2,27 @@ todolist (db=database, imp=importer, tv=tableviewer) before alpha ============ -verify at least two PrintPlayerFlags (one of them with 10+ hands) -fix fold % in tv -optionally show single postflop agg/fold rate - -colour in tv, or at least seperation lines -add stud functionality back to imp/tv -db+imp+tv WtSD (went to showdown) -db+imp+tv W$SD (won $ when seeing showdown - partial win counts partially here) -db+imp+tv WwSF (Won when seen flop - partial taken into account) -change action_no to be total for this street rather than just for one player - -properly read 3B/4B percentage +verify PrintPlayerFlags for one player on at least 10 hands fix tv browse button size +optionally show single postflop agg/fold rate +seperation lines for tv +fix default pathes up to sensible ones catch index error, type error, file not found error update install instructions, include how to adapt default config and where to put it split python requirements, get deep links for windows DL for everything +license info + +db+imp+tv W$SD (won $ when seeing showdown - partial win counts partially here) +db+imp+tv WwSF (Won when seen flop - partial taken into account) +change action_no to be total for this street rather than just for one player. change .expected.txt files accordingly. +calculate 3B/4B percentage (depends on above, currently its useless) +auto-import implement error file in importer before beta =========== +change to use different colours according to classification. +add stud, razz and tourney back to imp/tv but with less seperate codepathes in tv, select from hud table using named fields rather than the current * remove remains of mysql/myisam support. tourney bug: sometimes truncuates position on store -> possibly indicates much bigger problem @@ -37,21 +38,21 @@ change save_to_db into one method and probably move into parse_logic Any comment or print with "todo" in it in the sourcecode except what is marked todo in the menu make a quick benchmark of mysql and postgresql: import of my whole db, some tableviewer refreshes with and without updated file db+imp+tv steal blind from btn, co, lmp. fold SB/BB/BI to steal +db+imp+tv cb/2nd/3rd barrel, fold to them. Make tab and enter work as sensible in GUIs and implement Ctrl+Q, Ctrl+X and Alt+F4 for close. use profile file for bulk import and table viewer settings and pathes handle errors properly, in particular wrt to SQL rollback. check that we read sitout correctly in: Full Tilt Poker Game #6150325318: Table Bogside setup database, database-user and permission from GUI. update prepare-git to check for license header and copyright. -change/expand print_hand to cover everything new and update verified hands' .found file verify at least 2 or 3 sng hands no rush but before 1.0RC ======================== move version into seperate file +make option to use "traditional" labels, e.g. WtSD instead of SD/F HTMLify docs and validate them cut down action_types array size to appropriate length -make tv work with ftp e.g. by making importer return site as well (easy) make the gui display errors log file move directory import code from gui to backend @@ -61,24 +62,23 @@ Doesn't handle Daylight Saving Time (I don't think at least) Need to store if someone goes all-in, particularly for better NL/PL support. verify at least 3 hands per category per site per limit_type (when cap then do 2 normal and one 1 capped) incl tv display put lines in tv to make it easier to read -speed up so that refresh after importing my whole DB takes no more than 10 seks on my P3M-800 (a quick run on git5+ indicates this is ok now), or 5 with remote DB +ensure that refresh still takes no more than 10 seks on my P3M-800 (a quick run on git15 indicates this is ok now), or 5 with remote DB select range of stakes and sng/mtt values and types for tv change "for i" to more sensible var name instead of i -in all importer: stop doing if site=="ftp", make class constants for site_id instead recognise somewhere if a file is still active and if so keep it open and only read new hands rather than detecting dupes gentoo ebuild separate all gui and all processing into files that are named accordingly ensure that there is only one db handle flying around and that its state is handled properly, ie. by the GUI. i think that might be why we have to reconnect the DB in tableviewer. why do we have to reconnect in tv.read_names_clicked? -HUD for PokerStars -HTMLify docs can wait till 1.x ================= +positional stats in HUD +return full ftp functionality +in all importer: stop doing if site=="ftp", make class constants for site_id instead finish cleaning tabledesign html code rearrange huddata fields It treats fold due to disconnect as voluntary fold which is not ideal -auto-import check for unnecessary db.commit() aliases Probably PartyPoker for all or most supported games diff --git a/docs/status.txt b/docs/status.txt index 1a27c912..0de3ba43 100644 --- a/docs/status.txt +++ b/docs/status.txt @@ -18,16 +18,16 @@ Fpdb fully supports NL/PL, however currently only as far as it does limit games. Tournaments/SnGs ================ -Broken - used to work, hardly tested. Needs to be updated to new infrastructure.. Not sure when I'll fix this, volunteers welcome :) -Independent of the current broken state at the moment tourney support would only show information as if a tourney is a ring game - but it's not. If you play tournaments and would like to help improving this let me know, I probably won't bother. +Broken - used to work, hardly tested. Needs to be updated to new infrastructure.. Will probably fix this quite soon. +Independent of the current brokenness the tourney support would only show information as if a tourney is a ring game - but it's not. If you play tournaments and would like to help improving this let me know, I probably won't bother. Full Tilt Poker =============== -Not sure - it should import them, but I believe the table viewer won't work. Should only take minutes to fix this so I'll probably do it soon. +Not sure - it should import them, but I believe the table viewer won't work. Would be easy to fix though, volunteers welcome Other Sites =========== -Patches/Volunteers welcome. +Patches/Volunteers welcome. Should be quite easy. GUI === diff --git a/pyfpdb/fpdb.py b/pyfpdb/fpdb.py index 5b30882c..a472368a 100755 --- a/pyfpdb/fpdb.py +++ b/pyfpdb/fpdb.py @@ -343,9 +343,9 @@ blabla""") self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) self.window.connect("delete_event", self.delete_event) self.window.connect("destroy", self.destroy) - self.window.set_title("Free Poker DB - version: pre-alpha, git14") + self.window.set_title("Free Poker DB - version: pre-alpha, git15") self.window.set_border_width(1) - self.window.set_size_request(700,400) + self.window.set_size_request(750,400) self.window.set_resizable(True) self.menu_items = ( diff --git a/pyfpdb/fpdb_simple.py b/pyfpdb/fpdb_simple.py index 1b04c9ea..4249c86f 100644 --- a/pyfpdb/fpdb_simple.py +++ b/pyfpdb/fpdb_simple.py @@ -1230,21 +1230,21 @@ def calculateHudImport(player_ids, category, action_types): #set default values myVPIP=False myPFR=False - myPF3B4BChance=False #todo + myPF3B4BChance=False myPF3B4B=False - mySawFlop=False #todo - mySawTurn=False #todo - mySawRiver=False #todo - mySawShowdown=False #todo - myRaisedFlop=False #todo - myRaisedTurn=False #todo - myRaisedRiver=False #todo - myOtherRaisedFlop=False #todo - myOtherRaisedFlopFold=False #todo - myOtherRaisedTurn=False #todo - myOtherRaisedTurnFold=False #todo - myOtherRaisedRiver=False #todo - myOtherRaisedRiverFold=False #todo + mySawFlop=False + mySawTurn=False + mySawRiver=False + mySawShowdown=False + myRaisedFlop=False + myRaisedTurn=False + myRaisedRiver=False + myOtherRaisedFlop=False + myOtherRaisedFlopFold=False + myOtherRaisedTurn=False + myOtherRaisedTurnFold=False + myOtherRaisedRiver=False + myOtherRaisedRiverFold=False #calculate preflop values street=0 @@ -1257,7 +1257,7 @@ def calculateHudImport(player_ids, category, action_types): myVPIP=True if heroPfRaiseCount>=1: myPFR=True - if heroPfRaiseCount>=2:#todo: this doesnt catch all 3B4B + if heroPfRaiseCount>=2: myPF3B4B=True #calculate saw* values @@ -1267,9 +1267,10 @@ def calculateHudImport(player_ids, category, action_types): mySawTurn=True if (len(action_types[3][player])>0): mySawRiver=True + mySawShowdown=True for count in range (len(action_types[3][player])): if action_types[3][player][count]=="fold": - mySawShowdown=True + mySawShowdown=False #flop stuff street=1 @@ -1285,21 +1286,46 @@ def calculateHudImport(player_ids, category, action_types): for countOther in range (len(action_types[street][otherPlayer])): if action_types[street][otherPlayer][countOther]=="bet": myOtherRaisedFlop=True - for countOtherFold in range (len(action_types[street][otherPlayer])): - if action_types[street][otherPlayer][countOtherFold]=="fold": + for countOtherFold in range (len(action_types[street][player])): + if action_types[street][player][countOtherFold]=="fold": myOtherRaisedFlopFold=True - #turn stuff: todo - for count in range(len(action_types[2][player])): - if action_types[2][player][count]=="bet": - myRaisedTurn=True + #turn stuff - copy of flop with different vars + street=2 + if mySawTurn: + for count in range(len(action_types[street][player])): + if action_types[street][player][count]=="bet": + myRaisedTurn=True + + for otherPlayer in range (len(player_ids)): + if player==otherPlayer or myOtherRaisedTurn: + pass + else: + for countOther in range (len(action_types[street][otherPlayer])): + if action_types[street][otherPlayer][countOther]=="bet": + myOtherRaisedTurn=True + for countOtherFold in range (len(action_types[street][player])): + if action_types[street][player][countOtherFold]=="fold": + myOtherRaisedTurnFold=True - #river stuff: todo - for count in range(len(action_types[3][player])): - if action_types[3][player][count]=="bet": - myRaisedRiver=True + #turn stuff - copy of flop with different vars + street=3 + if mySawRiver: + for count in range(len(action_types[street][player])): + if action_types[street][player][count]=="bet": + myRaisedRiver=True + + for otherPlayer in range (len(player_ids)): + if player==otherPlayer or myOtherRaisedRiver: + pass + else: + for countOther in range (len(action_types[street][otherPlayer])): + if action_types[street][otherPlayer][countOther]=="bet": + myOtherRaisedRiver=True + for countOtherFold in range (len(action_types[street][player])): + if action_types[street][player][countOtherFold]=="fold": + myOtherRaisedRiverFold=True - #add each value to the appropriate array VPIP.append(myVPIP) PFR.append(myPFR) diff --git a/pyfpdb/table_viewer.py b/pyfpdb/table_viewer.py index 58280909..7065cafd 100755 --- a/pyfpdb/table_viewer.py +++ b/pyfpdb/table_viewer.py @@ -30,7 +30,6 @@ class table_viewer (threading.Thread): return "n/a" else: return str(int((a/float(b))*100))+"%" - return "todo" #end def hudDivide def browse_clicked(self, widget, data): @@ -60,10 +59,10 @@ class table_viewer (threading.Thread): arr=[] #first prepare the header row if (self.category=="holdem" or self.category=="omahahi" or self.category=="omahahilo"): - tmp=("Name", "Hands", "VPIP", "PFR", "PF3B4B", "AF", "FF", "AT", "FT", "AR", "FR") + tmp=("Name", "Hands", "VPIP", "PFR", "PF3B4B", "AF", "FF", "AT", "FT", "AR", "FR", "SD/F") else: - raise fpdb_simple.FpdbError("todo reimplement stud") - tmp=("Name", "Hands", "VPI3", "A3", "3B4B_3" "A4", "F4", "A5", "F5", "A6", "F6", "A7", "F7") + raise fpdb_simple.FpdbError("reimplement stud") + tmp=("Name", "Hands", "VPI3", "A3", "3B4B_3" "A4", "F4", "A5", "F5", "A6", "F6", "A7", "F7", "SD/4") arr.append(tmp) #then the data rows @@ -112,6 +111,7 @@ class table_viewer (threading.Thread): tmp.append(self.hudDivide(row[19],row[18])+" ("+str(row[18])+")") #FT tmp.append(self.hudDivide(row[15],row[11])+" ("+str(row[11])+")") #AR tmp.append(self.hudDivide(row[21],row[20])+" ("+str(row[20])+")") #FR + tmp.append(self.hudDivide(row[12],row[9])+" ("+str(row[9])+")") #SD/F arr.append(tmp) return arr