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
This commit is contained in:
steffen123 2008-08-07 11:08:50 +01:00
parent 39f5b9095c
commit 490af1acaf
5 changed files with 82 additions and 56 deletions

View File

@ -2,26 +2,27 @@ todolist (db=database, imp=importer, tv=tableviewer)
before alpha before alpha
============ ============
verify at least two PrintPlayerFlags (one of them with 10+ hands) verify PrintPlayerFlags for one player on at least 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
fix tv browse button size 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 catch index error, type error, file not found error
update install instructions, include how to adapt default config and where to put it 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 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 implement error file in importer
before beta 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 * in tv, select from hud table using named fields rather than the current *
remove remains of mysql/myisam support. remove remains of mysql/myisam support.
tourney bug: sometimes truncuates position on store -> possibly indicates much bigger problem 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 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 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 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. 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 use profile file for bulk import and table viewer settings and pathes
handle errors properly, in particular wrt to SQL rollback. handle errors properly, in particular wrt to SQL rollback.
check that we read sitout correctly in: Full Tilt Poker Game #6150325318: Table Bogside check that we read sitout correctly in: Full Tilt Poker Game #6150325318: Table Bogside
setup database, database-user and permission from GUI. setup database, database-user and permission from GUI.
update prepare-git to check for license header and copyright. 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 verify at least 2 or 3 sng hands
no rush but before 1.0RC no rush but before 1.0RC
======================== ========================
move version into seperate file move version into seperate file
make option to use "traditional" labels, e.g. WtSD instead of SD/F
HTMLify docs and validate them HTMLify docs and validate them
cut down action_types array size to appropriate length 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 make the gui display errors
log file log file
move directory import code from gui to backend 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. 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 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 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 select range of stakes and sng/mtt values and types for tv
change "for i" to more sensible var name instead of i 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 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 gentoo ebuild
separate all gui and all processing into files that are named accordingly 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. 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? why do we have to reconnect in tv.read_names_clicked?
HUD for PokerStars
HTMLify docs
can wait till 1.x 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 finish cleaning tabledesign html code
rearrange huddata fields rearrange huddata fields
It treats fold due to disconnect as voluntary fold which is not ideal It treats fold due to disconnect as voluntary fold which is not ideal
auto-import
check for unnecessary db.commit() check for unnecessary db.commit()
aliases aliases
Probably PartyPoker for all or most supported games Probably PartyPoker for all or most supported games

View File

@ -18,16 +18,16 @@ Fpdb fully supports NL/PL, however currently only as far as it does limit games.
Tournaments/SnGs Tournaments/SnGs
================ ================
Broken - used to work, hardly tested. Needs to be updated to new infrastructure.. Not sure when I'll fix this, volunteers welcome :) Broken - used to work, hardly tested. Needs to be updated to new infrastructure.. Will probably fix this quite soon.
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. 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 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 Other Sites
=========== ===========
Patches/Volunteers welcome. Patches/Volunteers welcome. Should be quite easy.
GUI GUI
=== ===

View File

