Merge git://trac-git.assembla.com/fpdb
Conflicts: pyfpdb/Database.py --fixed conflict = we both fixed same problem differnt ways
This commit is contained in:
commit
90a0e4103f
|
@ -1,97 +1,17 @@
|
||||||
Everything is subject to change and the order does not indicate priority. Patches for any of these or other features are very welcome, see readme-overview.txt for contacts.
|
Everything is subject to change and the order does not indicate priority. Patches for any of these or other features are very welcome, see readme-overview.txt for contacts.
|
||||||
Please also see db-todo.txt
|
Please also see db-todo.txt
|
||||||
|
|
||||||
alpha5 (release 25Sep-2Oct)
|
|
||||||
======
|
|
||||||
pgsql recreate doesnt work, and it may not store version field on creation if using sql file with pgadmin.
|
|
||||||
check we're reading mucked cards from PS
|
|
||||||
ebuild: support pgsql
|
|
||||||
fix HUD config location and update release script accordingly
|
|
||||||
|
|
||||||
(michael) update website for windows installer
|
|
||||||
(steffen) update install-in-gentoo on website
|
|
||||||
(steffen) update ebuild and ubuntu guide for HUD_config.xml
|
|
||||||
|
|
||||||
(steffen) store raw hand in db and write reimport function using the raw hand field
|
|
||||||
make sure totalProfit shows actual profit rather than winnings.
|
|
||||||
update abbreviations.txt
|
|
||||||
export settings[hud-defaultInterval] to conf
|
|
||||||
fill check-/call-raise cache fields
|
|
||||||
|
|
||||||
printhand each and the 2/3 relevant printplayerflags respectively on ps-lhe-ring-successful-steal-by-cutoff.txt and ps-lhe-ring-call-3B-preflop-cb-no2b.txt
|
|
||||||
change to savannah?
|
|
||||||
implement steal and positions in stud
|
|
||||||
anonymiser script to generate testdata without making a dozen find&replace all... remember to replace hand no with running no
|
|
||||||
separate db table design version and last bugfix in importer
|
|
||||||
change tabledesign VALIGN and add link to webpage
|
|
||||||
finish updating filelist
|
|
||||||
finish todos in git instructions
|
|
||||||
debian/ubuntu package http://www.debian.org/doc/maint-guide/ch-start.en.html
|
|
||||||
howto remote DB
|
|
||||||
move all user docs to webpage
|
|
||||||
(steffen) contributor list on webpage
|
|
||||||
finish bringing back tourney
|
|
||||||
No river stats for stud games?
|
|
||||||
hole/board cards are not correctly stored in the db for stud games
|
|
||||||
HORSE (and presumably other mixed games) hand history files not handled correctly
|
|
||||||
Some MTTs won't import (rebuys??)
|
|
||||||
Many STTs won't import
|
|
||||||
|
|
||||||
before beta
|
before beta
|
||||||
===========
|
===========
|
||||||
Import draw (maybe without HudCache for a start)
|
change to savannah?
|
||||||
graphs for SD/F, W$wSF, W$@SD
|
|
||||||
validate webpage
|
|
||||||
make linux use /etc/fpdb for config first, then ~/.fpdb.
|
|
||||||
FTP file with only one partial hand causes error
|
|
||||||
No Full Tilt support in HUD
|
|
||||||
HUD stat windows are too big on Windows
|
|
||||||
HUD task bar entries on Windows won't go away
|
|
||||||
MTT/STT not tested in HUD
|
|
||||||
HUD stats not aggregated
|
|
||||||
Player names with non-Latin chars throw warnings in HUD
|
|
||||||
HUD doesn't start when fpdb is started from the Windows "Start Menu"
|
|
||||||
Exiting HUD on Windows doesn't properly clean up stat windows
|
|
||||||
|
|
||||||
ebuild: USE gtk, set permissions in it, copy docs to correct place, use games eclass or whatever to get games group notice, git-ebuild, get it into sunrise
|
|
||||||
make hud display W$SD etc as fraction.
|
|
||||||
add dedicated update page
|
|
||||||
update status or make a support matrix table for website
|
|
||||||
move version into seperate file for fpdb gui and db
|
|
||||||
SD/F, W$wsF, W$@SD too low as reported by daedal in 2+2 forum on 12/13aug
|
|
||||||
create little test script for people to run to verify successful installation of pydeps
|
|
||||||
split hud data generation into separate for loops and make it more efficient
|
|
||||||
fix bug that sawFlop/Turn/River/CBChance/etc gets miscalculated if someone is allin - might as well add all-in recognition for this
|
|
||||||
make 3 default HUD configs (easy (4-5 fields), advanced (10ish fields), crazy (20 or so))
|
|
||||||
make it work with postgres
|
|
||||||
expand instructions for profile file
|
|
||||||
maybe remove siteId from gametypes
|
|
||||||
?change most cache fields to bigint to allow extremely big databases in excess of 2 or 4 million hands per stake and position?
|
|
||||||
rakeback/frequent player points
|
|
||||||
skins
|
|
||||||
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?
|
|
||||||
implement error file in importer
|
|
||||||
catch index error, type error, file not found error
|
|
||||||
HUD: use different colours according to classification.
|
|
||||||
|
|
||||||
move prepare-git.sh and create-release.sh to utils
|
|
||||||
offer not storing db password
|
|
||||||
change definition of bet to exclude bring in
|
|
||||||
fix GUI's load profile
|
|
||||||
config wizard
|
|
||||||
file permission script, use games group
|
|
||||||
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
|
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
|
||||||
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.
|
|
||||||
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.
|
|
||||||
update prepare-git to check for license header and copyright.
|
|
||||||
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
|
||||||
|
@ -115,7 +35,6 @@ can wait till 1.x
|
||||||
=================
|
=================
|
||||||
in all importer: stop doing if site=="ftp", make class constants for site_id instead
|
in all importer: stop doing if site=="ftp", make class constants for site_id instead
|
||||||
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
|
||||||
check for unnecessary db.commit()
|
|
||||||
aliases
|
aliases
|
||||||
repair hands where the seat lines are missing, happens when observing at FTP
|
repair hands where the seat lines are missing, happens when observing at FTP
|
||||||
flags for storing the reason for winning (best hi, tie for best low, etc.) to DB. not sure actually if this is such a good idea remember that there can be multiple reasons for the same player in the same hand
|
flags for storing the reason for winning (best hi, tie for best low, etc.) to DB. not sure actually if this is such a good idea remember that there can be multiple reasons for the same player in the same hand
|
||||||
|
|
|
@ -747,6 +747,11 @@ The program itself is licensed under AGPLv3, see agpl-3.0.txt</p>
|
||||||
<TD><P>Bet stands for bring in, complete, bet, double bet, raise and double raise, since they all - technically - do the same thing. Unbet is used for when an uncalled bet is returned, this will have a negative value for amount.</P>
|
<TD><P>Bet stands for bring in, complete, bet, double bet, raise and double raise, since they all - technically - do the same thing. Unbet is used for when an uncalled bet is returned, this will have a negative value for amount.</P>
|
||||||
<P>Other valid values: blind call check fold</P></TD>
|
<P>Other valid values: blind call check fold</P></TD>
|
||||||
</TR>
|
</TR>
|
||||||
|
<TR VALIGN=TOP>
|
||||||
|
<TD><P>allIn</P></TD>
|
||||||
|
<TD><P>boolean</P></TD>
|
||||||
|
<TD><P>Whether the player went all-in on this action</P></TD>
|
||||||
|
</TR>
|
||||||
<TR VALIGN=TOP>
|
<TR VALIGN=TOP>
|
||||||
<TD><P>amount</P></TD>
|
<TD><P>amount</P></TD>
|
||||||
<TD><P>int</P></TD>
|
<TD><P>int</P></TD>
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
# Copyright 1999-2008 Gentoo Foundation
|
# Copyright 1999-2008 Gentoo Foundation
|
||||||
|
# Gentoo had nothing to do with the production of this ebuild, but I'm pre-emptively transferring all copyrights (as far as legally possible under my local jurisdiction) to them.
|
||||||
# Distributed under the terms of the GNU General Public License v2
|
# Distributed under the terms of the GNU General Public License v2
|
||||||
# $Header: /var/cvsroot/gentoo-x86/games-util/fpdb/fpdb-1.0_alpha2_p68.ebuild,v 1.0 2008/08/31 23:00:00 steffen@sycamoretest.info Exp $
|
# $Header: /var/cvsroot/gentoo-x86/games-util/fpdb/fpdb-1.0_alpha5_p110.ebuild,v 1.0 2008/09/26 steffen@sycamoretest.info Exp $
|
||||||
|
|
||||||
NEED_PYTHON=2.3
|
NEED_PYTHON=2.3
|
||||||
|
|
||||||
|
@ -10,7 +11,6 @@ MY_P="fpdb-${PV}"
|
||||||
DESCRIPTION="A database program to track your online poker games"
|
DESCRIPTION="A database program to track your online poker games"
|
||||||
HOMEPAGE="https://sourceforge.net/projects/fpdb/"
|
HOMEPAGE="https://sourceforge.net/projects/fpdb/"
|
||||||
SRC_URI="mirror://sourceforge/fpdb/${MY_P}.tar.bz2"
|
SRC_URI="mirror://sourceforge/fpdb/${MY_P}.tar.bz2"
|
||||||
#SRC_URI="mirror://sourceforge/fpdb/fpdb-1.0_alpha3-p80.tar.bz2"
|
|
||||||
|
|
||||||
LICENSE="AGPL-3"
|
LICENSE="AGPL-3"
|
||||||
SLOT="0"
|
SLOT="0"
|
||||||
|
@ -21,7 +21,10 @@ IUSE=""
|
||||||
RDEPEND="virtual/mysql
|
RDEPEND="virtual/mysql
|
||||||
dev-python/mysql-python
|
dev-python/mysql-python
|
||||||
>=x11-libs/gtk+-2.10
|
>=x11-libs/gtk+-2.10
|
||||||
dev-python/pygtk"
|
dev-python/pygtk
|
||||||
|
dev-python/numpy
|
||||||
|
dev-python/matplotlib"
|
||||||
|
|
||||||
DEPEND="${RDEPEND}"
|
DEPEND="${RDEPEND}"
|
||||||
|
|
||||||
src_install() {
|
src_install() {
|
0
pyfpdb/Configuration.py
Normal file → Executable file
0
pyfpdb/Configuration.py
Normal file → Executable file
|
@ -29,7 +29,8 @@ try:
|
||||||
from numpy import arange, cumsum
|
from numpy import arange, cumsum
|
||||||
from pylab import *
|
from pylab import *
|
||||||
except:
|
except:
|
||||||
print "Failed to load libs for graphing, graphing will not function. Please install numpy and matplotlib."
|
print "Failed to load libs for graphing, graphing will not function. Please install numpy and matplotlib if you want to use graphs."
|
||||||
|
print "This is of no consequence for other parts of the program, e.g. import and HUD are NOT affected by this problem."
|
||||||
|
|
||||||
import fpdb_import
|
import fpdb_import
|
||||||
import fpdb_db
|
import fpdb_db
|
||||||
|
|
|
@ -20,6 +20,7 @@ import pygtk
|
||||||
pygtk.require('2.0')
|
pygtk.require('2.0')
|
||||||
import gtk
|
import gtk
|
||||||
import os
|
import os
|
||||||
|
import fpdb_simple
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import MySQLdb
|
import MySQLdb
|
||||||
|
|
|
@ -38,7 +38,7 @@ import os
|
||||||
import thread
|
import thread
|
||||||
import Queue
|
import Queue
|
||||||
|
|
||||||
errorfile = open('HUD-error.txt', 'w')
|
errorfile = open('HUD-error.txt', 'w', 0)
|
||||||
sys.stderr = errorfile
|
sys.stderr = errorfile
|
||||||
|
|
||||||
# pyGTK modules
|
# pyGTK modules
|
||||||
|
|
|
@ -18,8 +18,9 @@
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
errorfile = open('fpdb-error.log', 'w')
|
print "Note: error output is being diverted to fpdb-error-log.txt and HUD-error.txt. Any major error will be reported there _only_."
|
||||||
sys.stderr = errorfile
|
errorFile = open('fpdb-error-log.txt', 'w', 0)
|
||||||
|
sys.stderr = errorFile
|
||||||
|
|
||||||
import pygtk
|
import pygtk
|
||||||
pygtk.require('2.0')
|
pygtk.require('2.0')
|
||||||
|
@ -346,11 +347,11 @@ class fpdb:
|
||||||
#end def load_profile
|
#end def load_profile
|
||||||
|
|
||||||
def not_implemented(self):
|
def not_implemented(self):
|
||||||
print "todo: called unimplemented menu entry"#remove this once more entries are implemented
|
print "todo: called unimplemented menu entry (users: pls ignore this)"#remove this once more entries are implemented
|
||||||
#end def not_implemented
|
#end def not_implemented
|
||||||
|
|
||||||
def obtain_global_lock(self):
|
def obtain_global_lock(self):
|
||||||
print "todo: implement obtain_global_lock"
|
print "todo: implement obtain_global_lock (users: pls ignore this)"
|
||||||
#end def obtain_global_lock
|
#end def obtain_global_lock
|
||||||
|
|
||||||
def quit(self, widget, data):
|
def quit(self, widget, data):
|
||||||
|
@ -420,7 +421,7 @@ This program is licensed under the AGPL3, see docs"""+os.sep+"agpl-3.0.txt")
|
||||||
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: alpha4+, p102 or higher")
|
self.window.set_title("Free Poker DB - version: alpha6+, p118 or higher")
|
||||||
self.window.set_border_width(1)
|
self.window.set_border_width(1)
|
||||||
self.window.set_size_request(1020,400)
|
self.window.set_size_request(1020,400)
|
||||||
self.window.set_resizable(True)
|
self.window.set_resizable(True)
|
||||||
|
@ -444,7 +445,7 @@ This program is licensed under the AGPL3, see docs"""+os.sep+"agpl-3.0.txt")
|
||||||
("/Viewers/_Player Stats (tabulated view) (todo)", None, self.not_implemented, 0, None ),
|
("/Viewers/_Player Stats (tabulated view) (todo)", None, self.not_implemented, 0, None ),
|
||||||
("/Viewers/Starting _Hands (todo)", None, self.not_implemented, 0, None ),
|
("/Viewers/Starting _Hands (todo)", None, self.not_implemented, 0, None ),
|
||||||
("/Viewers/_Session Replayer (todo)", None, self.not_implemented, 0, None ),
|
("/Viewers/_Session Replayer (todo)", None, self.not_implemented, 0, None ),
|
||||||
("/Viewers/Poker_table Viewer", "<control>T", self.tab_table_viewer, 0, None ),
|
("/Viewers/Poker_table Viewer (obselete)", "<control>T", self.tab_table_viewer, 0, None ),
|
||||||
#( "/Viewers/Tourney Replayer
|
#( "/Viewers/Tourney Replayer
|
||||||
( "/_Database", None, None, 0, "<Branch>" ),
|
( "/_Database", None, None, 0, "<Branch>" ),
|
||||||
( "/Database/Create or Delete _Database (todo)", None, self.dia_create_del_database, 0, None ),
|
( "/Database/Create or Delete _Database (todo)", None, self.dia_create_del_database, 0, None ),
|
||||||
|
|
|
@ -48,7 +48,7 @@ class fpdb_db:
|
||||||
try:
|
try:
|
||||||
self.cursor.execute("SELECT * FROM Settings")
|
self.cursor.execute("SELECT * FROM Settings")
|
||||||
settings=self.cursor.fetchone()
|
settings=self.cursor.fetchone()
|
||||||
if settings[0]!=76:
|
if settings[0]!=118:
|
||||||
print "outdated or too new database version - please recreate tables"
|
print "outdated or too new database version - please recreate tables"
|
||||||
self.wrongDbVersion=True
|
self.wrongDbVersion=True
|
||||||
except:# _mysql_exceptions.ProgrammingError:
|
except:# _mysql_exceptions.ProgrammingError:
|
||||||
|
@ -152,7 +152,7 @@ class fpdb_db:
|
||||||
#end def get_db_info
|
#end def get_db_info
|
||||||
|
|
||||||
def fillDefaultData(self):
|
def fillDefaultData(self):
|
||||||
self.cursor.execute("INSERT INTO Settings VALUES (76);")
|
self.cursor.execute("INSERT INTO Settings VALUES (118);")
|
||||||
self.cursor.execute("INSERT INTO Sites VALUES (DEFAULT, \"Full Tilt Poker\", 'USD');")
|
self.cursor.execute("INSERT INTO Sites VALUES (DEFAULT, \"Full Tilt Poker\", 'USD');")
|
||||||
self.cursor.execute("INSERT INTO Sites VALUES (DEFAULT, \"PokerStars\", 'USD');")
|
self.cursor.execute("INSERT INTO Sites VALUES (DEFAULT, \"PokerStars\", 'USD');")
|
||||||
self.cursor.execute("INSERT INTO TourneyTypes VALUES (DEFAULT, 1, 0, 0, 0, False);")
|
self.cursor.execute("INSERT INTO TourneyTypes VALUES (DEFAULT, 1, 0, 0, 0, False);")
|
||||||
|
@ -311,6 +311,7 @@ class fpdb_db:
|
||||||
street SMALLINT NOT NULL,
|
street SMALLINT NOT NULL,
|
||||||
actionNo SMALLINT NOT NULL,
|
actionNo SMALLINT NOT NULL,
|
||||||
action CHAR(5) NOT NULL,
|
action CHAR(5) NOT NULL,
|
||||||
|
allIn BOOLEAN NOT NULL,
|
||||||
amount INT NOT NULL,
|
amount INT NOT NULL,
|
||||||
comment TEXT,
|
comment TEXT,
|
||||||
commentTs DATETIME)""")
|
commentTs DATETIME)""")
|
||||||
|
|
|
@ -56,17 +56,17 @@ def import_file_dict(options, settings, callHud=False):
|
||||||
inputFile=open(options.inputFile, "rU")
|
inputFile=open(options.inputFile, "rU")
|
||||||
|
|
||||||
#connect to DB
|
#connect to DB
|
||||||
if options.settings['db-backend'] == 2:
|
if settings['db-backend'] == 2:
|
||||||
if not mysqlLibFound:
|
if not mysqlLibFound:
|
||||||
raise fpdb_simple.FpdbError("interface library MySQLdb not found but MySQL selected as backend - please install the library or change the config file")
|
raise fpdb_simple.FpdbError("interface library MySQLdb not found but MySQL selected as backend - please install the library or change the config file")
|
||||||
db = MySQLdb.connect(host = options.server, user = options.user,
|
db = MySQLdb.connect(host = options.server, user = options.user,
|
||||||
passwd = options.password, db = options.database)
|
passwd = options.password, db = options.database)
|
||||||
elif options.settings['db-backend'] == 3:
|
elif settings['db-backend'] == 3:
|
||||||
if not pgsqlLibFound:
|
if not pgsqlLibFound:
|
||||||
raise fpdb_simple.FpdbError("interface library psycopg2 not found but PostgreSQL selected as backend - please install the library or change the config file")
|
raise fpdb_simple.FpdbError("interface library psycopg2 not found but PostgreSQL selected as backend - please install the library or change the config file")
|
||||||
db = psycopg2.connect(host = options.server, user = options.user,
|
db = psycopg2.connect(host = options.server, user = options.user,
|
||||||
password = options.password, database = options.database)
|
password = options.password, database = options.database)
|
||||||
elif options.settings['db-backend'] == 4:
|
elif settings['db-backend'] == 4:
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
pass
|
pass
|
||||||
|
@ -224,5 +224,5 @@ if __name__ == "__main__":
|
||||||
|
|
||||||
(options, sys.argv) = parser.parse_args()
|
(options, sys.argv) = parser.parse_args()
|
||||||
|
|
||||||
settings={'imp-callFpdbHud':False}
|
settings={'imp-callFpdbHud':False, 'db-backend':2}
|
||||||
import_file_dict(options, settings, False)
|
import_file_dict(options, settings, False)
|
||||||
|
|
|
@ -30,7 +30,7 @@ def mainParser(db, cursor, site, category, hand):
|
||||||
lineTypes=[] #char, valid values: header, name, cards, action, win, rake, ignore
|
lineTypes=[] #char, valid values: header, name, cards, action, win, rake, ignore
|
||||||
lineStreets=[] #char, valid values: (predeal, preflop, flop, turn, river)
|
lineStreets=[] #char, valid values: (predeal, preflop, flop, turn, river)
|
||||||
|
|
||||||
cardValues, cardSuits, boardValues, boardSuits, antes, actionTypes, actionAmounts, actionNos, actionTypeByNo, seatLines, winnings, rakes=[], [],[],[],[],[],[],[],[],[],[],[]
|
cardValues, cardSuits, boardValues, boardSuits, antes, actionTypes, allIns, actionAmounts, actionNos, actionTypeByNo, seatLines, winnings, rakes=[],[],[],[],[],[],[],[],[],[],[],[],[]
|
||||||
|
|
||||||
#part 1: read hand no and check for duplicate
|
#part 1: read hand no and check for duplicate
|
||||||
siteHandNo=fpdb_simple.parseSiteHandNo(hand[0])
|
siteHandNo=fpdb_simple.parseSiteHandNo(hand[0])
|
||||||
|
@ -76,7 +76,7 @@ def mainParser(db, cursor, site, category, hand):
|
||||||
startCashes=tmp['startCashes']
|
startCashes=tmp['startCashes']
|
||||||
seatNos=tmp['seatNos']
|
seatNos=tmp['seatNos']
|
||||||
|
|
||||||
fpdb_simple.createArrays(category, len(names), cardValues, cardSuits, antes, winnings, rakes, actionTypes, actionAmounts, actionNos, actionTypeByNo)
|
fpdb_simple.createArrays(category, len(names), cardValues, cardSuits, antes, winnings, rakes, actionTypes, allIns, actionAmounts, actionNos, actionTypeByNo)
|
||||||
|
|
||||||
#3b read positions
|
#3b read positions
|
||||||
if base=="hold":
|
if base=="hold":
|
||||||
|
@ -87,7 +87,7 @@ def mainParser(db, cursor, site, category, hand):
|
||||||
if (lineTypes[i]=="cards"):
|
if (lineTypes[i]=="cards"):
|
||||||
fpdb_simple.parseCardLine (site, category, lineStreets[i], hand[i], names, cardValues, cardSuits, boardValues, boardSuits)
|
fpdb_simple.parseCardLine (site, category, lineStreets[i], hand[i], names, cardValues, cardSuits, boardValues, boardSuits)
|
||||||
elif (lineTypes[i]=="action"):
|
elif (lineTypes[i]=="action"):
|
||||||
fpdb_simple.parseActionLine (site, base, hand[i], lineStreets[i], playerIDs, names, actionTypes, actionAmounts, actionNos, actionTypeByNo)
|
fpdb_simple.parseActionLine (site, base, isTourney, hand[i], lineStreets[i], playerIDs, names, actionTypes, allIns, actionAmounts, actionNos, actionTypeByNo)
|
||||||
elif (lineTypes[i]=="win"):
|
elif (lineTypes[i]=="win"):
|
||||||
fpdb_simple.parseWinLine (hand[i], site, names, winnings, isTourney)
|
fpdb_simple.parseWinLine (hand[i], site, names, winnings, isTourney)
|
||||||
elif (lineTypes[i]=="rake"):
|
elif (lineTypes[i]=="rake"):
|
||||||
|
@ -99,7 +99,7 @@ def mainParser(db, cursor, site, category, hand):
|
||||||
elif (lineTypes[i]=="header" or lineTypes[i]=="rake" or lineTypes[i]=="name" or lineTypes[i]=="ignore"):
|
elif (lineTypes[i]=="header" or lineTypes[i]=="rake" or lineTypes[i]=="name" or lineTypes[i]=="ignore"):
|
||||||
pass
|
pass
|
||||||
elif (lineTypes[i]=="ante"):
|
elif (lineTypes[i]=="ante"):
|
||||||
fpdb_simple.parseAnteLine(hand[i], site, names, antes)
|
fpdb_simple.parseAnteLine(hand[i], site, isTourney, names, antes)
|
||||||
elif (lineTypes[i]=="table"):
|
elif (lineTypes[i]=="table"):
|
||||||
tableResult=fpdb_simple.parseTableLine(site, base, hand[i])
|
tableResult=fpdb_simple.parseTableLine(site, base, hand[i])
|
||||||
else:
|
else:
|
||||||
|
@ -126,9 +126,9 @@ def mainParser(db, cursor, site, category, hand):
|
||||||
totalWinnings+=winnings[i]
|
totalWinnings+=winnings[i]
|
||||||
|
|
||||||
if base=="hold":
|
if base=="hold":
|
||||||
hudImportData=fpdb_simple.generateHudCacheData(playerIDs, base, category, actionTypes, actionTypeByNo, winnings, totalWinnings, positions)
|
hudImportData=fpdb_simple.generateHudCacheData(playerIDs, base, category, actionTypes, allIns, actionTypeByNo, winnings, totalWinnings, positions)
|
||||||
else:
|
else:
|
||||||
hudImportData=fpdb_simple.generateHudCacheData(playerIDs, base, category, actionTypes, actionTypeByNo, winnings, totalWinnings, None)
|
hudImportData=fpdb_simple.generateHudCacheData(playerIDs, base, category, actionTypes, allIns, actionTypeByNo, winnings, totalWinnings, None)
|
||||||
|
|
||||||
if isTourney:
|
if isTourney:
|
||||||
ranks=[]
|
ranks=[]
|
||||||
|
@ -138,22 +138,22 @@ def mainParser(db, cursor, site, category, hand):
|
||||||
|
|
||||||
if base=="hold":
|
if base=="hold":
|
||||||
result = fpdb_save_to_db.tourney_holdem_omaha(cursor, base, category, siteTourneyNo, buyin, fee, knockout, entries, prizepool, tourneyStartTime, payin_amounts, ranks, tourneyTypeId, siteID,
|
result = fpdb_save_to_db.tourney_holdem_omaha(cursor, base, category, siteTourneyNo, buyin, fee, knockout, entries, prizepool, tourneyStartTime, payin_amounts, ranks, tourneyTypeId, siteID,
|
||||||
siteHandNo, gametypeID, handStartTime, names, playerIDs, startCashes, positions, cardValues, cardSuits, boardValues, boardSuits, winnings, rakes, actionTypes, actionAmounts, actionNos, hudImportData, maxSeats, tableName, seatNos)
|
siteHandNo, gametypeID, handStartTime, names, playerIDs, startCashes, positions, cardValues, cardSuits, boardValues, boardSuits, winnings, rakes, actionTypes, allIns, actionAmounts, actionNos, hudImportData, maxSeats, tableName, seatNos)
|
||||||
elif base=="stud":
|
elif base=="stud":
|
||||||
result = fpdb_save_to_db.tourney_stud(cursor, base, category, siteTourneyNo, buyin, fee,
|
result = fpdb_save_to_db.tourney_stud(cursor, base, category, siteTourneyNo, buyin, fee,
|
||||||
knockout, entries, prizepool, tourneyStartTime, payin_amounts, ranks,
|
knockout, entries, prizepool, tourneyStartTime, payin_amounts, ranks,
|
||||||
siteHandNo, siteID, gametypeID, handStartTime, names, playerIDs,
|
siteHandNo, siteID, gametypeID, handStartTime, names, playerIDs,
|
||||||
startCashes, antes, cardValues, cardSuits, winnings, rakes,
|
startCashes, antes, cardValues, cardSuits, winnings, rakes,
|
||||||
actionTypes, actionAmounts, actionNos, hudImportData, maxSeats, tableName, seatNos)
|
actionTypes, allIns, actionAmounts, actionNos, hudImportData, maxSeats, tableName, seatNos)
|
||||||
else:
|
else:
|
||||||
raise fpdb_simple.FpdbError ("unrecognised category")
|
raise fpdb_simple.FpdbError ("unrecognised category")
|
||||||
else:
|
else:
|
||||||
if base=="hold":
|
if base=="hold":
|
||||||
result = fpdb_save_to_db.ring_holdem_omaha(cursor, base, category, siteHandNo, gametypeID, handStartTime, names, playerIDs, startCashes, positions, cardValues, cardSuits, boardValues, boardSuits, winnings, rakes, actionTypes, actionAmounts, actionNos, hudImportData, maxSeats, tableName, seatNos)
|
result = fpdb_save_to_db.ring_holdem_omaha(cursor, base, category, siteHandNo, gametypeID, handStartTime, names, playerIDs, startCashes, positions, cardValues, cardSuits, boardValues, boardSuits, winnings, rakes, actionTypes, allIns, actionAmounts, actionNos, hudImportData, maxSeats, tableName, seatNos)
|
||||||
elif base=="stud":
|
elif base=="stud":
|
||||||
result = fpdb_save_to_db.ring_stud(cursor, base, category, siteHandNo, gametypeID,
|
result = fpdb_save_to_db.ring_stud(cursor, base, category, siteHandNo, gametypeID,
|
||||||
handStartTime, names, playerIDs, startCashes, antes, cardValues,
|
handStartTime, names, playerIDs, startCashes, antes, cardValues,
|
||||||
cardSuits, winnings, rakes, actionTypes, actionAmounts, actionNos, hudImportData, maxSeats, tableName, seatNos)
|
cardSuits, winnings, rakes, actionTypes, allIns, actionAmounts, actionNos, hudImportData, maxSeats, tableName, seatNos)
|
||||||
else:
|
else:
|
||||||
raise fpdb_simple.FpdbError ("unrecognised category")
|
raise fpdb_simple.FpdbError ("unrecognised category")
|
||||||
db.commit()
|
db.commit()
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
import fpdb_simple
|
import fpdb_simple
|
||||||
|
|
||||||
#stores a stud/razz hand into the database
|
#stores a stud/razz hand into the database
|
||||||
def ring_stud(cursor, base, category, site_hand_no, gametype_id, hand_start_time, names, player_ids, start_cashes, antes, card_values, card_suits, winnings, rakes, action_types, action_amounts, actionNos, hudImportData, maxSeats, tableName, seatNos):
|
def ring_stud(cursor, base, category, site_hand_no, gametype_id, hand_start_time, names, player_ids, start_cashes, antes, card_values, card_suits, winnings, rakes, action_types, allIns, action_amounts, actionNos, hudImportData, maxSeats, tableName, seatNos):
|
||||||
fpdb_simple.fillCardArrays(len(names), base, category, card_values, card_suits)
|
fpdb_simple.fillCardArrays(len(names), base, category, card_values, card_suits)
|
||||||
|
|
||||||
hands_id=fpdb_simple.storeHands(cursor, site_hand_no, gametype_id, hand_start_time, names, tableName, maxSeats)
|
hands_id=fpdb_simple.storeHands(cursor, site_hand_no, gametype_id, hand_start_time, names, tableName, maxSeats)
|
||||||
|
@ -31,11 +31,11 @@ def ring_stud(cursor, base, category, site_hand_no, gametype_id, hand_start_time
|
||||||
|
|
||||||
fpdb_simple.storeHudCache(cursor, base, category, gametype_id, player_ids, hudImportData)
|
fpdb_simple.storeHudCache(cursor, base, category, gametype_id, player_ids, hudImportData)
|
||||||
|
|
||||||
fpdb_simple.storeActions(cursor, hands_players_ids, action_types, action_amounts, actionNos)
|
fpdb_simple.storeActions(cursor, hands_players_ids, action_types, allIns, action_amounts, actionNos)
|
||||||
return hands_id
|
return hands_id
|
||||||
#end def ring_stud
|
#end def ring_stud
|
||||||
|
|
||||||
def ring_holdem_omaha(cursor, base, category, site_hand_no, gametype_id, hand_start_time, names, player_ids, start_cashes, positions, card_values, card_suits, board_values, board_suits, winnings, rakes, action_types, action_amounts, actionNos, hudImportData, maxSeats, tableName, seatNos):
|
def ring_holdem_omaha(cursor, base, category, site_hand_no, gametype_id, hand_start_time, names, player_ids, start_cashes, positions, card_values, card_suits, board_values, board_suits, winnings, rakes, action_types, allIns, action_amounts, actionNos, hudImportData, maxSeats, tableName, seatNos):
|
||||||
"""stores a holdem/omaha hand into the database"""
|
"""stores a holdem/omaha hand into the database"""
|
||||||
fpdb_simple.fillCardArrays(len(names), base, category, card_values, card_suits)
|
fpdb_simple.fillCardArrays(len(names), base, category, card_values, card_suits)
|
||||||
fpdb_simple.fill_board_cards(board_values, board_suits)
|
fpdb_simple.fill_board_cards(board_values, board_suits)
|
||||||
|
@ -48,12 +48,12 @@ def ring_holdem_omaha(cursor, base, category, site_hand_no, gametype_id, hand_st
|
||||||
|
|
||||||
fpdb_simple.store_board_cards(cursor, hands_id, board_values, board_suits)
|
fpdb_simple.store_board_cards(cursor, hands_id, board_values, board_suits)
|
||||||
|
|
||||||
fpdb_simple.storeActions(cursor, hands_players_ids, action_types, action_amounts, actionNos)
|
fpdb_simple.storeActions(cursor, hands_players_ids, action_types, allIns, action_amounts, actionNos)
|
||||||
return hands_id
|
return hands_id
|
||||||
#end def ring_holdem_omaha
|
#end def ring_holdem_omaha
|
||||||
|
|
||||||
def tourney_holdem_omaha(cursor, base, category, siteTourneyNo, buyin, fee, knockout, entries, prizepool, tourney_start, payin_amounts, ranks, tourneyTypeId, siteId, #end of tourney specific params
|
def tourney_holdem_omaha(cursor, base, category, siteTourneyNo, buyin, fee, knockout, entries, prizepool, tourney_start, payin_amounts, ranks, tourneyTypeId, siteId, #end of tourney specific params
|
||||||
site_hand_no, gametype_id, hand_start_time, names, player_ids, start_cashes, positions, card_values, card_suits, board_values, board_suits, winnings, rakes, action_types, action_amounts, actionNos, hudImportData, maxSeats, tableName, seatNos):
|
site_hand_no, gametype_id, hand_start_time, names, player_ids, start_cashes, positions, card_values, card_suits, board_values, board_suits, winnings, rakes, action_types, allIns, action_amounts, actionNos, hudImportData, maxSeats, tableName, seatNos):
|
||||||
"""stores a tourney holdem/omaha hand into the database"""
|
"""stores a tourney holdem/omaha hand into the database"""
|
||||||
fpdb_simple.fillCardArrays(len(names), base, category, card_values, card_suits)
|
fpdb_simple.fillCardArrays(len(names), base, category, card_values, card_suits)
|
||||||
fpdb_simple.fill_board_cards(board_values, board_suits)
|
fpdb_simple.fill_board_cards(board_values, board_suits)
|
||||||
|
@ -69,7 +69,7 @@ def tourney_holdem_omaha(cursor, base, category, siteTourneyNo, buyin, fee, knoc
|
||||||
|
|
||||||
fpdb_simple.store_board_cards(cursor, hands_id, board_values, board_suits)
|
fpdb_simple.store_board_cards(cursor, hands_id, board_values, board_suits)
|
||||||
|
|
||||||
fpdb_simple.storeActions(cursor, hands_players_ids, action_types, action_amounts, actionNos)
|
fpdb_simple.storeActions(cursor, hands_players_ids, action_types, allIns, action_amounts, actionNos)
|
||||||
return hands_id
|
return hands_id
|
||||||
#end def tourney_holdem_omaha
|
#end def tourney_holdem_omaha
|
||||||
|
|
||||||
|
@ -77,7 +77,7 @@ def tourney_stud(cursor, base, category, site_tourney_no, buyin, fee, knockout,
|
||||||
tourney_start, payin_amounts, ranks, #end of tourney specific params
|
tourney_start, payin_amounts, ranks, #end of tourney specific params
|
||||||
site_hand_no, site_id, gametype_id, hand_start_time, names, player_ids,
|
site_hand_no, site_id, gametype_id, hand_start_time, names, player_ids,
|
||||||
start_cashes, antes, card_values, card_suits, winnings, rakes,
|
start_cashes, antes, card_values, card_suits, winnings, rakes,
|
||||||
action_types, action_amounts, hudImportData):
|
action_types, allIns, action_amounts, hudImportData):
|
||||||
#stores a tourney stud/razz hand into the database
|
#stores a tourney stud/razz hand into the database
|
||||||
fpdb_simple.fillCardArrays(len(names), base, category, card_values, card_suits)
|
fpdb_simple.fillCardArrays(len(names), base, category, card_values, card_suits)
|
||||||
|
|
||||||
|
@ -92,6 +92,6 @@ def tourney_stud(cursor, base, category, site_tourney_no, buyin, fee, knockout,
|
||||||
|
|
||||||
fpdb_simple.storeHudData(cursor, base, category, player_ids, hudImportData)
|
fpdb_simple.storeHudData(cursor, base, category, player_ids, hudImportData)
|
||||||
|
|
||||||
fpdb_simple.storeActions(cursor, hands_players_ids, action_types, action_amounts)
|
fpdb_simple.storeActions(cursor, hands_players_ids, action_types, allIns, action_amounts)
|
||||||
return hands_id
|
return hands_id
|
||||||
#end def tourney_stud
|
#end def tourney_stud
|
||||||
|
|
|
@ -204,7 +204,7 @@ def convertCardValuesBoard(arr):
|
||||||
#end def convertCardValuesBoard
|
#end def convertCardValuesBoard
|
||||||
|
|
||||||
#this creates the 2D/3D arrays. manipulates the passed arrays instead of returning.
|
#this creates the 2D/3D arrays. manipulates the passed arrays instead of returning.
|
||||||
def createArrays(category, seats, card_values, card_suits, antes, winnings, rakes, action_types, action_amounts, actionNos, actionTypeByNo):
|
def createArrays(category, seats, card_values, card_suits, antes, winnings, rakes, action_types, allIns, action_amounts, actionNos, actionTypeByNo):
|
||||||
for i in range(seats):#create second dimension arrays
|
for i in range(seats):#create second dimension arrays
|
||||||
tmp=[]
|
tmp=[]
|
||||||
card_values.append(tmp)
|
card_values.append(tmp)
|
||||||
|
@ -223,6 +223,8 @@ def createArrays(category, seats, card_values, card_suits, antes, winnings, rake
|
||||||
tmp=[]
|
tmp=[]
|
||||||
action_types.append(tmp)
|
action_types.append(tmp)
|
||||||
tmp=[]
|
tmp=[]
|
||||||
|
allIns.append(tmp)
|
||||||
|
tmp=[]
|
||||||
action_amounts.append(tmp)
|
action_amounts.append(tmp)
|
||||||
tmp=[]
|
tmp=[]
|
||||||
actionNos.append(tmp)
|
actionNos.append(tmp)
|
||||||
|
@ -232,6 +234,8 @@ def createArrays(category, seats, card_values, card_suits, antes, winnings, rake
|
||||||
tmp=[]
|
tmp=[]
|
||||||
action_types[i].append(tmp)
|
action_types[i].append(tmp)
|
||||||
tmp=[]
|
tmp=[]
|
||||||
|
allIns[i].append(tmp)
|
||||||
|
tmp=[]
|
||||||
action_amounts[i].append(tmp)
|
action_amounts[i].append(tmp)
|
||||||
tmp=[]
|
tmp=[]
|
||||||
actionNos[i].append(tmp)
|
actionNos[i].append(tmp)
|
||||||
|
@ -542,11 +546,11 @@ def isWinLine(line):
|
||||||
#end def isWinLine
|
#end def isWinLine
|
||||||
|
|
||||||
#returns the amount of cash/chips put into the put in the given action line
|
#returns the amount of cash/chips put into the put in the given action line
|
||||||
def parseActionAmount(line, atype, site):
|
def parseActionAmount(line, atype, site, isTourney):
|
||||||
if (line.endswith(" and is all-in")):
|
#if (line.endswith(" and is all-in")):
|
||||||
line=line[:-14]
|
# line=line[:-14]
|
||||||
elif (line.endswith(", and is all in")):
|
#elif (line.endswith(", and is all in")):
|
||||||
line=line[:-15]
|
# line=line[:-15]
|
||||||
|
|
||||||
if line.endswith(", and is capped"):#ideally we should recognise this as an all-in if category is capXl
|
if line.endswith(", and is capped"):#ideally we should recognise this as an all-in if category is capXl
|
||||||
line=line[:-15]
|
line=line[:-15]
|
||||||
|
@ -573,8 +577,8 @@ def parseActionAmount(line, atype, site):
|
||||||
pos=line.find("to $")+4
|
pos=line.find("to $")+4
|
||||||
amount=float2int(line[pos:])
|
amount=float2int(line[pos:])
|
||||||
else:
|
else:
|
||||||
|
if not isTourney:
|
||||||
pos=line.rfind("$")+1
|
pos=line.rfind("$")+1
|
||||||
if pos!=0:
|
|
||||||
amount=float2int(line[pos:])
|
amount=float2int(line[pos:])
|
||||||
else:
|
else:
|
||||||
#print "line:"+line+"EOL"
|
#print "line:"+line+"EOL"
|
||||||
|
@ -591,7 +595,7 @@ def parseActionAmount(line, atype, site):
|
||||||
#doesnt return anything, simply changes the passed arrays action_types and
|
#doesnt return anything, simply changes the passed arrays action_types and
|
||||||
# action_amounts. For stud this expects numeric streets (3-7), for
|
# action_amounts. For stud this expects numeric streets (3-7), for
|
||||||
# holdem/omaha it expects predeal, preflop, flop, turn or river
|
# holdem/omaha it expects predeal, preflop, flop, turn or river
|
||||||
def parseActionLine(site, base, line, street, playerIDs, names, action_types, action_amounts, actionNos, actionTypeByNo):
|
def parseActionLine(site, base, isTourney, line, street, playerIDs, names, action_types, allIns, action_amounts, actionNos, actionTypeByNo):
|
||||||
if (street=="predeal" or street=="preflop"):
|
if (street=="predeal" or street=="preflop"):
|
||||||
street=0
|
street=0
|
||||||
elif (street=="flop"):
|
elif (street=="flop"):
|
||||||
|
@ -607,17 +611,31 @@ def parseActionLine(site, base, line, street, playerIDs, names, action_types, ac
|
||||||
if actionNos[street][player][count]>=nextActionNo:
|
if actionNos[street][player][count]>=nextActionNo:
|
||||||
nextActionNo=actionNos[street][player][count]+1
|
nextActionNo=actionNos[street][player][count]+1
|
||||||
|
|
||||||
|
line, allIn=goesAllInOnThisLine(line)
|
||||||
atype=parseActionType(line)
|
atype=parseActionType(line)
|
||||||
playerno=recognisePlayerNo(line, names, atype)
|
playerno=recognisePlayerNo(line, names, atype)
|
||||||
amount=parseActionAmount(line, atype, site)
|
amount=parseActionAmount(line, atype, site, isTourney)
|
||||||
|
|
||||||
action_types[street][playerno].append(atype)
|
action_types[street][playerno].append(atype)
|
||||||
|
allIns[street][playerno].append(allIn)
|
||||||
action_amounts[street][playerno].append(amount)
|
action_amounts[street][playerno].append(amount)
|
||||||
actionNos[street][playerno].append(nextActionNo)
|
actionNos[street][playerno].append(nextActionNo)
|
||||||
tmp=(playerIDs[playerno], atype)
|
tmp=(playerIDs[playerno], atype)
|
||||||
actionTypeByNo[street].append(tmp)
|
actionTypeByNo[street].append(tmp)
|
||||||
#end def parseActionLine
|
#end def parseActionLine
|
||||||
|
|
||||||
|
def goesAllInOnThisLine(line):
|
||||||
|
"""returns whether the player went all-in on this line and removes the all-in text from the line."""
|
||||||
|
isAllIn=False
|
||||||
|
if (line.endswith(" and is all-in")):
|
||||||
|
line=line[:-14]
|
||||||
|
isAllIn=True
|
||||||
|
elif (line.endswith(", and is all in")):
|
||||||
|
line=line[:-15]
|
||||||
|
isAllIn=True
|
||||||
|
return (line, isAllIn)
|
||||||
|
#end def goesAllInOnThisLine
|
||||||
|
|
||||||
#returns the action type code (see table design) of the given action line
|
#returns the action type code (see table design) of the given action line
|
||||||
def parseActionType(line):
|
def parseActionType(line):
|
||||||
if (line.startswith("Uncalled bet")):
|
if (line.startswith("Uncalled bet")):
|
||||||
|
@ -657,15 +675,21 @@ def parseActionType(line):
|
||||||
#end def parseActionType
|
#end def parseActionType
|
||||||
|
|
||||||
#parses the ante out of the given line and checks which player paid it, updates antes accordingly.
|
#parses the ante out of the given line and checks which player paid it, updates antes accordingly.
|
||||||
def parseAnteLine(line, site, names, antes):
|
def parseAnteLine(line, site, isTourney, names, antes):
|
||||||
|
#print "parseAnteLine line: ",line
|
||||||
for i in range(len(names)):
|
for i in range(len(names)):
|
||||||
if (line.startswith(names[i].encode("latin-1"))): #found the ante'er
|
if (line.startswith(names[i].encode("latin-1"))): #found the ante'er
|
||||||
pos=line.rfind("$")+1
|
pos=line.rfind("$")+1
|
||||||
if pos!=0: #found $, so must be ring
|
if not isTourney:
|
||||||
antes[i]+=float2int(line[pos:])
|
antes[i]+=float2int(line[pos:])
|
||||||
else:
|
else:
|
||||||
|
if line.find("all-in")==-1:
|
||||||
pos=line.rfind(" ")+1
|
pos=line.rfind(" ")+1
|
||||||
antes[i]+=int(line[pos:])
|
antes[i]+=int(line[pos:])
|
||||||
|
else:
|
||||||
|
pos1=line.rfind("ante")+5
|
||||||
|
pos2=line.find(" ",pos1)
|
||||||
|
antes[i]+=int(line[pos1:pos2])
|
||||||
#end def parseAntes
|
#end def parseAntes
|
||||||
|
|
||||||
#returns the buyin of a tourney in cents
|
#returns the buyin of a tourney in cents
|
||||||
|
@ -938,7 +962,7 @@ def parseWinLine(line, site, names, winnings, isTourney):
|
||||||
for i in range(len(names)):
|
for i in range(len(names)):
|
||||||
if (line.startswith(names[i].encode("latin-1"))): #found a winner
|
if (line.startswith(names[i].encode("latin-1"))): #found a winner
|
||||||
if isTourney:
|
if isTourney:
|
||||||
pos1=line.rfind("collected ")+11
|
pos1=line.rfind("collected ")+10
|
||||||
if (site=="ftp"):
|
if (site=="ftp"):
|
||||||
pos2=line.find(")", pos1)
|
pos2=line.find(")", pos1)
|
||||||
elif (site=="ps"):
|
elif (site=="ps"):
|
||||||
|
@ -1179,14 +1203,14 @@ def splitRake(winnings, rakes, totalRake):
|
||||||
rakes[i]=totalRake*winPortion
|
rakes[i]=totalRake*winPortion
|
||||||
#end def splitRake
|
#end def splitRake
|
||||||
|
|
||||||
def storeActions(cursor, hands_players_ids, action_types, action_amounts, actionNos):
|
def storeActions(cursor, handsPlayersIds, actionTypes, allIns, actionAmounts, actionNos):
|
||||||
#stores into table hands_actions
|
#stores into table hands_actions
|
||||||
#print "start of storeActions, actionNos:",actionNos
|
#print "start of storeActions, actionNos:",actionNos
|
||||||
#print " action_amounts:",action_amounts
|
#print " action_amounts:",action_amounts
|
||||||
for i in range (len(action_types)): #iterate through streets
|
for i in range (len(actionTypes)): #iterate through streets
|
||||||
for j in range (len(action_types[i])): #iterate through names
|
for j in range (len(actionTypes[i])): #iterate through names
|
||||||
for k in range (len(action_types[i][j])): #iterate through individual actions of that player on that street
|
for k in range (len(actionTypes[i][j])): #iterate through individual actions of that player on that street
|
||||||
cursor.execute ("INSERT INTO HandsActions (handPlayerId, street, actionNo, action, amount) VALUES (%s, %s, %s, %s, %s)", (hands_players_ids[j], i, actionNos[i][j][k], action_types[i][j][k], action_amounts[i][j][k]))
|
cursor.execute ("INSERT INTO HandsActions (handPlayerId, street, actionNo, action, allIn, amount) VALUES (%s, %s, %s, %s, %s, %s)", (handsPlayersIds[j], i, actionNos[i][j][k], actionTypes[i][j][k], allIns[i][j][k], actionAmounts[i][j][k]))
|
||||||
#end def storeActions
|
#end def storeActions
|
||||||
|
|
||||||
def store_board_cards(cursor, hands_id, board_values, board_suits):
|
def store_board_cards(cursor, hands_id, board_values, board_suits):
|
||||||
|
@ -1317,7 +1341,7 @@ def store_hands_players_stud_tourney(cursor, hands_id, player_ids, start_cashes,
|
||||||
return result
|
return result
|
||||||
#end def store_hands_players_stud_tourney
|
#end def store_hands_players_stud_tourney
|
||||||
|
|
||||||
def generateHudCacheData(player_ids, base, category, action_types, actionTypeByNo, winnings, totalWinnings, positions):
|
def generateHudCacheData(player_ids, base, category, action_types, allIns, actionTypeByNo, winnings, totalWinnings, positions):
|
||||||
"""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"""
|
"""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.
|
#setup subarrays of the result dictionary.
|
||||||
street0VPI=[]
|
street0VPI=[]
|
||||||
|
@ -1466,13 +1490,27 @@ def generateHudCacheData(player_ids, base, category, action_types, actionTypeByN
|
||||||
if myStealAttempted:
|
if myStealAttempted:
|
||||||
someoneStole=True
|
someoneStole=True
|
||||||
|
|
||||||
|
|
||||||
#calculate saw* values
|
#calculate saw* values
|
||||||
if (len(action_types[1][player])>0):
|
isAllIn=False
|
||||||
|
for i in range(len(allIns[0][player])):
|
||||||
|
if allIns[0][player][i]:
|
||||||
|
isAllIn=True
|
||||||
|
if (len(action_types[1][player])>0 or isAllIn):
|
||||||
myStreet1Seen=True
|
myStreet1Seen=True
|
||||||
if (len(action_types[2][player])>0):
|
|
||||||
|
for i in range(len(allIns[1][player])):
|
||||||
|
if allIns[1][player][i]:
|
||||||
|
isAllIn=True
|
||||||
|
if (len(action_types[2][player])>0 or isAllIn):
|
||||||
myStreet2Seen=True
|
myStreet2Seen=True
|
||||||
if (len(action_types[3][player])>0):
|
|
||||||
|
for i in range(len(allIns[2][player])):
|
||||||
|
if allIns[2][player][i]:
|
||||||
|
isAllIn=True
|
||||||
|
if (len(action_types[3][player])>0 or isAllIn):
|
||||||
myStreet3Seen=True
|
myStreet3Seen=True
|
||||||
|
|
||||||
mySawShowdown=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":
|
||||||
|
@ -1577,7 +1615,7 @@ def generateHudCacheData(player_ids, base, category, action_types, actionTypeByN
|
||||||
elif pos>=2 and pos<=4:
|
elif pos>=2 and pos<=4:
|
||||||
hudDataPositions.append('M')
|
hudDataPositions.append('M')
|
||||||
elif pos>=5 and pos<=7:
|
elif pos>=5 and pos<=7:
|
||||||
hudDataPositions.append('L')
|
hudDataPositions.append('E')
|
||||||
### RHH Added this elif to handle being a dead hand before the BB (pos==9)
|
### RHH Added this elif to handle being a dead hand before the BB (pos==9)
|
||||||
elif pos==9:
|
elif pos==9:
|
||||||
hudDataPositions.append('X')
|
hudDataPositions.append('X')
|
||||||
|
|
|
@ -137,6 +137,7 @@ CREATE TABLE HandsActions (
|
||||||
street SMALLINT,
|
street SMALLINT,
|
||||||
actionNo SMALLINT,
|
actionNo SMALLINT,
|
||||||
action CHAR(5),
|
action CHAR(5),
|
||||||
|
allIn BOOLEAN,
|
||||||
amount INT,
|
amount INT,
|
||||||
comment TEXT,
|
comment TEXT,
|
||||||
commentTs timestamp without time zone);
|
commentTs timestamp without time zone);
|
||||||
|
@ -211,7 +212,7 @@ CREATE TABLE HudCache (
|
||||||
street4CheckCallRaiseChance INT,
|
street4CheckCallRaiseChance INT,
|
||||||
street4CheckCallRaiseDone INT);
|
street4CheckCallRaiseDone INT);
|
||||||
|
|
||||||
INSERT INTO Settings VALUES (76);
|
INSERT INTO Settings VALUES (118);
|
||||||
INSERT INTO Sites ("name", currency) VALUES ('Full Tilt Poker', 'USD');
|
INSERT INTO Sites ("name", currency) VALUES ('Full Tilt Poker', 'USD');
|
||||||
INSERT INTO Sites ("name", currency) VALUES ('PokerStars', 'USD');
|
INSERT INTO Sites ("name", currency) VALUES ('PokerStars', 'USD');
|
||||||
INSERT INTO TourneyTypes (buyin, fee, knockout, rebuyOrAddon) VALUES (0, 0, 0, FALSE);
|
INSERT INTO TourneyTypes (buyin, fee, knockout, rebuyOrAddon) VALUES (0, 0, 0, FALSE);
|
||||||
|
|
|
@ -29,7 +29,7 @@ parser.add_option("-e", "--seats", default="7", type="int", help="number of acti
|
||||||
parser.add_option("-g", "--gameType", default="ring", help="Whether its a ringgame (ring) or a tournament (tour)")
|
parser.add_option("-g", "--gameType", default="ring", help="Whether its a ringgame (ring) or a tournament (tour)")
|
||||||
parser.add_option("-l", "--limit", "--limitType", default="fl", help="Limit Type, one of: nl, pl, fl, cn, cp")
|
parser.add_option("-l", "--limit", "--limitType", default="fl", help="Limit Type, one of: nl, pl, fl, cn, cp")
|
||||||
parser.add_option("-n", "--name", "--playername", default="Player_1", help="Name of the player to print")
|
parser.add_option("-n", "--name", "--playername", default="Player_1", help="Name of the player to print")
|
||||||
parser.add_option("-o", "--position", default="B", help="Position, can be B, S, or a number between 0 and 7")
|
parser.add_option("-o", "--position", default="B", help="Position, can be B, S, D, C, M or E (see tabledesign.html)")
|
||||||
parser.add_option("-p", "--password", help="The password for the MySQL user")
|
parser.add_option("-p", "--password", help="The password for the MySQL user")
|
||||||
parser.add_option("-s", "--site", default="PokerStars", help="Name of the site (as written in the history files)")
|
parser.add_option("-s", "--site", default="PokerStars", help="Name of the site (as written in the history files)")
|
||||||
|
|
||||||
|
@ -54,6 +54,7 @@ cursor.execute("SELECT id FROM Players WHERE name=%s", (options.name,))
|
||||||
playerId=cursor.fetchone()[0]
|
playerId=cursor.fetchone()[0]
|
||||||
|
|
||||||
cursor.execute("SELECT id FROM HudCache WHERE gametypeId=%s AND playerId=%s AND activeSeats=%s AND position=%s",(gametypeId, playerId, options.seats, options.position))
|
cursor.execute("SELECT id FROM HudCache WHERE gametypeId=%s AND playerId=%s AND activeSeats=%s AND position=%s",(gametypeId, playerId, options.seats, options.position))
|
||||||
|
#print "debug: gametypeId:", gametypeId, "playerId:", playerId, "options.seats:", options.seats, "options.position:", options.position
|
||||||
hudDataId=cursor.fetchone()[0]
|
hudDataId=cursor.fetchone()[0]
|
||||||
|
|
||||||
print "siteId:", siteId, "gametypeId:", gametypeId, "playerId:", playerId, "hudDataId:", hudDataId
|
print "siteId:", siteId, "gametypeId:", gametypeId, "playerId:", playerId, "hudDataId:", hudDataId
|
||||||
|
|
68
regression-test/ps-flags-B-1hands.expected.txt
Normal file
68
regression-test/ps-flags-B-1hands.expected.txt
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
Connected to MySQL on localhost. Print Player Flags Utility
|
||||||
|
|
||||||
|
Basic Data
|
||||||
|
==========
|
||||||
|
bigblind: 2 category: holdem limitType: fl name: Player_5 gameType: ring site: PokerStars
|
||||||
|
siteId: 2 gametypeId: 1 playerId: 5 hudDataId: 12
|
||||||
|
|
||||||
|
HUD Raw Hand Counts
|
||||||
|
===================
|
||||||
|
HDs: 1
|
||||||
|
street0VPI: 0
|
||||||
|
street0Aggr: 0
|
||||||
|
street0_3B4BChance: 0
|
||||||
|
street0_3B4BDone: 0
|
||||||
|
|
||||||
|
street1Seen: 1
|
||||||
|
street2Seen: 1
|
||||||
|
street3Seen: 1
|
||||||
|
street4Seen: 0
|
||||||
|
sawShowdown: 1
|
||||||
|
|
||||||
|
street1Aggr: 1
|
||||||
|
street2Aggr: 1
|
||||||
|
street3Aggr: 0
|
||||||
|
street4Aggr: 0
|
||||||
|
|
||||||
|
otherRaisedStreet1: 0
|
||||||
|
otherRaisedStreet2: 1
|
||||||
|
otherRaisedStreet3: 1
|
||||||
|
otherRaisedStreet4: 0
|
||||||
|
foldToOtherRaisedStreet1: 0
|
||||||
|
foldToOtherRaisedStreet2: 0
|
||||||
|
foldToOtherRaisedStreet3: 0
|
||||||
|
foldToOtherRaisedStreet4: 0
|
||||||
|
|
||||||
|
wonWhenSeenStreet1: 0
|
||||||
|
wonAtSD: 0
|
||||||
|
stealAttemptChance: 0
|
||||||
|
stealAttempted: 0
|
||||||
|
foldBbToStealChance: 0
|
||||||
|
foldedBbToSteal: 0
|
||||||
|
foldSbToStealChance: 0
|
||||||
|
foldedSbToSteal: 0
|
||||||
|
street1CBChance: 0
|
||||||
|
street1CBDone: 0
|
||||||
|
street2CBChance: 0
|
||||||
|
street2CBDone: 0
|
||||||
|
street3CBChance: 0
|
||||||
|
street3CBDone: 0
|
||||||
|
street4CBChance: 0
|
||||||
|
street4CBDone: 0
|
||||||
|
foldToStreet1CBChance: 0
|
||||||
|
foldToStreet1CBDone: 0
|
||||||
|
foldToStreet2CBChance: 0
|
||||||
|
foldToStreet2CBDone: 0
|
||||||
|
foldToStreet3CBChance: 0
|
||||||
|
foldToStreet3CBDone: 0
|
||||||
|
foldToStreet4CBChance: 0
|
||||||
|
foldToStreet4CBDone: 0
|
||||||
|
totalProfit:
|
||||||
|
street1CheckCallRaiseChance:
|
||||||
|
street1CheckCallRaiseDone:
|
||||||
|
street2CheckCallRaiseChance:
|
||||||
|
street2CheckCallRaiseDone:
|
||||||
|
street3CheckCallRaiseChance:
|
||||||
|
street3CheckCallRaiseDone:
|
||||||
|
street4CheckCallRaiseChance: 0
|
||||||
|
street4CheckCallRaiseDone: 0
|
68
regression-test/ps-flags-CBflop.expected.txt
Normal file
68
regression-test/ps-flags-CBflop.expected.txt
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
Connected to MySQL on localhost. Print Player Flags Utility
|
||||||
|
|
||||||
|
Basic Data
|
||||||
|
==========
|
||||||
|
bigblind: 25 category: holdem limitType: fl name: player3 gameType: ring site: PokerStars
|
||||||
|
siteId: 2 gametypeId: 2 playerId: 11 hudDataId: 22
|
||||||
|
|
||||||
|
HUD Raw Hand Counts
|
||||||
|
===================
|
||||||
|
HDs: 1
|
||||||
|
street0VPI: 1
|
||||||
|
street0Aggr: 1
|
||||||
|
street0_3B4BChance: 1
|
||||||
|
street0_3B4BDone: 1
|
||||||
|
|
||||||
|
street1Seen: 1
|
||||||
|
street2Seen: 1
|
||||||
|
street3Seen: 1
|
||||||
|
street4Seen: 0
|
||||||
|
sawShowdown: 1
|
||||||
|
|
||||||
|
street1Aggr: 1
|
||||||
|
street2Aggr: 0
|
||||||
|
street3Aggr: 0
|
||||||
|
street4Aggr: 0
|
||||||
|
|
||||||
|
otherRaisedStreet1: 0
|
||||||
|
otherRaisedStreet2:
|
||||||
|
otherRaisedStreet3:
|
||||||
|
otherRaisedStreet4: 0
|
||||||
|
foldToOtherRaisedStreet1: 0
|
||||||
|
foldToOtherRaisedStreet2: 0
|
||||||
|
foldToOtherRaisedStreet3: 0
|
||||||
|
foldToOtherRaisedStreet4: 0
|
||||||
|
|
||||||
|
wonWhenSeenStreet1: 0.0
|
||||||
|
wonAtSD: 0.0
|
||||||
|
stealAttemptChance: 0
|
||||||
|
stealAttempted: 0
|
||||||
|
foldBbToStealChance: 0
|
||||||
|
foldedBbToSteal: 0
|
||||||
|
foldSbToStealChance: 0
|
||||||
|
foldedSbToSteal: 0
|
||||||
|
street1CBChance: 1
|
||||||
|
street1CBDone: 1
|
||||||
|
street2CBChance: 0
|
||||||
|
street2CBDone: 0
|
||||||
|
street3CBChance: 0
|
||||||
|
street3CBDone: 0
|
||||||
|
street4CBChance: 0
|
||||||
|
street4CBDone: 0
|
||||||
|
foldToStreet1CBChance: 0
|
||||||
|
foldToStreet1CBDone: 0
|
||||||
|
foldToStreet2CBChance: 0
|
||||||
|
foldToStreet2CBDone: 0
|
||||||
|
foldToStreet3CBChance: 0
|
||||||
|
foldToStreet3CBDone: 0
|
||||||
|
foldToStreet4CBChance: 0
|
||||||
|
foldToStreet4CBDone: 0
|
||||||
|
totalProfit:
|
||||||
|
street1CheckCallRaiseChance: 0
|
||||||
|
street1CheckCallRaiseDone: 0
|
||||||
|
street2CheckCallRaiseChance: 0
|
||||||
|
street2CheckCallRaiseDone: 0
|
||||||
|
street3CheckCallRaiseChance: 0
|
||||||
|
street3CheckCallRaiseDone: 0
|
||||||
|
street4CheckCallRaiseChance: 0
|
||||||
|
street4CheckCallRaiseDone: 0
|
68
regression-test/ps-flags-M-2hands.expected.txt
Normal file
68
regression-test/ps-flags-M-2hands.expected.txt
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
Connected to MySQL on localhost. Print Player Flags Utility
|
||||||
|
|
||||||
|
Basic Data
|
||||||
|
==========
|
||||||
|
bigblind: 2 category: holdem limitType: fl name: Player_1 gameType: ring site: PokerStars
|
||||||
|
siteId: 2 gametypeId: 1 playerId: 1 hudDataId: 8
|
||||||
|
|
||||||
|
HUD Raw Hand Counts
|
||||||
|
===================
|
||||||
|
HDs: 2
|
||||||
|
street0VPI: 0
|
||||||
|
street0Aggr: 0
|
||||||
|
street0_3B4BChance: 0
|
||||||
|
street0_3B4BDone: 0
|
||||||
|
|
||||||
|
street1Seen: 0
|
||||||
|
street2Seen: 0
|
||||||
|
street3Seen: 0
|
||||||
|
street4Seen: 0
|
||||||
|
sawShowdown: 0
|
||||||
|
|
||||||
|
street1Aggr: 0
|
||||||
|
street2Aggr: 0
|
||||||
|
street3Aggr: 0
|
||||||
|
street4Aggr: 0
|
||||||
|
|
||||||
|
otherRaisedStreet1: 0
|
||||||
|
otherRaisedStreet2: 0
|
||||||
|
otherRaisedStreet3: 0
|
||||||
|
otherRaisedStreet4: 0
|
||||||
|
foldToOtherRaisedStreet1: 0
|
||||||
|
foldToOtherRaisedStreet2: 0
|
||||||
|
foldToOtherRaisedStreet3: 0
|
||||||
|
foldToOtherRaisedStreet4: 0
|
||||||
|
|
||||||
|
wonWhenSeenStreet1: 0.0
|
||||||
|
wonAtSD: 0.0
|
||||||
|
stealAttemptChance: 0
|
||||||
|
stealAttempted: 0
|
||||||
|
foldBbToStealChance: 0
|
||||||
|
foldedBbToSteal: 0
|
||||||
|
foldSbToStealChance: 0
|
||||||
|
foldedSbToSteal: 0
|
||||||
|
street1CBChance: 0
|
||||||
|
street1CBDone: 0
|
||||||
|
street2CBChance: 0
|
||||||
|
street2CBDone: 0
|
||||||
|
street3CBChance: 0
|
||||||
|
street3CBDone: 0
|
||||||
|
street4CBChance: 0
|
||||||
|
street4CBDone: 0
|
||||||
|
foldToStreet1CBChance: 0
|
||||||
|
foldToStreet1CBDone: 0
|
||||||
|
foldToStreet2CBChance: 0
|
||||||
|
foldToStreet2CBDone: 0
|
||||||
|
foldToStreet3CBChance: 0
|
||||||
|
foldToStreet3CBDone: 0
|
||||||
|
foldToStreet4CBChance: 0
|
||||||
|
foldToStreet4CBDone: 0
|
||||||
|
totalProfit: 0
|
||||||
|
street1CheckCallRaiseChance: 0
|
||||||
|
street1CheckCallRaiseDone: 0
|
||||||
|
street2CheckCallRaiseChance: 0
|
||||||
|
street2CheckCallRaiseDone: 0
|
||||||
|
street3CheckCallRaiseChance: 0
|
||||||
|
street3CheckCallRaiseDone: 0
|
||||||
|
street4CheckCallRaiseChance: 0
|
||||||
|
street4CheckCallRaiseDone: 0
|
|
@ -30,7 +30,13 @@ echo "it should've reported first that it stored 3, then that it had 3 duplicate
|
||||||
./PrintHand.py -p$1 --hand=14519420999 > ps.14519420999.found.txt && colordiff ps.14519420999.found.txt ps.14519420999.expected.txt
|
./PrintHand.py -p$1 --hand=14519420999 > ps.14519420999.found.txt && colordiff ps.14519420999.found.txt ps.14519420999.expected.txt
|
||||||
./PrintHand.py -p$1 --hand=14519433154 > ps.14519433154.found.txt && colordiff ps.14519433154.found.txt ps.14519433154.expected.txt
|
./PrintHand.py -p$1 --hand=14519433154 > ps.14519433154.found.txt && colordiff ps.14519433154.found.txt ps.14519433154.expected.txt
|
||||||
|
|
||||||
./PrintPlayerHudData.py -p$1 > ps-flags-3hands.found.txt && colordiff ps-flags-3hands.found.txt ps-flags-3hands.expected.txt
|
./PrintPlayerHudData.py -p$1 -oM > ps-flags-M-2hands.found.txt && colordiff ps-flags-M-2hands.found.txt ps-flags-M-2hands.expected.txt
|
||||||
|
./PrintPlayerHudData.py -p$1 -nPlayer_5 -oB > ps-flags-B-1hands.found.txt && colordiff ps-flags-B-1hands.found.txt ps-flags-B-1hands.expected.txt
|
||||||
|
|
||||||
|
|
||||||
|
../pyfpdb/fpdb_import.py -p$1 --file=ps-lhe-ring-call-3B-preflop-cb-no2b.txt -x
|
||||||
|
echo "it should've now reported another successful store of 1 hand"
|
||||||
|
./PrintPlayerHudData.py -p$1 -nplayer3 -oE -e10 -b25 > ps-flags-CBflop.found.txt && colordiff ps-flags-CBflop.found.txt ps-flags-CBflop.expected.txt
|
||||||
|
|
||||||
#./print_hand.py -p$1 --site="Full Tilt Poker" --hand=6367428246 > ftp.6367428246.found.txt && colordiff ftp.6367428246.found.txt ftp.6367428246.expected.txt
|
#./print_hand.py -p$1 --site="Full Tilt Poker" --hand=6367428246 > ftp.6367428246.found.txt && colordiff ftp.6367428246.found.txt ftp.6367428246.expected.txt
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user