From b377fd08c6151d34cb8918999684d41d0486cb81 Mon Sep 17 00:00:00 2001 From: steffen123 Date: Mon, 4 Aug 2008 15:54:13 +0100 Subject: [PATCH] git6 - it displays (in brackets behind the percentage) how many hands AF/FF/AT/FT/AR/FR is based on commented out some prints split off a "before alpha release" section off the known-bugs list --- docs/known-bugs-and-planned-features.txt | 36 ++++++++++---------- pyfpdb/fpdb_simple.py | 42 +++++++++++++++++------- pyfpdb/table_viewer.py | 14 ++++---- 3 files changed, 56 insertions(+), 36 deletions(-) diff --git a/docs/known-bugs-and-planned-features.txt b/docs/known-bugs-and-planned-features.txt index cc61a721..d3519287 100644 --- a/docs/known-bugs-and-planned-features.txt +++ b/docs/known-bugs-and-planned-features.txt @@ -1,40 +1,40 @@ todolist (db=database, imp=importer, tv=tableviewer) -before beta +before alpha =========== add back postflop and stud functionality to hud and import-HudData -take into account count of opportunities for 3B/4B PF. -change save_to_db into one method and probably move into parse_logic +change action_no to be total for this street rather than just for one player +properly read 3B/4B percentage fix load profile -Any comment or print with "todo" in it in the sourcecode except what is marked todo in the menu -find out if i can SQL for the rowcount, rather than select a field and then just take the rowcount. this might bring a significant performance improvement -make a quick benchmark of mysql and postgresql: import of my whole db, some tableviewer refreshes with and without updated file fix tv browse button size tourney bug: sometimes truncuates position on store -> possibly indicates much bigger problem tourney bug: fails recognisePlayer tourney bug: fails with tuple error in recogniseplayerid -verify at least 2 or 3 sng hands 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) -db+imp+tv steal blind from btn, co, lmp. fold SB/BB/BI to steal -remove unused flags fields -update install instructions -setup wizard -change action_no to be total for this street rather than just for one player +config wizard catch index error, type error, file not found error -add field for if a game was mixed +update install instructions implement error file in importer +remove mysql/myisam support. + + +before beta +=========== +make bulk importer display a grand total in the GUI +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 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 -fold% also counts rounds where nobody raised handle errors properly, in particular wrt to SQL rollback. -remove mysql/myisam support. 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 ======================== @@ -42,13 +42,13 @@ 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 -convert fpdb_import to not require passing "self" +convert fpdb_import to not require passing "self", generally clean the parameter passing (tedious general stability improvement for unusual playernames): change all the str.find so they dont accidentially count player names containing the searched phrase. e.g. with rfind. 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 takes no more than 10 seks on my P3M-800 +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 select range of stakes and sng/mtt values and types for tv change "for i" to more sensible var name instead of i change stud street storage from 3-7 to 0-4 throughout diff --git a/pyfpdb/fpdb_simple.py b/pyfpdb/fpdb_simple.py index bfd21716..f8bf95eb 100644 --- a/pyfpdb/fpdb_simple.py +++ b/pyfpdb/fpdb_simple.py @@ -1208,6 +1208,7 @@ def store_hands_players_stud_tourney(cursor, hands_id, player_ids, start_cashes, def calculateHudImport(player_ids, category, action_types): """calculates data for the HUD during import. IMPORTANT: if you change this method make sure to also change the following storage method and table_viewer.prepare_data if necessary""" + #setup subarrays of the result dictionary. VPIP=[] PFR=[] PFOtherRaisedBefore=[] @@ -1226,6 +1227,7 @@ def calculateHudImport(player_ids, category, action_types): otherRaisedRiver=[] otherRaisedRiverFold=[] for player in range (len(player_ids)): + #set default values myVPIP=False myPFR=False myPFOtherRaisedBefore=False #todo @@ -1243,20 +1245,37 @@ def calculateHudImport(player_ids, category, action_types): myOtherRaisedTurnFold=False #todo myOtherRaisedRiver=False #todo myOtherRaisedRiverFold=False #todo - + + #calculate preflop values street=0 - pfRaiseCount=0 + heroPfRaiseCount=0 for count in range (len(action_types[street][player])):#finally individual actions currentAction=action_types[street][player][count] if currentAction!="bet": - pfRaiseCount+=1 + heroPfRaiseCount+=1 if (currentAction=="bet" or currentAction=="call"): myVPIP=True - if pfRaiseCount>=1: + if heroPfRaiseCount>=1: myPFR=True - if pfRaiseCount>=2:#todo: this doesnt catch all 3B4B + if heroPfRaiseCount>=2:#todo: this doesnt catch all 3B4B myPF3B4B=True + #calculate saw* values + if (len(action_types[1][player])>0): + mySawFlop=True + if (len(action_types[2][player])>0): + mySawTurn=True + if (len(action_types[3][player])>0): + mySawRiver=True + for count in range (len(action_types[3][player])): + if action_types[3][player][count]=="fold": + mySawShowdown=True + + #print "todo: finish boolean recognition" + + + + #add each value to the appropriate array VPIP.append(myVPIP) PFR.append(myPFR) PFOtherRaisedBefore.append(myPFOtherRaisedBefore) @@ -1274,7 +1293,8 @@ def calculateHudImport(player_ids, category, action_types): otherRaisedTurnFold.append(myOtherRaisedTurnFold) otherRaisedRiver.append(myOtherRaisedRiver) otherRaisedRiverFold.append(myOtherRaisedRiverFold) - + + #add each array to the to-be-returned dictionary result={'VPIP':VPIP} result['PFR']=PFR result['PFOtherRaisedBefore']=PFOtherRaisedBefore @@ -1300,14 +1320,14 @@ def storeHudData(cursor, category, gametypeId, playerIds, hudImportData): for player in range (len(playerIds)): cursor.execute("SELECT * FROM HudDataHoldemOmaha WHERE gametypeId=%s AND playerId=%s AND activeSeats=%s", (gametypeId, playerIds[player], len(playerIds))) row=cursor.fetchone() - print "gametypeId:", gametypeId, "playerIds[player]",playerIds[player], "len(playerIds):",len(playerIds), "row:",row + #print "gametypeId:", gametypeId, "playerIds[player]",playerIds[player], "len(playerIds):",len(playerIds), "row:",row try: len(row) except TypeError: row=[] if (len(row)==0): - print "new huddata row" + #print "new huddata row" doInsert=True row=[] row.append(0)#blank for id @@ -1344,18 +1364,18 @@ def storeHudData(cursor, category, gametypeId, playerIds, hudImportData): if hudImportData['otherRaisedRiverFold'][player]: row[21]+=1 if doInsert: - print "playerid before insert:",row[2] + #print "playerid before insert:",row[2] cursor.execute("""INSERT INTO HudDataHoldemOmaha (gametypeId, playerId, activeSeats, HDs, VPIP, PFR, PFOtherRaisedBefore, PF3B4B, sawFlop, sawTurn, sawRiver, sawShowdown, raisedFlop, raisedTurn, raisedRiver, otherRaisedFlop, otherRaisedFlopFold, otherRaisedTurn, otherRaisedTurnFold, otherRaisedRiver, otherRaisedRiverFold) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)""", (row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], row[19], row[20], row[21])) else: - print "storing updated hud data line" + #print "storing updated hud data line" cursor.execute("""UPDATE HudDataHoldemOmaha SET HDs=%s, VPIP=%s, PFR=%s, PFOtherRaisedBefore=%s, PF3B4B=%s, sawFlop=%s, sawTurn=%s, sawRiver=%s, sawShowdown=%s, raisedFlop=%s, raisedTurn=%s, raisedRiver=%s, otherRaisedFlop=%s, otherRaisedFlopFold=%s, otherRaisedTurn=%s, otherRaisedTurnFold=%s, otherRaisedRiver=%s, otherRaisedRiverFold=%s WHERE gametypeId=%s AND playerId=%s AND activeSeats=%s""", (row[4], row[5], row[6], row[7], row[8], row[9], row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], row[19], row[20], row[21], row[1], row[2], row[3])) else: raise FpdbError("todo") -#end def store_hands_players_flags(cursor, hands_players_ids, hands_players_flags) +#end def storeHudData def store_tourneys(cursor, site_id, site_tourney_no, buyin, fee, knockout, entries, prizepool, start_time): cursor.execute("SELECT id FROM tourneys WHERE site_tourney_no=%s AND site_id=%s", (site_tourney_no, site_id)) diff --git a/pyfpdb/table_viewer.py b/pyfpdb/table_viewer.py index e37a4d9d..7b94b5f3 100755 --- a/pyfpdb/table_viewer.py +++ b/pyfpdb/table_viewer.py @@ -77,13 +77,13 @@ class table_viewer (threading.Thread): tmp.append(str(row[4]))#Hands tmp.append(self.hudDivide(row[5],row[4])) #VPIP tmp.append(self.hudDivide(row[6],row[4])) #PFR - tmp.append(self.hudDivide(row[8],row[4])) #PF3B4B - tmp.append(self.hudDivide(row[13],row[9])) #AF - tmp.append(self.hudDivide(row[16],row[17])) #FF - tmp.append(self.hudDivide(row[14],row[10])) #AT - tmp.append(self.hudDivide(row[18],row[19])) #FT - tmp.append(self.hudDivide(row[15],row[11])) #AR - tmp.append(self.hudDivide(row[20],row[21])) #FR + tmp.append(self.hudDivide(row[8],row[7])) #PF3B4B + tmp.append(self.hudDivide(row[13],row[9])+" ("+str(row[9])+")") #AF + tmp.append(self.hudDivide(row[17],row[16])+" ("+str(row[16])+")") #FF + tmp.append(self.hudDivide(row[14],row[10])+" ("+str(row[10])+")") #AT + 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 arr.append(tmp) return arr