@ -343,9 +343,9 @@ blabla""")
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.window.connect("delete_event", self.delete_event) self.window.connect("delete_event", self.delete_event)
self.window.connect("destroy", self.destroy) 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_border_width(1)
self.window.set_size_request(700,400) self.window.set_size_request(750,400)
self.window.set_resizable(True) self.window.set_resizable(True)
self.menu_items = ( self.menu_items = (

View File

@ -1230,21 +1230,21 @@ def calculateHudImport(player_ids, category, action_types):
#set default values #set default values
myVPIP=False myVPIP=False
myPFR=False myPFR=False
myPF3B4BChance=False #todo myPF3B4BChance=False
myPF3B4B=False myPF3B4B=False
mySawFlop=False #todo mySawFlop=False
mySawTurn=False #todo mySawTurn=False
mySawRiver=False #todo mySawRiver=False
mySawShowdown=False #todo mySawShowdown=False
myRaisedFlop=False #todo myRaisedFlop=False
myRaisedTurn=False #todo myRaisedTurn=False
myRaisedRiver=False #todo myRaisedRiver=False
myOtherRaisedFlop=False #todo myOtherRaisedFlop=False
myOtherRaisedFlopFold=False #todo myOtherRaisedFlopFold=False
myOtherRaisedTurn=False #todo myOtherRaisedTurn=False
myOtherRaisedTurnFold=False #todo myOtherRaisedTurnFold=False
myOtherRaisedRiver=False #todo myOtherRaisedRiver=False
myOtherRaisedRiverFold=False #todo myOtherRaisedRiverFold=False
#calculate preflop values #calculate preflop values
street=0 street=0
@ -1257,7 +1257,7 @@ def calculateHudImport(player_ids, category, action_types):
myVPIP=True myVPIP=True
if heroPfRaiseCount>=1: if heroPfRaiseCount>=1:
myPFR=True myPFR=True
if heroPfRaiseCount>=2:#todo: this doesnt catch all 3B4B if heroPfRaiseCount>=2:
myPF3B4B=True myPF3B4B=True
#calculate saw* values #calculate saw* values
@ -1267,9 +1267,10 @@ def calculateHudImport(player_ids, category, action_types):
mySawTurn=True mySawTurn=True
if (len(action_types[3][player])>0): if (len(action_types[3][player])>0):
mySawRiver=True mySawRiver=True
mySawShowdown=True
for count in range (len(action_types[3][player])): for count in range (len(action_types[3][player])):
if action_types[3][player][count]=="fold": if action_types[3][player][count]=="fold":
mySawShowdown=True mySawShowdown=False
#flop stuff #flop stuff
street=1 street=1
@ -1285,20 +1286,45 @@ def calculateHudImport(player_ids, category, action_types):
for countOther in range (len(action_types[street][otherPlayer])): for countOther in range (len(action_types[street][otherPlayer])):
if action_types[street][otherPlayer][countOther]=="bet": if action_types[street][otherPlayer][countOther]=="bet":
myOtherRaisedFlop=True myOtherRaisedFlop=True
for countOtherFold in range (len(action_types[street][otherPlayer])): for countOtherFold in range (len(action_types[street][player])):
if action_types[street][otherPlayer][countOtherFold]=="fold": if action_types[street][player][countOtherFold]=="fold":
myOtherRaisedFlopFold=True myOtherRaisedFlopFold=True
#turn stuff: todo #turn stuff - copy of flop with different vars
for count in range(len(action_types[2][player])): street=2
if action_types[2][player][count]=="bet": if mySawTurn:
myRaisedTurn=True for count in range(len(action_types[street][player])):
if action_types[street][player][count]=="bet":
myRaisedTurn=True
#river stuff: todo for otherPlayer in range (len(player_ids)):
for count in range(len(action_types[3][player])): if player==otherPlayer or myOtherRaisedTurn:
if action_types[3][player][count]=="bet": pass
myRaisedRiver=True 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
#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 #add each value to the appropriate array
VPIP.append(myVPIP) VPIP.append(myVPIP)

View File

@ -30,7 +30,6 @@ class table_viewer (threading.Thread):
return "n/a" return "n/a"
else: else:
return str(int((a/float(b))*100))+"%" return str(int((a/float(b))*100))+"%"
return "todo"
#end def hudDivide #end def hudDivide
def browse_clicked(self, widget, data): def browse_clicked(self, widget, data):
@ -60,10 +59,10 @@ class table_viewer (threading.Thread):
arr=[] arr=[]
#first prepare the header row #first prepare the header row
if (self.category=="holdem" or self.category=="omahahi" or self.category=="omahahilo"): 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: else:
raise fpdb_simple.FpdbError("todo reimplement stud") raise fpdb_simple.FpdbError("reimplement stud")
tmp=("Name", "Hands", "VPI3", "A3", "3B4B_3" "A4", "F4", "A5", "F5", "A6", "F6", "A7", "F7") tmp=("Name", "Hands", "VPI3", "A3", "3B4B_3" "A4", "F4", "A5", "F5", "A6", "F6", "A7", "F7", "SD/4")
arr.append(tmp) arr.append(tmp)
#then the data rows #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[19],row[18])+" ("+str(row[18])+")") #FT
tmp.append(self.hudDivide(row[15],row[11])+" ("+str(row[11])+")") #AR 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[21],row[20])+" ("+str(row[20])+")") #FR
tmp.append(self.hudDivide(row[12],row[9])+" ("+str(row[9])+")") #SD/F
arr.append(tmp) arr.append(tmp)
return arr return arr