Merge branch 'master' of git://git.assembla.com/fpdboz
This commit is contained in:
commit
8411f3ed09
|
@ -1,75 +0,0 @@
|
|||
This is partially outdated
|
||||
|
||||
File list
|
||||
=========
|
||||
.:
|
||||
docs/ Documentation files
|
||||
pyfpdb/ The main program (in python)
|
||||
setup/ Directory with files for setting up this program
|
||||
regression-test/ Directory with test data, query scripts (in python) and the regression test script (in bash)
|
||||
utils/ A couple of things that will migrate to the main prog soon
|
||||
viewer/ Directory with the GUI (in Java)
|
||||
|
||||
./docs:
|
||||
abbreviations.txt A list of abbreviations used and their meaning
|
||||
agpl-3.0.txt License of the program (everything under /code)
|
||||
benchmarks.txt Some benchmark results
|
||||
codingstyle.txt Some notes on formatting. Feel free to ignore.
|
||||
fdl-1.2.txt License of the documentation (the files in /)
|
||||
filelist.txt This file
|
||||
howto-import.txt Instructions on how to run the importer
|
||||
install-in-gentoo.txt Installation instructions for Gentoo GNU/Linux
|
||||
install-in-windows.txt Installation instructions for Windows
|
||||
readme-dev.txt Some notes, pointers and such for developers or anyone else interested in changing fpdb
|
||||
readme-overview.txt Some general info about this program - read that first
|
||||
readme-user.txt Instructions on how to use fpdb
|
||||
status.txt Details of support for poker types and sites
|
||||
tabledesign.html Table design with comments
|
||||
|
||||
./pyfpdb:
|
||||
fpdb.py The main GUI. This is what the user will start and use to access the other things.
|
||||
fpdb_import.py Main import program. Calls methods in the other files.
|
||||
Takes one hand history file as input. This is the file
|
||||
you execute, do not run the other ones individually.
|
||||
Except import_gui.py of course.
|
||||
fpdb_parse_logic.py Parses a holdem/omaha/razz/stud hand.
|
||||
fpdb_save_to_db.py Just methods to store the parsed data into SQL.
|
||||
Seperate file because these calls are very unwieldy.
|
||||
fpdb_simple.py Simple methods called by the other files. Most work is
|
||||
actually done in this file to make the other ones look
|
||||
much easier than they are.
|
||||
import_gui.py GUI interface to the importer (obselete)
|
||||
|
||||
./setup:
|
||||
insert-basedata.sql Fills sites and gametypes tables. Run this once after running the above.
|
||||
recreate-tables.sql File for mysql to recreate the tables. THIS WILL DELETE EXISTING TABLES!!!
|
||||
|
||||
./testdata:
|
||||
should be self explanatory
|
||||
|
||||
./utils:
|
||||
dump_db_basedata.py Prints the contents of the tables sites and gametypes
|
||||
fpdb_util_lib.py Helper methods for the utilities.
|
||||
get_DB_stats.py Prints some counts (like no. of players in the DB)
|
||||
get_player_stats.py Prints certain stats about players with CLI-passed constraints
|
||||
mysql-reset-tables.sh Reset tables for MySQL. THIS WILL DELETE EXISTING TABLES!!!
|
||||
print_hand.py Prints a hand in legible format.
|
||||
psql-interactive.sh *nix script to connect to a PostgreSQL database in
|
||||
interactive mode (note that we're currently only supporting MySQL)
|
||||
regression-test.sh Resets tables and checks manually verified hands for errors
|
||||
|
||||
./viewer:
|
||||
todo
|
||||
|
||||
License
|
||||
=======
|
||||
Trademarks of third parties have been used under Fair Use or similar laws.
|
||||
|
||||
Copyright 2008 Steffen Jobbagy-Felso
|
||||
Permission is granted to copy, distribute and/or modify this
|
||||
document under the terms of the GNU Free Documentation License,
|
||||
Version 1.2 as published by the Free Software Foundation; with
|
||||
no Invariant Sections, no Front-Cover Texts, and with no Back-Cover
|
||||
Texts. A copy of the license can be found in fdl-1.2.txt
|
||||
|
||||
The program itself is licensed under AGPLv3, see agpl-3.0.txt
|
|
@ -1,79 +0,0 @@
|
|||
README.txt
|
||||
updated 22 February 2010, REB
|
||||
|
||||
fpdb - Free Poker Database
|
||||
|
||||
The most accurate and up-to-date information on fpdb will be found in the wiki:
|
||||
http://fpdb.wiki.sourceforge.net/
|
||||
|
||||
Other resources are:
|
||||
Mailing list: http://sourceforge.net/mailarchive/forum.php?forum_name=fpdb-main
|
||||
Chat room(irc): #fpdb on freenode.net
|
||||
|
||||
fpdb is a free program for use with on line poker. It provides:
|
||||
Tracking of your results and statistics.
|
||||
Tracking of opponents' results statistics.
|
||||
Win/loss graphing
|
||||
Heads Up Display (HUD) with a variety of statistics
|
||||
Display of mucked cards in the HUD
|
||||
|
||||
fpdb supports:
|
||||
Sites:
|
||||
PokerStars
|
||||
Full Tilt Poker
|
||||
Everleaf Network
|
||||
Other sites are under development and are easily added
|
||||
|
||||
Games:
|
||||
Holdem
|
||||
Omaha (incl Hi/low)
|
||||
7 Card Stud (incl Hi/low)
|
||||
Razz
|
||||
Triple Draw and Badugi
|
||||
Mixed Games -- HUD under development
|
||||
|
||||
Operating Systems:
|
||||
Linux and other Unix-like, using X
|
||||
Windows
|
||||
Mac OS/X -- no support for HUD
|
||||
|
||||
Databases:
|
||||
SQLite configured by default
|
||||
MySQL
|
||||
PostgreSQL
|
||||
|
||||
Downloads:
|
||||
Releases: http://sourceforge.net/project/showfiles.php?group_id=226872
|
||||
Development code via git: http://www.assembla.com/spaces/free_poker_tools/trac_git_tool
|
||||
|
||||
Developers:
|
||||
At least 10 people have contributed code or patches. Others are welcome.
|
||||
|
||||
Source Code:
|
||||
If you received fpdb as the Windows compressed exe, then you did not
|
||||
receive souce code for fpdb or the included libraries. If you wish, you can
|
||||
obtain the source code here:
|
||||
|
||||
fpdb: see Downloads, above.
|
||||
python: http://python.org/
|
||||
gtk: http://www.gtk.org/download.html
|
||||
pygtk: http://www.pygtk.org/downloads.html
|
||||
psycopg2: http://initd.org/pub/software/psycopg/
|
||||
mysqldb: http://sourceforge.net/projects/mysql-python/files/
|
||||
sqlalchemy: http://www.sqlalchemy.org/download.html
|
||||
numpy: http://www.scipy.org/Download
|
||||
matplotlib: http://sourceforge.net/projects/matplotlib/files/
|
||||
|
||||
License
|
||||
=======
|
||||
Trademarks of third parties have been used under Fair Use or similar laws.
|
||||
|
||||
Copyright 2008 Steffen Jobbagy-Felso
|
||||
Copyright 2009,2010 Ray E. Barker
|
||||
Permission is granted to copy, distribute and/or modify this
|
||||
document under the terms of the GNU Free Documentation License,
|
||||
Version 1.2 as published by the Free Software Foundation; with
|
||||
no Invariant Sections, no Front-Cover Texts, and with no Back-Cover
|
||||
Texts. A copy of the license can be found in fdl-1.2.txt
|
||||
|
||||
fpdb itself is licensed under AGPLv3, see agpl-3.0.txt.
|
|
@ -1,93 +0,0 @@
|
|||
alpha2
|
||||
======
|
||||
Hi everyone,
|
||||
we are proud to announce the second alpha release of fpdb, the free/libre open source poker tracker. The biggest highlight is the HUD for Linux made by Ray (and perhaps Mac, not sure). But for everyone fpdb now also supports PS tournaments (SnG and MTT) and FTP ring games. There is also a new auto-importer though it currently only runs on one file per instance (but you can open multiple instances of fpdb).
|
||||
Fpdb also parses alot of new situations into the cache table for the HUD, most of which are already available through the Linux HUD. There have also been a large number of bugfixes for all kinds of things. For full details of the changes see the git commit comments.
|
||||
|
||||
You can download fpdb at https://sourceforge.net/project/showfiles.php?group_id=226872
|
||||
|
||||
Our website at http://fpdb.sourceforge.net/ will be updated shortly but in the meantime please note that the configuration file now resides in ~/.fpdb/default.conf on Linux/Mac and in C:\Documents and Settings\Application Data\fpdb\default.conf on Windows (on non-English Windows you have to translate the Documents and Settings, but not the Application data bit). Apart from that just follow the instructions on the site. I will be updating/improving the fpdb ebuild for Gentoo next week, please send me a PM or email if you would like a package for another Linux/BSD.
|
||||
|
||||
To use the HUD in Linux simply run the auto importer whilst having the table open. You will also have to rename HUD_config.xml.example to HUD_config.xml and edit the database parameters in there in addition to what is written in the install guide.
|
||||
|
||||
If you've been using fpdb alpha1 just delete the fpdb folder, follow the installation guide except for installing the dependencies, then run fpdb and run recreate tables. Note that you will have to reimport ALL your history files.
|
||||
|
||||
For external devs (in particular Youre Toast): The table design has gone through some changes, though most of it was just renaming to make a consistent naming scheme and to make it more flexible towards stud/razz type games. I do not expect to having to make any future changes to the existing fields but I cannot yet guarantee that. There will be some additional fields in particular in the HudCache table. Please let me know if you need any further fields. I realise my naming breaks the "database designer's convention" but for this project I feel ignoring this convention for the benefit of consistent naming between Python and SQL is ok.
|
||||
|
||||
|
||||
Any questions and comments please post here, send me a PM or email, post a feature request or bug report on sourceforge or use any of the other means of contact listed on our webpage.
|
||||
|
||||
Enjoy,
|
||||
The fpdb team
|
||||
|
||||
PS: I personally will be away Sun-Tue so I probably won't be responding to anything but feel free to message me anyways, but if you post here or at SF someone else might be able to help.
|
||||
|
||||
PPS: If you wanna know EXACTLY how this project is moving along follow the git tree over at [url]http://www.assembla.com/spaces/fpdb/trac_git_tool[/url]
|
||||
|
||||
|
||||
alpha1
|
||||
======
|
||||
Hi everyone,
|
||||
I am proud to announce the first release of my new poker tracking software fpdb (freepokerdb, very imaginative I know ;) ). You may wonder why I bothered when now with HM and PT3 there are at least two excellent packages to choose from.
|
||||
|
||||
Four main reasons:
|
||||
1. Fpdb is free/libre open source software. In short, this means you don't depend on me if sth. is wrong or you want something more in this program as you can freely change it yourself. You also don't have to pay anything for it. If you like it and think I deserve to be paid just drop me a mail ;)
|
||||
2. HM and PT3 only support holdem. Fpdb initially supports Holdem and Omaha, with Stud and Razz mostly implemented and coming soon.
|
||||
3. HM and PT3 run on Windows only, and for me at least did not work in wine even after installing Mono. Fpdb runs on any plattform that has the required software, which will cover roundabout 99.9% of PCs. Currently tested plattforms are Windows XP-x86 and Gentoo GNU/Linux-amd64 as well as -x86.
|
||||
You still need to run Windows or wine to run the actual poker client though.
|
||||
4. Fpdb won't irritate you with copy prevention measures.
|
||||
|
||||
To install it go to https://sourceforge.net/project/showfiles.php?group_id=226872 and download the zip or tar.bz2, unpack it, and follow the instructions in docs/install-in-* for your operating system (e.g. docs\install-in-windows.txt). Sourceforge lists the release files as source files, not as binary executables - this is correct, python will automagically compile as and when required.
|
||||
|
||||
This is alpha1, as the name indicates it is still at a very early stage. The importer and database are nearing completion but the GUI in particular is not very functional yet and the HUD is missing alltogether.
|
||||
|
||||
If anyone wishes to help with development that would be very very welcome and I've put a few notes in docs/readme-dev.txt in the download for what you could do. Or just start coding and send me the patches :)
|
||||
If you're not a programmer and you're not interested in learning it you can still help simply by trying it out and sending bug reports and feature requests. To avoid unrealistic expectations I'd like to state that it'll be a long time until fpdb reaches feature parity to established paid-for closed source software.
|
||||
|
||||
Feature List (short now, growing fast ;) ):
|
||||
|
||||
You can edit/add whatever you like, it's all python and SQL. The code should be fairly straightforward I think and I put some notes into readme-dev.txt but feel free to ask.
|
||||
|
||||
Backend, Distribution
|
||||
=====================
|
||||
- Choice of MySQL/InnoDB or PostgreSQL. (not tested on PostgreSQL)
|
||||
- It is possible to run the database on one PC, the importer on another, and then access the database with the table viewer or HUD from a third PC. (note: do NOT do this unencrypted over an untrusted network like your employer's LAN or the Internet!)
|
||||
|
||||
Site/Game Support
|
||||
=================
|
||||
- Initially only full support for PS, FTP coming soon
|
||||
- Supports Holdem, Omaha Hi and Omaha Hi/Lo. Stud and Razz coming soon.
|
||||
- Supports No Limit, Pot Limit, Fixed Limit NL, Cap NL and Cap PL
|
||||
Note that currently it does not display extra stats for NL/PL so usefulness is limited for these limit types. Suggestions welcome, I don't play these.
|
||||
- Supports ring/cash games, SnG/MTT coming soon
|
||||
|
||||
Tableviewer (tv)
|
||||
===========
|
||||
Tv takes a history filename and loads the appropriate players' stats and displays them in a tabular format. These stats currently are:
|
||||
- VPIP, PFR and Preflop 3B/4B (3B/4B is not quite correct I think)
|
||||
- Raise and Fold % on flop, turn and river. Fold only counts hands when someone raised. This can be displayed per street or as one combined value each for aggression and folding.
|
||||
- Number of hands this is based on.
|
||||
- SD/F (aka WtSD, proportion of hands where player went to showdown after seeing flop)
|
||||
- W$wSF (Won $ when seen Flop)
|
||||
- W$@SD (Won $ at showdown)
|
||||
For all stats it also displays how many hands this particular is based on
|
||||
|
||||
|
||||
IMPORTANT: The database format WILL undergo more changes and at this point I am not planning to write a converter so please keep your history files so you can re-import when necessary. Independent of this you should always keep the original raw files in a safe place with any tracking software. Should you however end up loosing your files somehow let me know and I'll try to help.
|
||||
|
||||
Please send any feedback, feature requests/suggestions, bug reports and animal names to steffen@sycamoretest.info, pick one of the contact methods listed in readme-overview.txt, send me a PM here or reply to this post.
|
||||
|
||||
|
||||
|
||||
License
|
||||
=======
|
||||
Trademarks of third parties have been used under Fair Use or similar laws.
|
||||
|
||||
Copyright 2008 Steffen Jobbagy-Felso
|
||||
Permission is granted to copy, distribute and/or modify this
|
||||
document under the terms of the GNU Free Documentation License,
|
||||
Version 1.2 as published by the Free Software Foundation; with
|
||||
no Invariant Sections, no Front-Cover Texts, and with no Back-Cover
|
||||
Texts. A copy of the license can be found in fdl-1.2.txt
|
||||
|
||||
The program itself is licensed under AGPLv3, see agpl-3.0.txt
|
File diff suppressed because it is too large
Load Diff
|
@ -1,62 +0,0 @@
|
|||
# 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
|
||||
# $Header: /var/cvsroot/gentoo-x86/games-util/fpdb/fpdb-0.10.ebuild,v 1.0 2009/1/30 steffen@sycamoretest.info Exp $
|
||||
|
||||
NEED_PYTHON=2.3
|
||||
|
||||
#inherit distutils
|
||||
|
||||
MY_P="fpdb-${PV}"
|
||||
DESCRIPTION="A database program to track your online poker games"
|
||||
HOMEPAGE="https://sourceforge.net/projects/fpdb/"
|
||||
SRC_URI="mirror://sourceforge/fpdb/${MY_P}.tar.bz2"
|
||||
|
||||
LICENSE="AGPL-3"
|
||||
SLOT="0"
|
||||
KEYWORDS="~amd64 ~x86"
|
||||
#note: this should work on other architectures too, please send me your experiences
|
||||
IUSE=""
|
||||
|
||||
RDEPEND="virtual/mysql
|
||||
dev-python/mysql-python
|
||||
>=x11-libs/gtk+-2.10
|
||||
dev-python/pygtk
|
||||
dev-python/numpy
|
||||
dev-python/matplotlib"
|
||||
|
||||
DEPEND="${RDEPEND}"
|
||||
|
||||
src_install() {
|
||||
DIRINST="${D}usr/share/games/fpdb/"
|
||||
mkdir -p "${DIRINST}"
|
||||
cp -R * "${DIRINST}" || die
|
||||
|
||||
DIRBIN="${D}usr/games/bin/"
|
||||
mkdir -p "${DIRBIN}"
|
||||
#echo "pathes"
|
||||
#echo "${DIRINST}pyfpdb/fpdb.py"
|
||||
#echo "${DIRBIN}fpdb.py"
|
||||
#echo
|
||||
echo "cd /usr/share/games/fpdb/pyfpdb/ && python fpdb.py" > "${DIRBIN}fpdb" || die
|
||||
chmod 755 "${DIRBIN}fpdb" || die
|
||||
}
|
||||
|
||||
#src_test() {
|
||||
#}
|
||||
|
||||
pkg_postinst() {
|
||||
elog "Fpdb has been installed and can be called by executing /usr/games/bin/fpdb"
|
||||
elog "You need to perform a couple more steps manually."
|
||||
elog "Please also make sure you followed instructions from previous emerges, in particular make sure you configured mysql and set a root pw for it"
|
||||
elog "Now run this command to connect to MySQL: mysql --user=root --password=yourPassword"
|
||||
elog "In the mysql command line interface you need to type these two lines (make sure you get the ; at the end)"
|
||||
elog "In the second line replace \"newPassword\" with a password of your choice"
|
||||
elog "CREATE DATABASE fpdb;"
|
||||
elog "GRANT ALL PRIVILEGES ON fpdb.* TO 'fpdb'@'localhost' IDENTIFIED BY 'newPassword' WITH GRANT OPTION;"
|
||||
elog "Finally copy the default config file from ${DIRINST}docs/default.conf to ~/.fpdb/ for every user that is to use fpdb."
|
||||
elog "You will need to edit the default.conf, in particular you need to replace the password with what you entered in the \"GRANT ALL...\""
|
||||
elog "Finally run the GUI and click the menu database -> recreate tables"
|
||||
elog "That's it! See our webpage at http://fpdb.sourceforge.net for more documentation"
|
||||
elog " "
|
||||
}
|
53
packaging/gentoo/fpdb-0.20_rc1.ebuild
Normal file
53
packaging/gentoo/fpdb-0.20_rc1.ebuild
Normal file
|
@ -0,0 +1,53 @@
|
|||
# Copyright 1999-2010 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
# created by Steffen Schaumburg, steffen@schaumburger.info
|
||||
|
||||
EAPI="2"
|
||||
NEED_PYTHON=2.5
|
||||
|
||||
#inherit distutils
|
||||
|
||||
DESCRIPTION="A database program to track your online poker games"
|
||||
HOMEPAGE="http://fpdb.sourceforge.net/"
|
||||
#SRC_URI="mirror://sourceforge/fpdb/${MY_P}.tar.bz2"
|
||||
|
||||
LICENSE="AGPL-3"
|
||||
SLOT="0"
|
||||
KEYWORDS="~amd64 ~x86"
|
||||
#note: this should work on other architectures too, please send me your experiences
|
||||
|
||||
IUSE="mysql postgres graphing"
|
||||
RDEPEND="
|
||||
mysql? ( virtual/mysql
|
||||
dev-python/mysql-python )
|
||||
postgres? ( dev-db/postgresql-server
|
||||
dev-python/psycopg )
|
||||
>=x11-libs/gtk+-2.10
|
||||
dev-python/pygtk
|
||||
graphing? ( dev-python/numpy
|
||||
dev-python/matplotlib[gtk] )
|
||||
dev-python/python-xlib"
|
||||
DEPEND="${RDEPEND}"
|
||||
|
||||
#src_install() {
|
||||
# DIRINST="${D}usr/share/games/fpdb/"
|
||||
# mkdir -p "${DIRINST}"
|
||||
# cp -R * "${DIRINST}" || die
|
||||
#
|
||||
# DIRBIN="${D}usr/games/bin/"
|
||||
# mkdir -p "${DIRBIN}"
|
||||
# #echo "pathes"
|
||||
# #echo "${DIRINST}pyfpdb/fpdb.py"
|
||||
# #echo "${DIRBIN}fpdb.py"
|
||||
# #echo
|
||||
# echo "cd /usr/share/games/fpdb/pyfpdb/ && python fpdb.py" > "${DIRBIN}fpdb" || die
|
||||
# chmod 755 "${DIRBIN}fpdb" || die
|
||||
#}
|
||||
|
||||
#src_test() {
|
||||
#}
|
||||
|
||||
pkg_postinst() {
|
||||
elog "Fpdb's dependencies have been installed. Please visit fpdb.sourceforge.net and download and unpack the archive."
|
||||
elog "You can then start fpdb by running run_fpdb.py. Good luck!"
|
||||
}
|
147
packaging/windows/py2exeWalkthroughPython26.txt
Normal file
147
packaging/windows/py2exeWalkthroughPython26.txt
Normal file
|
@ -0,0 +1,147 @@
|
|||
PY2EXE walkthrough for Python 2.6 & FPDB 0.20
|
||||
created by Gimick on 22nd June 2010
|
||||
|
||||
|
||||
Step 0 Get a fresh XP installation
|
||||
----------------------------------
|
||||
|
||||
0.1/ Using XPhome 32bit
|
||||
|
||||
Step 1, Python install
|
||||
----------------------
|
||||
|
||||
1.1/ install the following in sequence (accept all default options) there should be no errors !
|
||||
|
||||
Python 2.6.5 ... http://www.python.org/ftp/python/2.6.5/python-2.6.5.msi
|
||||
pywin 214 ... http://sourceforge.net/projects/pywin32/files/pywin32/Build%20214/pywin32-214.win32-py2.6.exe/download
|
||||
numpy 1.4.1 ... http://sourceforge.net/projects/numpy/files/NumPy/1.4.1/numpy-1.4.1-win32-superpack-python2.6.exe/download
|
||||
matplotlib 0.99.3 ... http://sourceforge.net/projects/matplotlib/files/matplotlib/matplotlib-0.99.3/matplotlib-0.99.3.win32-py2.6.exe/download
|
||||
pygtk 2.16.0 ... http://ftp.gnome.org/pub/GNOME/binaries/win32/pygtk/2.16/pygtk-2.16.0.win32-py2.6.exe
|
||||
pycairo 1.8.6 ... http://ftp.gnome.org/pub/GNOME/binaries/win32/pycairo/1.8/pycairo-1.8.6.win32-py2.6.exe
|
||||
pyGobject 2.20.0 ... http://ftp.gnome.org/pub/GNOME/binaries/win32/pygobject/2.20/pygobject-2.20.0.win32-py2.6.exe
|
||||
py2exe 0.6.9 ... http://sourceforge.net/projects/py2exe/files/py2exe/0.6.9/py2exe-0.6.9.win32-py2.6.exe/download
|
||||
|
||||
|
||||
Step 2 Setup GTK
|
||||
-----------------
|
||||
|
||||
There are quite a few GTK packages needed, and rather than install them individually, I used the official AllinOne from the GTK project.
|
||||
|
||||
2,1/ Create a new folder c:\GTK
|
||||
|
||||
2.2/ Extract the following zip file into c:\GTK
|
||||
|
||||
GTK+ all in one 2.20.0 ... http://ftp.gnome.org/pub/gnome/binaries/win32/gtk+/2.20/gtk+-bundle_2.20.0-20100406_win32.zip
|
||||
|
||||
2.3/ If everything has worked, you should have c:\GTK\bin \etc \lib \src and so on created.
|
||||
|
||||
|
||||
Step 3 Set GTK into the PATH variable
|
||||
-------------------------------------
|
||||
|
||||
The path for GTK isn't set by default, so need to let the o/s know where the GTK stuff is.
|
||||
|
||||
3.1/ Rightclick on mycomputer to show system properties
|
||||
3.2/ select advanced/environment Variables
|
||||
3.3/ in "system variables" NOT "user variables" do the following
|
||||
3.3.1/ create a new item as name: GTK_BASEPATH value: c:\GTK
|
||||
3.3.2/ edit the item "path", press home to get to the first character and insert the following text, (no quotes, including semicolon) %GTK_BASEPATH%\bin;
|
||||
|
||||
3.4/ to check, open command prompt and do:
|
||||
|
||||
dos>path ... system should respond with ... PATH=c:\GTK\bin;C:\WIN........
|
||||
|
||||
3.5/ Give it a spin to test (hopefully an application will start, if not, something has gone wrong)
|
||||
|
||||
dos> gtk-demo
|
||||
|
||||
Step 4 Get the fpdb GIT tree
|
||||
----------------------------
|
||||
|
||||
4.1/ Best to take a copy to work with; following steps will assume that the fpdb folder is on the Desktop
|
||||
|
||||
|
||||
Step 5 Put MSVCP90.dll temporarily into the fpdb folder
|
||||
-------------------------------------------------------
|
||||
|
||||
py2exe will check for MSVCP90.dll. The version installed by python2.6.5runtime is not in the path, so we will put it in place TEMPORARILY. This will/must be removed manually once the exe has been created, as we do not have a licence to redistribute.
|
||||
|
||||
Search for MSVCP90.dll (should be found in C:\WINDOWS\WinSxS\...
|
||||
copy this file TEMPORARILY to the Desktop\fpdb\pyfpdb folder
|
||||
|
||||
Step 6 Run py2exe to generate fpdb.exe
|
||||
--------------------------------------
|
||||
|
||||
6.1/ Run the script to create the fpdb.exe bundle
|
||||
|
||||
dos> cd Desktop\fpdb\pyfpdb
|
||||
dos> c:\python26\python.exe py2exe_setup.py py2exe
|
||||
|
||||
wait a while, watch lots of copying and whatever.
|
||||
|
||||
6.2/ You should next get prompted for the GTK folder.
|
||||
c:\GTK
|
||||
|
||||
6.3/ If there are no errors reported, it has probably worked, we will test soon.
|
||||
|
||||
Step 7 Delete C++runtime
|
||||
------------------------
|
||||
|
||||
This is really really important, this file must NOT be distributed, so get rid of it now to avoid issues.
|
||||
|
||||
7.1/ in Desktop\fpdb\pyfpdb\ remove the file msvcp90.dll
|
||||
|
||||
Step 8 Drag out the completed bundle
|
||||
------------------------------------
|
||||
|
||||
py2exe creates a new folder for the created software bundle, drag this out to the desktop for ease of working
|
||||
|
||||
8.1/ Drag Desktop\fpdb\pyfpdb\fpdb-yyyymmdd-exe to Desktop\
|
||||
|
||||
|
||||
Step 9 Initial run
|
||||
------------------
|
||||
|
||||
9.1/ Open the Desktop\fpdb-yyyymmdd-exe folder
|
||||
9.2/ In explorer...tools...folder options...View uncheck "Hide extensions for known file types"
|
||||
9.3/ Double click run_fpdb.bat
|
||||
9.4/ check the contents of pyfpdb\fpdb.exe.log, deal with any errors thrown
|
||||
|
||||
Step 10 drum roll.......
|
||||
------------------------
|
||||
|
||||
10.1/ hopefully, fpdb will run
|
||||
10.2/ Try out a few options, deal with any errors reported
|
||||
|
||||
Observe that the msvcp90.dll was provided by the python runtime package, so we don't have to install the separate package from Microsoft. End-users will, however need the dependency.
|
||||
|
||||
Step 11 pruning
|
||||
---------------
|
||||
|
||||
11.1/ The generated folder is 100+MB and can be pruned by removing the following directories:
|
||||
|
||||
pyfpdb/lib/glib-2.0
|
||||
pyfpdb/lib/gtk-2.0/include
|
||||
pyfpdb/lib/pkgconfig
|
||||
pyfpdb/share/aclocal
|
||||
pyfpdb/share/doc
|
||||
pyfpdb/share/glib-2.0
|
||||
pyfpdb/share/gtk-2.0
|
||||
pyfpdb/share/gtk-doc
|
||||
pyfpdb/share/locale
|
||||
pyfpdb/share/man
|
||||
|
||||
Step 12 rename folder
|
||||
---------------------
|
||||
|
||||
12/ Rename the folder to something meaningful to the community
|
||||
|
||||
Step 13 Compress to executable archive
|
||||
--------------------------------------
|
||||
|
||||
13.1/ Download and install 7zip 914 ... http://sourceforge.net/projects/sevenzip/files/7-Zip/9.14/7z914.exe/download
|
||||
13.2/ Rightclick on fpdb executable folder, select 7zip Add to archive... select SFX archive option switch
|
||||
13.3/ Test the created exe file
|
||||
|
||||
|
||||
|
|
@ -32,6 +32,7 @@ import string
|
|||
import traceback
|
||||
import shutil
|
||||
import locale
|
||||
import re
|
||||
import xml.dom.minidom
|
||||
from xml.dom.minidom import Node
|
||||
|
||||
|
@ -248,6 +249,8 @@ class Site:
|
|||
self.enabled = string_to_bool(node.getAttribute("enabled"), default=True)
|
||||
self.xpad = node.getAttribute("xpad")
|
||||
self.ypad = node.getAttribute("ypad")
|
||||
self.xshift = node.getAttribute("xshift")
|
||||
self.yshift = node.getAttribute("yshift")
|
||||
self.layout = {}
|
||||
|
||||
print "Loading site", self.site_name
|
||||
|
@ -259,6 +262,8 @@ class Site:
|
|||
# Site defaults
|
||||
self.xpad = 1 if self.xpad == "" else int(self.xpad)
|
||||
self.ypad = 0 if self.ypad == "" else int(self.ypad)
|
||||
self.xshift = 1 if self.xshift == "" else int(self.xshift)
|
||||
self.yshift = 0 if self.yshift == "" else int(self.yshift)
|
||||
self.font_size = 7 if self.font_size == "" else int(self.font_size)
|
||||
self.hudopacity = 1.0 if self.hudopacity == "" else float(self.hudopacity)
|
||||
|
||||
|
@ -296,12 +301,18 @@ class Game:
|
|||
self.cols = int( node.getAttribute("cols") )
|
||||
self.xpad = node.getAttribute("xpad")
|
||||
self.ypad = node.getAttribute("ypad")
|
||||
self.xshift = node.getAttribute("xshift")
|
||||
self.yshift = node.getAttribute("yshift")
|
||||
|
||||
# Defaults
|
||||
if self.xpad == "": self.xpad = 1
|
||||
else: self.xpad = int(self.xpad)
|
||||
if self.ypad == "": self.ypad = 0
|
||||
else: self.ypad = int(self.ypad)
|
||||
if self.xshift == "": self.xshift = 1
|
||||
else: self.xshift = int(self.xshift)
|
||||
if self.yshift == "": self.yshift = 0
|
||||
else: self.yshift = int(self.yshift)
|
||||
|
||||
aux_text = node.getAttribute("aux")
|
||||
aux_list = aux_text.split(',')
|
||||
|
@ -334,6 +345,8 @@ class Game:
|
|||
temp = temp + " cols = %d\n" % self.cols
|
||||
temp = temp + " xpad = %d\n" % self.xpad
|
||||
temp = temp + " ypad = %d\n" % self.ypad
|
||||
temp = temp + " xshift = %d\n" % self.xshift
|
||||
temp = temp + " yshift = %d\n" % self.yshift
|
||||
temp = temp + " aux = %s\n" % self.aux
|
||||
|
||||
for stat in self.stats.keys():
|
||||
|
@ -662,7 +675,34 @@ class Config:
|
|||
pass
|
||||
|
||||
with open(file, 'w') as f:
|
||||
self.doc.writexml(f)
|
||||
#self.doc.writexml(f)
|
||||
f.write( self.wrap_long_lines( self.doc.toxml() ) )
|
||||
|
||||
def wrap_long_lines(self, s):
|
||||
lines = [ self.wrap_long_line(l) for l in s.splitlines() ]
|
||||
return('\n'.join(lines) + '\n')
|
||||
|
||||
def wrap_long_line(self, l):
|
||||
if 'config_wrap_len' in self.general:
|
||||
wrap_len = int(self.general['config_wrap_len'])
|
||||
else:
|
||||
wrap_len = -1 # < 0 means no wrap
|
||||
|
||||
if wrap_len >= 0 and len(l) > wrap_len:
|
||||
m = re.compile('\s+\S+\s+')
|
||||
mo = m.match(l)
|
||||
if mo:
|
||||
indent_len = mo.end()
|
||||
#print "indent = %s (%s)" % (indent_len, l[0:indent_len])
|
||||
indent = '\n' + ' ' * indent_len
|
||||
m = re.compile('(\S+="[^"]+"\s+)')
|
||||
parts = [x for x in m.split(l[indent_len:]) if x]
|
||||
if len(parts) > 1:
|
||||
#print "parts =", parts
|
||||
l = l[0:indent_len] + indent.join(parts)
|
||||
return(l)
|
||||
else:
|
||||
return(l)
|
||||
|
||||
def edit_layout(self, site_name, max, width = None, height = None,
|
||||
fav_seat = None, locations = None):
|
||||
|
@ -951,6 +991,8 @@ class Config:
|
|||
parms["enabled"] = self.supported_sites[site].enabled
|
||||
parms["xpad"] = self.supported_sites[site].xpad
|
||||
parms["ypad"] = self.supported_sites[site].ypad
|
||||
parms["xshift"] = self.supported_sites[site].xshift
|
||||
parms["yshift"] = self.supported_sites[site].yshift
|
||||
return parms
|
||||
|
||||
def set_site_parameters(self, site_name, converter = None, decoder = None,
|
||||
|
@ -1002,6 +1044,8 @@ class Config:
|
|||
param['cols'] = self.supported_games[name].cols
|
||||
param['xpad'] = self.supported_games[name].xpad
|
||||
param['ypad'] = self.supported_games[name].ypad
|
||||
param['xshift'] = self.supported_games[name].xshift
|
||||
param['yshift'] = self.supported_games[name].yshift
|
||||
param['aux'] = self.supported_games[name].aux
|
||||
return param
|
||||
|
||||
|
|
|
@ -1633,7 +1633,12 @@ class Database:
|
|||
pdata[p]['street3CheckCallRaiseChance'],
|
||||
pdata[p]['street3CheckCallRaiseDone'],
|
||||
pdata[p]['street4CheckCallRaiseChance'],
|
||||
pdata[p]['street4CheckCallRaiseDone']
|
||||
pdata[p]['street4CheckCallRaiseDone'],
|
||||
pdata[p]['street0Raises'],
|
||||
pdata[p]['street1Raises'],
|
||||
pdata[p]['street2Raises'],
|
||||
pdata[p]['street3Raises'],
|
||||
pdata[p]['street4Raises']
|
||||
) )
|
||||
|
||||
q = self.sql.query['store_hands_players']
|
||||
|
@ -1662,7 +1667,7 @@ class Database:
|
|||
#print "DEBUG: %s %s %s" %(hid, pids, pdata)
|
||||
inserts = []
|
||||
for p in pdata:
|
||||
line = [0]*61
|
||||
line = [0]*76
|
||||
|
||||
line[0] = 1 # HDs
|
||||
if pdata[p]['street0VPI']: line[1] = 1
|
||||
|
@ -1719,13 +1724,29 @@ class Database:
|
|||
if pdata[p]['street3CheckCallRaiseDone']: line[52] = 1
|
||||
if pdata[p]['street4CheckCallRaiseChance']: line[53] = 1
|
||||
if pdata[p]['street4CheckCallRaiseDone']: line[54] = 1
|
||||
line[55] = gid # gametypeId
|
||||
line[56] = pids[p] # playerId
|
||||
line[57] = len(pids) # activeSeats
|
||||
if pdata[p]['street0Calls']: line[55] = 1
|
||||
if pdata[p]['street1Calls']: line[56] = 1
|
||||
if pdata[p]['street2Calls']: line[57] = 1
|
||||
if pdata[p]['street3Calls']: line[58] = 1
|
||||
if pdata[p]['street4Calls']: line[59] = 1
|
||||
if pdata[p]['street0Bets']: line[60] = 1
|
||||
if pdata[p]['street1Bets']: line[61] = 1
|
||||
if pdata[p]['street2Bets']: line[62] = 1
|
||||
if pdata[p]['street3Bets']: line[63] = 1
|
||||
if pdata[p]['street4Bets']: line[64] = 1
|
||||
if pdata[p]['street0Raises']: line[65] = 1
|
||||
if pdata[p]['street1Raises']: line[66] = 1
|
||||
if pdata[p]['street2Raises']: line[67] = 1
|
||||
if pdata[p]['street3Raises']: line[68] = 1
|
||||
if pdata[p]['street4Raises']: line[69] = 1
|
||||
|
||||
line[70] = gid # gametypeId
|
||||
line[71] = pids[p] # playerId
|
||||
line[72] = len(pids) # activeSeats
|
||||
pos = {'B':'B', 'S':'S', 0:'D', 1:'C', 2:'M', 3:'M', 4:'M', 5:'E', 6:'E', 7:'E', 8:'E', 9:'E' }
|
||||
line[58] = pos[pdata[p]['position']]
|
||||
line[59] = pdata[p]['tourneyTypeId']
|
||||
line[60] = styleKey # styleKey
|
||||
line[73] = pos[pdata[p]['position']]
|
||||
line[74] = pdata[p]['tourneyTypeId']
|
||||
line[75] = styleKey # styleKey
|
||||
inserts.append(line)
|
||||
|
||||
|
||||
|
|
|
@ -62,6 +62,7 @@ class DerivedStats():
|
|||
for i in range(5):
|
||||
self.handsplayers[player[1]]['street%dCalls' % i] = 0
|
||||
self.handsplayers[player[1]]['street%dBets' % i] = 0
|
||||
self.handsplayers[player[1]]['street%dRaises' % i] = 0
|
||||
for i in range(1,5):
|
||||
self.handsplayers[player[1]]['street%dCBChance' %i] = False
|
||||
self.handsplayers[player[1]]['street%dCBDone' %i] = False
|
||||
|
|
|
@ -214,8 +214,8 @@ class GuiAutoImport (threading.Thread):
|
|||
stderr=subprocess.PIPE, # only needed for py2exe
|
||||
universal_newlines=True
|
||||
)
|
||||
self.pipe_to_hud.stdout.close()
|
||||
self.pipe_to_hud.stderr.close()
|
||||
#self.pipe_to_hud.stdout.close()
|
||||
#self.pipe_to_hud.stderr.close()
|
||||
except:
|
||||
err = traceback.extract_tb(sys.exc_info()[2])[-1]
|
||||
#self.addText( "\n*** GuiAutoImport Error opening pipe: " + err[2] + "(" + str(err[1]) + "): " + str(sys.exc_info()[1]))
|
||||
|
|
|
@ -228,9 +228,9 @@ class GuiGraphViewer (threading.Thread):
|
|||
self.ax.plot(blue, color='blue', label='Showdown: $%.2f' %(blue[-1]))
|
||||
self.ax.plot(red, color='red', label='Non-showdown: $%.2f' %(red[-1]))
|
||||
if sys.version[0:3] == '2.5':
|
||||
self.ax.legend(loc='best', shadow=True, prop=FontProperties(size='smaller'))
|
||||
self.ax.legend(loc='upper left', shadow=True, prop=FontProperties(size='smaller'))
|
||||
else:
|
||||
self.ax.legend(loc='best', fancybox=True, shadow=True, prop=FontProperties(size='smaller'))
|
||||
self.ax.legend(loc='upper left', fancybox=True, shadow=True, prop=FontProperties(size='smaller'))
|
||||
|
||||
self.graphBox.add(self.canvas)
|
||||
self.canvas.show()
|
||||
|
|
|
@ -93,10 +93,13 @@ class GuiPlayerStats (threading.Thread):
|
|||
, ["plposition", False, "Posn", 1.0, "%s", "str"] # true not allowed for this line (set in code)
|
||||
, ["pname", False, "Name", 0.0, "%s", "str"] # true not allowed for this line (set in code)
|
||||
, ["n", True, "Hds", 1.0, "%1.0f", "str"]
|
||||
, ["avgseats", False, "Seats", 1.0, "%3.1f", "str"]
|
||||
, ["avgseats", False, "Seats", 1.0, "%3.1f", "str"]
|
||||
, ["vpip", True, "VPIP", 1.0, "%3.1f", "str"]
|
||||
, ["pfr", True, "PFR", 1.0, "%3.1f", "str"]
|
||||
, ["pf3", True, "PF3", 1.0, "%3.1f", "str"]
|
||||
, ["aggfac", True, "AggFac", 1.0, "%2.2f", "str"]
|
||||
, ["aggfrq", True, "AggFreq", 1.0, "%3.1f", "str"]
|
||||
, ["conbet", True, "ContBet", 1.0, "%3.1f", "str"]
|
||||
, ["steals", True, "Steals", 1.0, "%3.1f", "str"]
|
||||
, ["saw_f", True, "Saw_F", 1.0, "%3.1f", "str"]
|
||||
, ["sawsd", True, "SawSD", 1.0, "%3.1f", "str"]
|
||||
|
|
|
@ -30,10 +30,11 @@ import Configuration
|
|||
|
||||
class GuiPrefs:
|
||||
|
||||
def __init__(self, config, mainwin, dia):
|
||||
def __init__(self, config, mainwin, dia, parentwin):
|
||||
self.config = config
|
||||
self.main_window = mainwin
|
||||
self.dialog = dia
|
||||
self.parent_window = parentwin #need to pass reference of parent, to set transient
|
||||
|
||||
self.tree_box = gtk.ScrolledWindow()
|
||||
self.tree_box.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
|
||||
|
@ -60,7 +61,7 @@ class GuiPrefs:
|
|||
configColumn.pack_start(cRender, True)
|
||||
configColumn.add_attribute(cRender, 'text', 1)
|
||||
|
||||
configColumn = gtk.TreeViewColumn("Value")
|
||||
configColumn = gtk.TreeViewColumn("Value (double-click to change)")
|
||||
self.configView.append_column(configColumn)
|
||||
cRender = gtk.CellRendererText()
|
||||
configColumn.pack_start(cRender, True)
|
||||
|
@ -120,7 +121,7 @@ class GuiPrefs:
|
|||
name = tmodel.get_value( iter, 1 )
|
||||
val = tmodel.get_value( iter, 2 )
|
||||
dia_edit = gtk.Dialog(name,
|
||||
self.main_window,
|
||||
self.parent_window,
|
||||
gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
|
||||
(gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT,
|
||||
gtk.STOCK_OK, gtk.RESPONSE_ACCEPT))
|
||||
|
@ -162,7 +163,8 @@ if __name__=="__main__":
|
|||
(gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT,
|
||||
gtk.STOCK_SAVE, gtk.RESPONSE_ACCEPT))
|
||||
dia.set_default_size(700, 500)
|
||||
prefs = GuiPrefs(config, win, dia.vbox)
|
||||
pw=dia #pass parent window
|
||||
prefs = GuiPrefs(config, win, dia.vbox,pw)
|
||||
response = dia.run()
|
||||
if response == gtk.RESPONSE_ACCEPT:
|
||||
# save updated config
|
||||
|
|
|
@ -508,6 +508,9 @@ Left-Drag to Move"
|
|||
<pu_stat pu_stat_name="a_freq2"> </pu_stat>
|
||||
<pu_stat pu_stat_name="a_freq3"> </pu_stat>
|
||||
<pu_stat pu_stat_name="a_freq4"> </pu_stat>
|
||||
<pu_stat pu_stat_name="agg_freq"> </pu_stat>
|
||||
<pu_stat pu_stat_name="agg_fact"> </pu_stat>
|
||||
<pu_stat pu_stat_name="cbet"> </pu_stat>
|
||||
<pu_stat pu_stat_name="cb1"> </pu_stat>
|
||||
<pu_stat pu_stat_name="cb2"> </pu_stat>
|
||||
<pu_stat pu_stat_name="cb3"> </pu_stat>
|
||||
|
|
|
@ -2,6 +2,13 @@
|
|||
|
||||
<FreePokerToolsConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FreePokerToolsConfig.xsd">
|
||||
|
||||
<!-- config_wrap_len is preferred max line length in this file, -1 means no max
|
||||
day_start is time that logical day starts, e.g. 5 means that any play
|
||||
between 00:00 and 04:59:59 counts as being on the previous day -->
|
||||
<general config_wrap_len="-1"
|
||||
day_start="5"
|
||||
/>
|
||||
|
||||
<import callFpdbHud = "True" interval = "10" fastStoreHudCache="False" hhArchiveBase="~/.fpdb/HandHistories/" saveActions="True"></import>
|
||||
|
||||
<!-- These values determine what stats are displayed in the HUD
|
||||
|
@ -114,6 +121,10 @@ Left-Drag to Move"
|
|||
hudopacity="1.0"
|
||||
font="Sans"
|
||||
font_size="8"
|
||||
xpad="1"
|
||||
ypad="0"
|
||||
xshift="0"
|
||||
yshift="0"
|
||||
supported_games="holdem,razz,omahahi,omahahilo,studhi,studhilo">
|
||||
<layout max="8" width="792" height="546" fav_seat="0">
|
||||
<location seat="1" x="684" y="61"> </location>
|
||||
|
@ -559,6 +570,9 @@ Left-Drag to Move"
|
|||
<pu_stat pu_stat_name="a_freq2"> </pu_stat>
|
||||
<pu_stat pu_stat_name="a_freq3"> </pu_stat>
|
||||
<pu_stat pu_stat_name="a_freq4"> </pu_stat>
|
||||
<pu_stat pu_stat_name="agg_freq"> </pu_stat>
|
||||
<pu_stat pu_stat_name="agg_fact"> </pu_stat>
|
||||
<pu_stat pu_stat_name="cbet"> </pu_stat>
|
||||
<pu_stat pu_stat_name="cb1"> </pu_stat>
|
||||
<pu_stat pu_stat_name="cb2"> </pu_stat>
|
||||
<pu_stat pu_stat_name="cb3"> </pu_stat>
|
||||
|
|
|
@ -345,7 +345,7 @@ For sites (currently only Carbon Poker) which record "all in" as a special actio
|
|||
self.actions['BLINDSANTES'].append(act)
|
||||
|
||||
if blindtype == 'both':
|
||||
# work with the real ammount. limit games are listed as $1, $2, where
|
||||
# work with the real amount. limit games are listed as $1, $2, where
|
||||
# the SB 0.50 and the BB is $1, after the turn the minimum bet amount is $2....
|
||||
amount = self.bb
|
||||
self.bets['BLINDSANTES'][player].append(Decimal(self.sb))
|
||||
|
|
|
@ -87,6 +87,7 @@ class Hud:
|
|||
(font, font_size) = config.get_default_font(self.table.site)
|
||||
self.colors = config.get_default_colors(self.table.site)
|
||||
self.hud_ui = config.get_hud_ui_parameters()
|
||||
self.site_params = config.get_site_parameters(self.table.site)
|
||||
|
||||
self.backgroundcolor = gtk.gdk.color_parse(self.colors['hudbgcolor'])
|
||||
self.foregroundcolor = gtk.gdk.color_parse(self.colors['hudfgcolor'])
|
||||
|
@ -457,7 +458,7 @@ class Hud:
|
|||
if self.table.x != x or self.table.y != y:
|
||||
self.table.x = x
|
||||
self.table.y = y
|
||||
self.main_window.move(x, y)
|
||||
self.main_window.move(x + self.site_params['xshift'], y + self.site_params['yshift'])
|
||||
adj = self.adj_seats(self.hand, self.config)
|
||||
loc = self.config.get_locations(self.table.site, self.max)
|
||||
# TODO: is stat_windows getting converted somewhere from a list to a dict, for no good reason?
|
||||
|
|
|
@ -145,13 +145,12 @@ class PokerStars(HandHistoryConverter):
|
|||
mg = m.groupdict()
|
||||
# translations from captured groups to fpdb info strings
|
||||
Lim_Blinds = { '0.04': ('0.01', '0.02'), '0.10': ('0.02', '0.05'), '0.20': ('0.05', '0.10'),
|
||||
'0.50': ('0.10', '0.25'), '1.00': ('0.25', '0.50'), '2.00': ('0.50', '1.00'),
|
||||
'2': ('0.50', '1.00'), '4': ('1.00', '2.00'), '6': ('1.00', '3.00'),
|
||||
'4.00': ('1.00', '2.00'), '6.00': ('1.00', '3.00'), '10.00': ('2.00', '5.00'),
|
||||
'20.00': ('5.00', '10.00'), '30.00': ('10.00', '15.00'), '60.00': ('15.00', '30.00'),
|
||||
'100.00': ('25.00', '50.00'),'200.00': ('50.00', '100.00'),'400.00': ('100.00', '200.00'),
|
||||
'1000.00': ('250.00', '500.00')}
|
||||
|
||||
'0.40': ('0.10', '0.20'), '0.50': ('0.10', '0.25'), '1.00': ('0.25', '0.50'),
|
||||
'2.00': ('0.50', '1.00'), '2': ('0.50', '1.00'), '4' : ('1.00', '2.00'),
|
||||
'4.00': ('1.00', '2.00'), '6': ('1.00', '3.00'), '6.00': ('1.00', '3.00'),
|
||||
'10.00': ('2.00', '5.00'), '20.00': ('5.00', '10.00'), '30.00': ('10.00', '15.00'),
|
||||
'60.00': ('15.00', '30.00'), '100.00': ('25.00', '50.00'), '200.00': ('50.00', '100.00'),
|
||||
'400.00': ('100.00', '200.00'), '1000.00': ('250.00', '500.00')}
|
||||
|
||||
limits = { 'No Limit':'nl', 'Pot Limit':'pl', 'Limit':'fl', 'LIMIT':'fl' }
|
||||
games = { # base, category
|
||||
|
@ -196,7 +195,6 @@ class PokerStars(HandHistoryConverter):
|
|||
log.error("determineGameType: Raising FpdbParseError")
|
||||
raise FpdbParseError("Lim_Blinds has no lookup for '%s'" % mg['BB'])
|
||||
|
||||
# NB: SB, BB must be interpreted as blinds or bets depending on limit type.
|
||||
return info
|
||||
|
||||
def readHandInfo(self, hand):
|
||||
|
|
280
pyfpdb/SQL.py
280
pyfpdb/SQL.py
|
@ -819,7 +819,6 @@ class Sql:
|
|||
street2Raises INT,
|
||||
street3Raises INT,
|
||||
street4Raises INT,
|
||||
|
||||
actionString REAL)
|
||||
"""
|
||||
|
||||
|
@ -1337,6 +1336,21 @@ class Sql:
|
|||
sum(hc.street3CheckCallRaiseDone) AS ccr_3,
|
||||
sum(hc.street4CheckCallRaiseChance) AS ccr_opp_4,
|
||||
sum(hc.street4CheckCallRaiseDone) AS ccr_4
|
||||
sum(hc.street0Calls) AS call_0,
|
||||
sum(hc.street1Calls) AS call_1,
|
||||
sum(hc.street2Calls) AS call_2,
|
||||
sum(hc.street3Calls) AS call_3,
|
||||
sum(hc.street4Calls) AS call_4,
|
||||
sum(hc.street0Bets) AS bet_0,
|
||||
sum(hc.street1Bets) AS bet_1,
|
||||
sum(hc.street2Bets) AS bet_2,
|
||||
sum(hc.street3Bets) AS bet_3,
|
||||
sum(hc.street4Bets) AS bet_4,
|
||||
sum(hc.street0Raises) AS raise_0,
|
||||
sum(hc.street1Raises) AS raise_1,
|
||||
sum(hc.street2Raises) AS raise_2,
|
||||
sum(hc.street3Raises) AS raise_3,
|
||||
sum(hc.street4Raises) AS raise_4
|
||||
FROM Hands h
|
||||
INNER JOIN HandsPlayers hp ON (hp.handId = h.id)
|
||||
INNER JOIN HudCache hc ON ( hc.PlayerId = hp.PlayerId+0
|
||||
|
@ -1420,7 +1434,22 @@ class Sql:
|
|||
sum(hc.street3CheckCallRaiseChance) AS ccr_opp_3,
|
||||
sum(hc.street3CheckCallRaiseDone) AS ccr_3,
|
||||
sum(hc.street4CheckCallRaiseChance) AS ccr_opp_4,
|
||||
sum(hc.street4CheckCallRaiseDone) AS ccr_4
|
||||
sum(hc.street4CheckCallRaiseDone) AS ccr_4,
|
||||
sum(hc.street0Calls) AS call_0,
|
||||
sum(hc.street1Calls) AS call_1,
|
||||
sum(hc.street2Calls) AS call_2,
|
||||
sum(hc.street3Calls) AS call_3,
|
||||
sum(hc.street4Calls) AS call_4,
|
||||
sum(hc.street0Bets) AS bet_0,
|
||||
sum(hc.street1Bets) AS bet_1,
|
||||
sum(hc.street2Bets) AS bet_2,
|
||||
sum(hc.street3Bets) AS bet_3,
|
||||
sum(hc.street4Bets) AS bet_4,
|
||||
sum(hc.street0Raises) AS raise_0,
|
||||
sum(hc.street1Raises) AS raise_1,
|
||||
sum(hc.street2Raises) AS raise_2,
|
||||
sum(hc.street3Raises) AS raise_3,
|
||||
sum(hc.street4Raises) AS raise_4
|
||||
FROM Hands h
|
||||
INNER JOIN HandsPlayers hp ON (hp.handId = h.id)
|
||||
INNER JOIN HudCache hc ON (hc.playerId = hp.playerId)
|
||||
|
@ -1531,7 +1560,22 @@ class Sql:
|
|||
cast(hp2.street3CheckCallRaiseChance as <signed>integer) AS ccr_opp_3,
|
||||
cast(hp2.street3CheckCallRaiseDone as <signed>integer) AS ccr_3,
|
||||
cast(hp2.street4CheckCallRaiseChance as <signed>integer) AS ccr_opp_4,
|
||||
cast(hp2.street4CheckCallRaiseDone as <signed>integer) AS ccr_4
|
||||
cast(hp2.street4CheckCallRaiseDone as <signed>integer) AS ccr_4,
|
||||
cast(hp2.street0Calls as <signed>integer) AS call_0,
|
||||
cast(hp2.street1Calls as <signed>integer) AS call_1,
|
||||
cast(hp2.street2Calls as <signed>integer) AS call_2,
|
||||
cast(hp2.street3Calls as <signed>integer) AS call_3,
|
||||
cast(hp2.street4Calls as <signed>integer) AS call_4,
|
||||
cast(hp2.street0Bets as <signed>integer) AS bet_0,
|
||||
cast(hp2.street1Bets as <signed>integer) AS bet_1,
|
||||
cast(hp2.street2Bets as <signed>integer) AS bet_2,
|
||||
cast(hp2.street3Bets as <signed>integer) AS bet_3,
|
||||
cast(hp2.street4Bets as <signed>integer) AS bet_4,
|
||||
cast(hp2.street0Raises as <signed>integer) AS raise_0,
|
||||
cast(hp2.street1Raises as <signed>integer) AS raise_1,
|
||||
cast(hp2.street2Raises as <signed>integer) AS raise_2,
|
||||
cast(hp2.street3Raises as <signed>integer) AS raise_3,
|
||||
cast(hp2.street4Raises as <signed>integer) AS raise_4
|
||||
FROM
|
||||
Hands h
|
||||
INNER JOIN Hands h2 ON (h2.id > %s AND h2.tableName = h.tableName)
|
||||
|
@ -1618,8 +1662,23 @@ class Sql:
|
|||
cast(hp2.street3CheckCallRaiseChance as <signed>integer) AS ccr_opp_3,
|
||||
cast(hp2.street3CheckCallRaiseDone as <signed>integer) AS ccr_3,
|
||||
cast(hp2.street4CheckCallRaiseChance as <signed>integer) AS ccr_opp_4,
|
||||
cast(hp2.street4CheckCallRaiseDone as <signed>integer) AS ccr_4
|
||||
FROM Hands h /* this hand */
|
||||
cast(hp2.street4CheckCallRaiseDone as <signed>integer) AS ccr_4,
|
||||
cast(hp2.street0Calls as <signed>integer) AS call_0,
|
||||
cast(hp2.street1Calls as <signed>integer) AS call_1,
|
||||
cast(hp2.street2Calls as <signed>integer) AS call_2,
|
||||
cast(hp2.street3Calls as <signed>integer) AS call_3,
|
||||
cast(hp2.street4Calls as <signed>integer) AS call_4,
|
||||
cast(hp2.street0Bets as <signed>integer) AS bet_0,
|
||||
cast(hp2.street1Bets as <signed>integer) AS bet_1,
|
||||
cast(hp2.street2Bets as <signed>integer) AS bet_2,
|
||||
cast(hp2.street3Bets as <signed>integer) AS bet_3,
|
||||
cast(hp2.street4Bets as <signed>integer) AS bet_4,
|
||||
cast(hp2.street0Raises as <signed>integer) AS raise_0,
|
||||
cast(hp2.street1Raises as <signed>integer) AS raise_1,
|
||||
cast(hp2.street2Raises as <signed>integer) AS raise_2,
|
||||
cast(hp2.street3Raises as <signed>integer) AS raise_3,
|
||||
cast(hp2.street4Raises as <signed>integer) AS raise_4
|
||||
FROM Hands h /* this hand */
|
||||
INNER JOIN Hands h2 ON ( h2.id > %s /* other hands */
|
||||
AND h2.tableName = h.tableName)
|
||||
INNER JOIN HandsPlayers hp ON (h.id = hp.handId) /* players in this hand */
|
||||
|
@ -1706,8 +1765,23 @@ class Sql:
|
|||
cast(hp2.street3CheckCallRaiseChance as <signed>integer) AS ccr_opp_3,
|
||||
cast(hp2.street3CheckCallRaiseDone as <signed>integer) AS ccr_3,
|
||||
cast(hp2.street4CheckCallRaiseChance as <signed>integer) AS ccr_opp_4,
|
||||
cast(hp2.street4CheckCallRaiseDone as <signed>integer) AS ccr_4
|
||||
FROM Hands h /* this hand */
|
||||
cast(hp2.street4CheckCallRaiseDone as <signed>integer) AS ccr_4,
|
||||
cast(hp2.street0Calls as <signed>integer) AS call_0,
|
||||
cast(hp2.street1Calls as <signed>integer) AS call_1,
|
||||
cast(hp2.street2Calls as <signed>integer) AS call_2,
|
||||
cast(hp2.street3Calls as <signed>integer) AS call_3,
|
||||
cast(hp2.street4Calls as <signed>integer) AS call_4,
|
||||
cast(hp2.street0Bets as <signed>integer) AS bet_0,
|
||||
cast(hp2.street1Bets as <signed>integer) AS bet_1,
|
||||
cast(hp2.street2Bets as <signed>integer) AS bet_2,
|
||||
cast(hp2.street3Bets as <signed>integer) AS bet_3,
|
||||
cast(hp2.street4Bets as <signed>integer) AS bet_4,
|
||||
cast(hp2.street0Raises as <signed>integer) AS raise_0,
|
||||
cast(hp2.street1Raises as <signed>integer) AS raise_1,
|
||||
cast(hp2.street2Raises as <signed>integer) AS raise_2,
|
||||
cast(hp2.street3Raises as <signed>integer) AS raise_3,
|
||||
cast(hp2.street4Raises as <signed>integer) AS raise_4
|
||||
FROM Hands h /* this hand */
|
||||
INNER JOIN Hands h2 ON ( h2.id > %s /* other hands */
|
||||
AND h2.tableName = h.tableName)
|
||||
INNER JOIN HandsPlayers hp ON (h.id = hp.handId) /* players in this hand */
|
||||
|
@ -1913,6 +1987,18 @@ class Sql:
|
|||
else 100.0*(sum(cast(hp.street1Aggr as <signed>integer))+sum(cast(hp.street2Aggr as <signed>integer))+sum(cast(hp.street3Aggr as <signed>integer)))
|
||||
/(sum(cast(hp.street1Seen as <signed>integer))+sum(cast(hp.street2Seen as <signed>integer))+sum(cast(hp.street3Seen as <signed>integer)))
|
||||
end AS pofafq
|
||||
,case when sum(cast(hp.street1Calls as <signed>integer))+ sum(cast(hp.street2Calls as <signed>integer))+ sum(cast(hp.street3Calls as <signed>integer))+ sum(cast(hp.street4Calls as <signed>integer)) = 0 then -999
|
||||
else (sum(cast(hp.street1Aggr as <signed>integer)) + sum(cast(hp.street2Aggr as <signed>integer)) + sum(cast(hp.street3Aggr as <signed>integer)) + sum(cast(hp.street4Aggr as <signed>integer)))
|
||||
/(sum(cast(hp.street1Calls as <signed>integer))+ sum(cast(hp.street2Calls as <signed>integer))+ sum(cast(hp.street3Calls as <signed>integer))+ sum(cast(hp.street4Calls as <signed>integer)))
|
||||
end AS aggfac
|
||||
,100.0*(sum(cast(hp.street1Aggr as <signed>integer)) + sum(cast(hp.street2Aggr as <signed>integer)) + sum(cast(hp.street3Aggr as <signed>integer)) + sum(cast(hp.street4Aggr as <signed>integer)))
|
||||
/ ((sum(cast(hp.foldToOtherRaisedStreet1 as <signed>integer))+ sum(cast(hp.foldToOtherRaisedStreet2 as <signed>integer))+ sum(cast(hp.foldToOtherRaisedStreet3 as <signed>integer))+ sum(cast(hp.foldToOtherRaisedStreet4 as <signed>integer))) +
|
||||
(sum(cast(hp.street1Calls as <signed>integer))+ sum(cast(hp.street2Calls as <signed>integer))+ sum(cast(hp.street3Calls as <signed>integer))+ sum(cast(hp.street4Calls as <signed>integer))) +
|
||||
(sum(cast(hp.street1Aggr as <signed>integer)) + sum(cast(hp.street2Aggr as <signed>integer)) + sum(cast(hp.street3Aggr as <signed>integer)) + sum(cast(hp.street4Aggr as <signed>integer))) )
|
||||
AS aggfrq
|
||||
,100.0*(sum(cast(hp.street1CBDone as <signed>integer)) + sum(cast(hp.street2CBDone as <signed>integer)) + sum(cast(hp.street2CBDone as <signed>integer)) + sum(cast(hp.street4CBDone as <signed>integer)))
|
||||
/ (sum(cast(hp.street1CBChance as <signed>integer))+ sum(cast(hp.street2CBChance as <signed>integer))+ sum(cast(hp.street3CBChance as <signed>integer))+ sum(cast(hp.street4CBChance as <signed>integer)))
|
||||
AS conbet
|
||||
,sum(hp.totalProfit)/100.0 AS net
|
||||
,sum(hp.rake)/100.0 AS rake
|
||||
,100.0*avg(hp.totalProfit/(gt.bigBlind+0.0)) AS bbper100
|
||||
|
@ -1998,6 +2084,18 @@ class Sql:
|
|||
else 100.0*(sum(cast(hp.street1Aggr as <signed>integer))+sum(cast(hp.street2Aggr as <signed>integer))+sum(cast(hp.street3Aggr as <signed>integer)))
|
||||
/(sum(cast(hp.street1Seen as <signed>integer))+sum(cast(hp.street2Seen as <signed>integer))+sum(cast(hp.street3Seen as <signed>integer)))
|
||||
end AS pofafq
|
||||
,case when sum(cast(hp.street1Calls as <signed>integer))+ sum(cast(hp.street2Calls as <signed>integer))+ sum(cast(hp.street3Calls as <signed>integer))+ sum(cast(hp.street4Calls as <signed>integer)) = 0 then -999
|
||||
else (sum(cast(hp.street1Aggr as <signed>integer)) + sum(cast(hp.street2Aggr as <signed>integer)) + sum(cast(hp.street3Aggr as <signed>integer)) + sum(cast(hp.street4Aggr as <signed>integer)))
|
||||
/(sum(cast(hp.street1Calls as <signed>integer))+ sum(cast(hp.street2Calls as <signed>integer))+ sum(cast(hp.street3Calls as <signed>integer))+ sum(cast(hp.street4Calls as <signed>integer)))
|
||||
end AS aggfac
|
||||
,100.0*(sum(cast(hp.street1Aggr as <signed>integer)) + sum(cast(hp.street2Aggr as <signed>integer)) + sum(cast(hp.street3Aggr as <signed>integer)) + sum(cast(hp.street4Aggr as <signed>integer)))
|
||||
/ ((sum(cast(hp.foldToOtherRaisedStreet1 as <signed>integer))+ sum(cast(hp.foldToOtherRaisedStreet2 as <signed>integer))+ sum(cast(hp.foldToOtherRaisedStreet3 as <signed>integer))+ sum(cast(hp.foldToOtherRaisedStreet4 as <signed>integer))) +
|
||||
(sum(cast(hp.street1Calls as <signed>integer))+ sum(cast(hp.street2Calls as <signed>integer))+ sum(cast(hp.street3Calls as <signed>integer))+ sum(cast(hp.street4Calls as <signed>integer))) +
|
||||
(sum(cast(hp.street1Aggr as <signed>integer)) + sum(cast(hp.street2Aggr as <signed>integer)) + sum(cast(hp.street3Aggr as <signed>integer)) + sum(cast(hp.street4Aggr as <signed>integer))) )
|
||||
AS aggfrq
|
||||
,100.0*(sum(cast(hp.street1CBDone as <signed>integer)) + sum(cast(hp.street2CBDone as <signed>integer)) + sum(cast(hp.street2CBDone as <signed>integer)) + sum(cast(hp.street4CBDone as <signed>integer)))
|
||||
/ (sum(cast(hp.street1CBChance as <signed>integer))+ sum(cast(hp.street2CBChance as <signed>integer))+ sum(cast(hp.street3CBChance as <signed>integer))+ sum(cast(hp.street4CBChance as <signed>integer)))
|
||||
AS conbet
|
||||
,sum(hp.totalProfit)/100.0 AS net
|
||||
,sum(hp.rake)/100.0 AS rake
|
||||
,100.0*avg(hp.totalProfit/(gt.bigBlind+0.0)) AS bbper100
|
||||
|
@ -2084,6 +2182,18 @@ class Sql:
|
|||
else 100.0*(sum(cast(hp.street1Aggr as <signed>integer))+sum(cast(hp.street2Aggr as <signed>integer))+sum(cast(hp.street3Aggr as <signed>integer)))
|
||||
/(sum(cast(hp.street1Seen as <signed>integer))+sum(cast(hp.street2Seen as <signed>integer))+sum(cast(hp.street3Seen as <signed>integer)))
|
||||
end AS pofafq
|
||||
,case when sum(cast(hp.street1Calls as <signed>integer))+ sum(cast(hp.street2Calls as <signed>integer))+ sum(cast(hp.street3Calls as <signed>integer))+ sum(cast(hp.street4Calls as <signed>integer)) = 0 then -999
|
||||
else (sum(cast(hp.street1Aggr as <signed>integer)) + sum(cast(hp.street2Aggr as <signed>integer)) + sum(cast(hp.street3Aggr as <signed>integer)) + sum(cast(hp.street4Aggr as <signed>integer)))
|
||||
/(sum(cast(hp.street1Calls as <signed>integer))+ sum(cast(hp.street2Calls as <signed>integer))+ sum(cast(hp.street3Calls as <signed>integer))+ sum(cast(hp.street4Calls as <signed>integer)))
|
||||
end AS aggfac
|
||||
,100.0*(sum(cast(hp.street1Aggr as <signed>integer)) + sum(cast(hp.street2Aggr as <signed>integer)) + sum(cast(hp.street3Aggr as <signed>integer)) + sum(cast(hp.street4Aggr as <signed>integer)))
|
||||
/ ((sum(cast(hp.foldToOtherRaisedStreet1 as <signed>integer))+ sum(cast(hp.foldToOtherRaisedStreet2 as <signed>integer))+ sum(cast(hp.foldToOtherRaisedStreet3 as <signed>integer))+ sum(cast(hp.foldToOtherRaisedStreet4 as <signed>integer))) +
|
||||
(sum(cast(hp.street1Calls as <signed>integer))+ sum(cast(hp.street2Calls as <signed>integer))+ sum(cast(hp.street3Calls as <signed>integer))+ sum(cast(hp.street4Calls as <signed>integer))) +
|
||||
(sum(cast(hp.street1Aggr as <signed>integer)) + sum(cast(hp.street2Aggr as <signed>integer)) + sum(cast(hp.street3Aggr as <signed>integer)) + sum(cast(hp.street4Aggr as <signed>integer))) )
|
||||
AS aggfrq
|
||||
,100.0*(sum(cast(hp.street1CBDone as <signed>integer)) + sum(cast(hp.street2CBDone as <signed>integer)) + sum(cast(hp.street2CBDone as <signed>integer)) + sum(cast(hp.street4CBDone as <signed>integer)))
|
||||
/ (sum(cast(hp.street1CBChance as <signed>integer))+ sum(cast(hp.street2CBChance as <signed>integer))+ sum(cast(hp.street3CBChance as <signed>integer))+ sum(cast(hp.street4CBChance as <signed>integer)))
|
||||
AS conbet
|
||||
,sum(hp.totalProfit)/100.0 AS net
|
||||
,sum(hp.rake)/100.0 AS rake
|
||||
,100.0*avg(hp.totalProfit/(gt.bigBlind+0.0)) AS bbper100
|
||||
|
@ -2632,24 +2742,6 @@ class Sql:
|
|||
GROUP BY h.handStart, hp.handId, hp.sawShowdown, hp.totalProfit
|
||||
ORDER BY h.handStart"""
|
||||
|
||||
####################################
|
||||
# Session stats query
|
||||
####################################
|
||||
if db_server == 'mysql':
|
||||
self.query['sessionStats'] = """
|
||||
SELECT UNIX_TIMESTAMP(h.handStart) as time, hp.handId, hp.startCash, hp.winnings, hp.totalProfit
|
||||
FROM HandsPlayers hp
|
||||
INNER JOIN Players pl ON (pl.id = hp.playerId)
|
||||
INNER JOIN Hands h ON (h.id = hp.handId)
|
||||
INNER JOIN Gametypes gt ON (gt.id = h.gametypeId)
|
||||
WHERE pl.id in <player_test>
|
||||
AND pl.siteId in <site_test>
|
||||
AND h.handStart > '<startdate_test>'
|
||||
AND h.handStart < '<enddate_test>'
|
||||
<limit_test>
|
||||
AND hp.tourneysPlayersId IS NULL
|
||||
GROUP BY h.handStart, hp.handId, hp.totalProfit
|
||||
ORDER BY h.handStart"""
|
||||
|
||||
####################################
|
||||
# Session stats query
|
||||
|
@ -2664,6 +2756,7 @@ class Sql:
|
|||
INNER JOIN Players p on (p.Id = hp.playerId)
|
||||
WHERE hp.playerId in <player_test>
|
||||
AND date_format(h.handStart, '%Y-%m-%d') <datestest>
|
||||
AND hp.tourneysPlayersId IS NULL
|
||||
ORDER by time"""
|
||||
elif db_server == 'postgresql':
|
||||
self.query['sessionStats'] = """
|
||||
|
@ -2675,6 +2768,7 @@ class Sql:
|
|||
INNER JOIN Players p on (p.Id = hp.playerId)
|
||||
WHERE hp.playerId in <player_test>
|
||||
AND h.handStart <datestest>
|
||||
AND hp.tourneysPlayersId IS NULL
|
||||
ORDER by time"""
|
||||
elif db_server == 'sqlite':
|
||||
self.query['sessionStats'] = """
|
||||
|
@ -2686,6 +2780,7 @@ class Sql:
|
|||
INNER JOIN Players p on (p.Id = hp.playerId)
|
||||
WHERE hp.playerId in <player_test>
|
||||
AND h.handStart <datestest>
|
||||
AND hp.tourneysPlayersId IS NULL
|
||||
ORDER by time"""
|
||||
|
||||
|
||||
|
@ -2759,6 +2854,21 @@ class Sql:
|
|||
,street3CheckCallRaiseDone
|
||||
,street4CheckCallRaiseChance
|
||||
,street4CheckCallRaiseDone
|
||||
,street0Calls
|
||||
,street1Calls
|
||||
,street2Calls
|
||||
,street3Calls
|
||||
,street4Calls
|
||||
,street0Bets
|
||||
,street1Bets
|
||||
,street2Bets
|
||||
,street3Bets
|
||||
,street4Bets
|
||||
,street0Raises
|
||||
,street1Raises
|
||||
,street2Raises
|
||||
,street3Raises
|
||||
,street4Raises
|
||||
)
|
||||
SELECT h.gametypeId
|
||||
,hp.playerId
|
||||
|
@ -2834,6 +2944,21 @@ class Sql:
|
|||
,sum(street3CheckCallRaiseDone)
|
||||
,sum(street4CheckCallRaiseChance)
|
||||
,sum(street4CheckCallRaiseDone)
|
||||
,sum(street0Calls)
|
||||
,sum(street1Calls)
|
||||
,sum(street2Calls)
|
||||
,sum(street3Calls)
|
||||
,sum(street4Calls)
|
||||
,sum(street0Bets)
|
||||
,sum(street1Bets)
|
||||
,sum(street2Bets)
|
||||
,sum(street3Bets)
|
||||
,sum(street4Bets)
|
||||
,sum(hp.street0Raises)
|
||||
,sum(hp.street1Raises)
|
||||
,sum(hp.street2Raises)
|
||||
,sum(hp.street3Raises)
|
||||
,sum(hp.street4Raises)
|
||||
FROM HandsPlayers hp
|
||||
INNER JOIN Hands h ON (h.id = hp.handId)
|
||||
<where_clause>
|
||||
|
@ -2908,6 +3033,21 @@ class Sql:
|
|||
,street3CheckCallRaiseDone
|
||||
,street4CheckCallRaiseChance
|
||||
,street4CheckCallRaiseDone
|
||||
,street0Calls
|
||||
,street1Calls
|
||||
,street2Calls
|
||||
,street3Calls
|
||||
,street4Calls
|
||||
,street0Bets
|
||||
,street1Bets
|
||||
,street2Bets
|
||||
,street3Bets
|
||||
,street4Bets
|
||||
,street0Raises
|
||||
,street1Raises
|
||||
,street2Raises
|
||||
,street3Raises
|
||||
,street4Raises
|
||||
)
|
||||
SELECT h.gametypeId
|
||||
,hp.playerId
|
||||
|
@ -2983,6 +3123,21 @@ class Sql:
|
|||
,sum(CAST(street3CheckCallRaiseDone as integer))
|
||||
,sum(CAST(street4CheckCallRaiseChance as integer))
|
||||
,sum(CAST(street4CheckCallRaiseDone as integer))
|
||||
,sum(CAST(street0Calls as integer))
|
||||
,sum(CAST(street1Calls as integer))
|
||||
,sum(CAST(street2Calls as integer))
|
||||
,sum(CAST(street3Calls as integer))
|
||||
,sum(CAST(street4Calls as integer))
|
||||
,sum(CAST(street0Bets as integer))
|
||||
,sum(CAST(street1Bets as integer))
|
||||
,sum(CAST(street2Bets as integer))
|
||||
,sum(CAST(street3Bets as integer))
|
||||
,sum(CAST(street4Bets as integer))
|
||||
,sum(CAST(hp.street0Raises as integer))
|
||||
,sum(CAST(hp.street1Raises as integer))
|
||||
,sum(CAST(hp.street2Raises as integer))
|
||||
,sum(CAST(hp.street3Raises as integer))
|
||||
,sum(CAST(hp.street4Raises as integer))
|
||||
FROM HandsPlayers hp
|
||||
INNER JOIN Hands h ON (h.id = hp.handId)
|
||||
<where_clause>
|
||||
|
@ -3057,6 +3212,21 @@ class Sql:
|
|||
,street3CheckCallRaiseDone
|
||||
,street4CheckCallRaiseChance
|
||||
,street4CheckCallRaiseDone
|
||||
,street0Calls
|
||||
,street1Calls
|
||||
,street2Calls
|
||||
,street3Calls
|
||||
,street4Calls
|
||||
,street0Bets
|
||||
,street1Bets
|
||||
,street2Bets
|
||||
,street3Bets
|
||||
,street4Bets
|
||||
,street0Raises
|
||||
,street1Raises
|
||||
,street2Raises
|
||||
,street3Raises
|
||||
,street4Raises
|
||||
)
|
||||
SELECT h.gametypeId
|
||||
,hp.playerId
|
||||
|
@ -3132,6 +3302,21 @@ class Sql:
|
|||
,sum(CAST(street3CheckCallRaiseDone as integer))
|
||||
,sum(CAST(street4CheckCallRaiseChance as integer))
|
||||
,sum(CAST(street4CheckCallRaiseDone as integer))
|
||||
,sum(CAST(street0Calls as integer))
|
||||
,sum(CAST(street1Calls as integer))
|
||||
,sum(CAST(street2Calls as integer))
|
||||
,sum(CAST(street3Calls as integer))
|
||||
,sum(CAST(street4Calls as integer))
|
||||
,sum(CAST(street0Bets as integer))
|
||||
,sum(CAST(street1Bets as integer))
|
||||
,sum(CAST(street2Bets as integer))
|
||||
,sum(CAST(street3Bets as integer))
|
||||
,sum(CAST(street4Bets as integer))
|
||||
,sum(CAST(hp.street0Raises as integer))
|
||||
,sum(CAST(hp.street1Raises as integer))
|
||||
,sum(CAST(hp.street2Raises as integer))
|
||||
,sum(CAST(hp.street3Raises as integer))
|
||||
,sum(CAST(hp.street4Raises as integer))
|
||||
FROM HandsPlayers hp
|
||||
INNER JOIN Hands h ON (h.id = hp.handId)
|
||||
<where_clause>
|
||||
|
@ -3205,7 +3390,22 @@ class Sql:
|
|||
street3CheckCallRaiseChance,
|
||||
street3CheckCallRaiseDone,
|
||||
street4CheckCallRaiseChance,
|
||||
street4CheckCallRaiseDone)
|
||||
street4CheckCallRaiseDone,
|
||||
street0Calls,
|
||||
street1Calls,
|
||||
street2Calls,
|
||||
street3Calls,
|
||||
street4Calls,
|
||||
street0Bets,
|
||||
street1Bets,
|
||||
street2Bets,
|
||||
street3Bets,
|
||||
street4Bets,
|
||||
street0Raises,
|
||||
street1Raises,
|
||||
street2Raises,
|
||||
street3Raises,
|
||||
street4Raises)
|
||||
VALUES (%s, %s, %s, %s, %s,
|
||||
%s, %s, %s, %s, %s,
|
||||
%s, %s, %s, %s, %s,
|
||||
|
@ -3218,6 +3418,9 @@ class Sql:
|
|||
%s, %s, %s, %s, %s,
|
||||
%s, %s, %s, %s, %s,
|
||||
%s, %s, %s, %s, %s,
|
||||
%s, %s, %s, %s, %s,
|
||||
%s, %s, %s, %s, %s,
|
||||
%s, %s, %s, %s, %s,
|
||||
%s)"""
|
||||
|
||||
self.query['update_hudcache'] = """
|
||||
|
@ -3276,7 +3479,22 @@ class Sql:
|
|||
street3CheckCallRaiseChance=street3CheckCallRaiseChance+%s,
|
||||
street3CheckCallRaiseDone=street3CheckCallRaiseDone+%s,
|
||||
street4CheckCallRaiseChance=street4CheckCallRaiseChance+%s,
|
||||
street4CheckCallRaiseDone=street4CheckCallRaiseDone+%s
|
||||
street4CheckCallRaiseDone=street4CheckCallRaiseDone+%s,
|
||||
street0Calls=street0Calls+%s,
|
||||
street1Calls=street1Calls+%s,
|
||||
street2Calls=street2Calls+%s,
|
||||
street3Calls=street3Calls+%s,
|
||||
street4Calls=street4Calls+%s,
|
||||
street0Bets=street0Bets+%s,
|
||||
street1Bets=street1Bets+%s,
|
||||
street2Bets=street2Bets+%s,
|
||||
street3Bets=street3Bets+%s,
|
||||
street4Bets=street4Bets+%s,
|
||||
street0Raises=street0Raises+%s,
|
||||
street1Raises=street1Raises+%s,
|
||||
street2Raises=street2Raises+%s,
|
||||
street3Raises=street3Raises+%s,
|
||||
street4Raises=street4Raises+%s
|
||||
WHERE gametypeId+0=%s
|
||||
AND playerId=%s
|
||||
AND activeSeats=%s
|
||||
|
@ -3602,7 +3820,12 @@ class Sql:
|
|||
street3CheckCallRaiseChance,
|
||||
street3CheckCallRaiseDone,
|
||||
street4CheckCallRaiseChance,
|
||||
street4CheckCallRaiseDone
|
||||
street4CheckCallRaiseDone,
|
||||
street0Raises,
|
||||
street1Raises,
|
||||
street2Raises,
|
||||
street3Raises,
|
||||
street4Raises
|
||||
)
|
||||
VALUES (
|
||||
%s, %s, %s, %s, %s,
|
||||
|
@ -3620,6 +3843,7 @@ class Sql:
|
|||
%s, %s, %s, %s, %s,
|
||||
%s, %s, %s, %s, %s,
|
||||
%s, %s, %s, %s, %s,
|
||||
%s, %s, %s, %s, %s,
|
||||
%s, %s, %s, %s, %s
|
||||
)"""
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"""Manage collecting and formatting of stats and tooltips.
|
||||
"""
|
||||
|
@ -114,7 +115,7 @@ def playername(stat_dict, player):
|
|||
stat_dict[player]['screen_name'])
|
||||
|
||||
def vpip(stat_dict, player):
|
||||
""" Voluntarily put $ in the pot."""
|
||||
""" Voluntarily put $ in the pot pre-flop."""
|
||||
stat = 0.0
|
||||
try:
|
||||
stat = float(stat_dict[player]['vpip'])/float(stat_dict[player]['n'])
|
||||
|
@ -123,14 +124,14 @@ def vpip(stat_dict, player):
|
|||
'v=%3.1f' % (100*stat) + '%',
|
||||
'vpip=%3.1f' % (100*stat) + '%',
|
||||
'(%d/%d)' % (stat_dict[player]['vpip'], stat_dict[player]['n']),
|
||||
'Voluntarily Put In Pot %'
|
||||
'Voluntarily Put In Pot Pre-Flop%'
|
||||
)
|
||||
except: return (stat,
|
||||
'%3.1f' % (0) + '%',
|
||||
'v=%3.1f' % (0) + '%',
|
||||
'vpip=%3.1f' % (0) + '%',
|
||||
'(%d/%d)' % (0, 0),
|
||||
'Voluntarily Put In Pot %'
|
||||
'Voluntarily Put In Pot Pre-Flop%'
|
||||
)
|
||||
|
||||
def pfr(stat_dict, player):
|
||||
|
@ -504,6 +505,91 @@ def a_freq_123(stat_dict, player):
|
|||
'Post-Flop Aggression Freq'
|
||||
)
|
||||
|
||||
def agg_freq(stat_dict, player):
|
||||
""" Post-Flop aggression frequency."""
|
||||
""" Aggression frequency % = (times bet or raised post-flop) * 100 / (times bet, raised, called, or folded post-flop) """
|
||||
stat = 0.0
|
||||
try:
|
||||
""" Agression on the flop and all streets """
|
||||
bet_raise = stat_dict[player]['aggr_1'] + stat_dict[player]['aggr_2'] + stat_dict[player]['aggr_3'] + stat_dict[player]['aggr_4']
|
||||
""" number post flop streets seen, this must be number of post-flop calls !! """
|
||||
post_call = stat_dict[player]['call_1'] + stat_dict[player]['call_2'] + stat_dict[player]['call_3'] + stat_dict[player]['call_4']
|
||||
""" Number of post flop folds this info is not yet in the database """
|
||||
post_fold = stat_dict[player]['f_freq_1'] + stat_dict[player]['f_freq_2'] + stat_dict[player]['f_freq_3'] + stat_dict[player]['f_freq_4']
|
||||
|
||||
stat = float (bet_raise) / float(post_call + post_fold + bet_raise)
|
||||
|
||||
return (stat,
|
||||
'%3.1f' % (100*stat) + '%',
|
||||
'afr=%3.1f' % (100*stat) + '%',
|
||||
'agg_fr=%3.1f' % (100*stat) + '%',
|
||||
'(%d/%d)' % (bet_raise, (post_call + post_fold + bet_raise)),
|
||||
'Aggression Freq'
|
||||
)
|
||||
except:
|
||||
return (stat,
|
||||
'%2.1f' % (0) + '%',
|
||||
'af=%3.1f' % (0) + '%',
|
||||
'agg_f=%3.1f' % (0) + '%',
|
||||
'(%d/%d)' % (0, 0),
|
||||
'Aggression Freq'
|
||||
)
|
||||
|
||||
def agg_fact(stat_dict, player):
|
||||
""" Post-Flop aggression frequency."""
|
||||
""" Aggression factor = (times bet or raised post-flop) / (times called post-flop) """
|
||||
stat = 0.0
|
||||
try:
|
||||
bet_raise = stat_dict[player]['aggr_1'] + stat_dict[player]['aggr_2'] + stat_dict[player]['aggr_3'] + stat_dict[player]['aggr_4']
|
||||
post_call = stat_dict[player]['call_1'] + stat_dict[player]['call_2'] + stat_dict[player]['call_3'] + stat_dict[player]['call_4']
|
||||
|
||||
if post_call > 0:
|
||||
stat = float (bet_raise) / float(post_call)
|
||||
else:
|
||||
stat = float (bet_raise)
|
||||
return (stat,
|
||||
'%2.2f' % (stat) ,
|
||||
'afa=%2.2f' % (stat) ,
|
||||
'agg_fa=%2.2f' % (stat) ,
|
||||
'(%d/%d)' % (bet_raise, post_call),
|
||||
'Aggression Factor'
|
||||
)
|
||||
except:
|
||||
return (stat,
|
||||
'%2.2f' % (0) ,
|
||||
'afa=%2.2f' % (0) ,
|
||||
'agg_fa=%2.2f' % (0),
|
||||
'(%d/%d)' % (0, 0),
|
||||
'Aggression Factor'
|
||||
)
|
||||
|
||||
|
||||
def cbet(stat_dict, player):
|
||||
|
||||
""" Flop continuation bet."""
|
||||
""" Continuation bet % = (times made a continuation bet on the flop) * 100 / (number of opportunities to make a continuation bet on the flop) """
|
||||
|
||||
stat = 0.0
|
||||
try:
|
||||
cbets = stat_dict[player]['cb_1']+stat_dict[player]['cb_2']+stat_dict[player]['cb_3']+stat_dict[player]['cb_4']
|
||||
oppt = stat_dict[player]['cb_opp_1']+stat_dict[player]['cb_opp_2']+stat_dict[player]['cb_opp_3']+stat_dict[player]['cb_opp_4']
|
||||
stat = float(cbets)/float(oppt)
|
||||
return (stat,
|
||||
'%3.1f' % (100*stat) + '%',
|
||||
'cbet=%3.1f' % (100*stat) + '%',
|
||||
'cbet=%3.1f' % (100*stat) + '%',
|
||||
'(%d/%d)' % (cbets, oppt),
|
||||
'% continuation bet '
|
||||
)
|
||||
except:
|
||||
return (stat,
|
||||
'%3.1f' % (0) + '%',
|
||||
'cbet=%3.1f' % (0) + '%',
|
||||
'cbet=%3.1f' % (0) + '%',
|
||||
'(%d/%d)' % (0, 0),
|
||||
'% continuation bet '
|
||||
)
|
||||
|
||||
def cb1(stat_dict, player):
|
||||
""" Flop continuation bet."""
|
||||
stat = 0.0
|
||||
|
|
|
@ -1,31 +0,0 @@
|
|||
#!/usr/bin/python
|
||||
|
||||
#Copyright 2008 Steffen Jobbagy-Felso
|
||||
#This program is free software: you can redistribute it and/or modify
|
||||
#it under the terms of the GNU Affero General Public License as published by
|
||||
#the Free Software Foundation, version 3 of the License.
|
||||
#
|
||||
#This program is distributed in the hope that it will be useful,
|
||||
#but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
#GNU General Public License for more details.
|
||||
#
|
||||
#You should have received a copy of the GNU Affero General Public License
|
||||
#along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#In the "official" distribution you can find the license in
|
||||
#agpl-3.0.txt in the docs folder of the package.
|
||||
|
||||
|
||||
# Users should run fpdb.pyw now, this is included in case they still try to run fpdb.py
|
||||
|
||||
|
||||
import os
|
||||
import sys
|
||||
|
||||
|
||||
#print "fpdb.py has now been renamed to fpdb.pyw - calling fpdb.pyw ...\n"
|
||||
sys.stdout.write('fpdb.py has been renamed to fpdb.pyw - now calling fpdb.pyw ...\n\n')
|
||||
sys.stdout.flush()
|
||||
|
||||
os.execvpe('pythonw.exe', ('pythonw.exe', 'fpdb.pyw', '-r'), os.environ)
|
||||
# first arg is ignored (name of program being run)
|
|
@ -1,4 +1,5 @@
|
|||
#!/usr/bin/python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
#Copyright 2008 Steffen Jobbagy-Felso
|
||||
#This program is free software: you can redistribute it and/or modify
|
||||
|
@ -35,7 +36,7 @@ if os.name == 'nt' and sys.version[0:3] not in ('2.5', '2.6') and '-r' not in sy
|
|||
os.environ['PATH'] = tmppath
|
||||
print "Python " + sys.version[0:3] + ' - press return to continue\n'
|
||||
sys.stdin.readline()
|
||||
os.execvpe('python.exe', ('python.exe', 'fpdb.py', '-r'), os.environ) # first arg is ignored (name of program being run)
|
||||
os.execvpe('pythonw.exe', ('pythonw.exe', 'fpdb.pyw', '-r'), os.environ) # first arg is ignored (name of program being run)
|
||||
else:
|
||||
print "\npython 2.5 not found, please install python 2.5 or 2.6 for fpdb\n"
|
||||
raw_input("Press ENTER to continue.")
|
||||
|
@ -110,7 +111,7 @@ import Database
|
|||
import Configuration
|
||||
import Exceptions
|
||||
|
||||
VERSION = "0.20"
|
||||
VERSION = "0.20-pre1"
|
||||
|
||||
|
||||
class fpdb:
|
||||
|
@ -226,12 +227,12 @@ class fpdb:
|
|||
dia = gtk.AboutDialog()
|
||||
dia.set_name("Free Poker Database (FPDB)")
|
||||
dia.set_version(VERSION)
|
||||
dia.set_copyright("2008-2010, Steffen, Eratosthenes, s0rrow, EricBlade, _mt, sqlcoder, Bostik, and others")
|
||||
dia.set_copyright("2008-2010, Steffen, Eratosthenes, Carl Gherardi, Eric Blade, _mt, sqlcoder, Bostik, and others")
|
||||
dia.set_comments("GTK AboutDialog comments here")
|
||||
dia.set_license("GPL v3")
|
||||
dia.set_website("http://fpdb.sourceforge.net/")
|
||||
dia.set_authors(['Steffen', 'Eratosthenes', 's0rrow',
|
||||
'EricBlade', '_mt', 'sqlcoder', 'Bostik', 'and others'])
|
||||
dia.set_authors(['Steffen', 'Eratosthenes', 'Carl Gherardi',
|
||||
'Eric Blade', '_mt', 'sqlcoder', 'Bostik', 'and others'])
|
||||
dia.set_program_name("Free Poker Database (FPDB)")
|
||||
|
||||
db_version = ""
|
||||
|
@ -275,7 +276,7 @@ class fpdb:
|
|||
gtk.STOCK_SAVE, gtk.RESPONSE_ACCEPT))
|
||||
dia.set_default_size(700, 500)
|
||||
|
||||
prefs = GuiPrefs.GuiPrefs(self.config, self.window, dia.vbox)
|
||||
prefs = GuiPrefs.GuiPrefs(self.config, self.window, dia.vbox, dia)
|
||||
response = dia.run()
|
||||
if response == gtk.RESPONSE_ACCEPT:
|
||||
# save updated config
|
||||
|
@ -283,11 +284,13 @@ class fpdb:
|
|||
if len(self.nb_tab_names) == 1:
|
||||
# only main tab open, reload profile
|
||||
self.load_profile()
|
||||
dia.destroy()
|
||||
else:
|
||||
dia.destroy() # destroy prefs before raising warning, otherwise parent is dia rather than self.window
|
||||
self.warning_box("Updated preferences have not been loaded because "
|
||||
+ "windows are open. Re-start fpdb to load them.")
|
||||
|
||||
dia.destroy()
|
||||
else:
|
||||
dia.destroy()
|
||||
|
||||
def dia_maintain_dbs(self, widget, data=None):
|
||||
self.warning_box("Unimplemented: Maintain Databases")
|
||||
|
@ -393,11 +396,13 @@ class fpdb:
|
|||
if self.obtain_global_lock(): # returns true if successful
|
||||
|
||||
#lock_released = False
|
||||
dia_confirm = gtk.MessageDialog(parent=None, flags=0, type=gtk.MESSAGE_WARNING,
|
||||
dia_confirm = gtk.MessageDialog(parent=self.window, flags=gtk.DIALOG_DESTROY_WITH_PARENT, type=gtk.MESSAGE_WARNING,
|
||||
buttons=(gtk.BUTTONS_YES_NO), message_format="Confirm deleting and recreating tables")
|
||||
diastring = "Please confirm that you want to (re-)create the tables. If there already are tables in the database " \
|
||||
+self.db.database+" on "+self.db.host+" they will be deleted."
|
||||
dia_confirm.format_secondary_text(diastring)#todo: make above string with bold for db, host and deleted
|
||||
# disable windowclose, do not want the the underlying processing interrupted mid-process
|
||||
dia_confirm.set_deletable(False)
|
||||
|
||||
response = dia_confirm.run()
|
||||
dia_confirm.destroy()
|
||||
|
@ -412,6 +417,14 @@ class fpdb:
|
|||
#else:
|
||||
# for other dbs use same connection as holds global lock
|
||||
# self.fdb_lock.fdb.recreate_tables()
|
||||
# TODO: figure out why this seems to be necessary
|
||||
dia_restart = gtk.MessageDialog(parent=self.window, flags=0, type=gtk.MESSAGE_WARNING,
|
||||
buttons=(gtk.BUTTONS_OK), message_format="Restart fpdb")
|
||||
diastring = "You should now restart fpdb."
|
||||
dia_restart.format_secondary_text(diastring)
|
||||
|
||||
dia_restart.run()
|
||||
dia_restart.destroy()
|
||||
elif response == gtk.RESPONSE_NO:
|
||||
print 'User cancelled recreating tables'
|
||||
#if not lock_released:
|
||||
|
@ -419,9 +432,11 @@ class fpdb:
|
|||
|
||||
def dia_recreate_hudcache(self, widget, data=None):
|
||||
if self.obtain_global_lock():
|
||||
self.dia_confirm = gtk.MessageDialog(parent=None, flags=0, type=gtk.MESSAGE_WARNING, buttons=(gtk.BUTTONS_YES_NO), message_format="Confirm recreating HUD cache")
|
||||
self.dia_confirm = gtk.MessageDialog(parent=self.window, flags=gtk.DIALOG_DESTROY_WITH_PARENT, type=gtk.MESSAGE_WARNING, buttons=(gtk.BUTTONS_YES_NO), message_format="Confirm recreating HUD cache")
|
||||
diastring = "Please confirm that you want to re-create the HUD cache."
|
||||
self.dia_confirm.format_secondary_text(diastring)
|
||||
# disable windowclose, do not want the the underlying processing interrupted mid-process
|
||||
self.dia_confirm.set_deletable(False)
|
||||
|
||||
hb1 = gtk.HBox(True, 1)
|
||||
self.h_start_date = gtk.Entry(max=12)
|
||||
|
@ -469,16 +484,19 @@ class fpdb:
|
|||
|
||||
def dia_rebuild_indexes(self, widget, data=None):
|
||||
if self.obtain_global_lock():
|
||||
self.dia_confirm = gtk.MessageDialog(parent=None
|
||||
,flags=0
|
||||
self.dia_confirm = gtk.MessageDialog(parent=self.window
|
||||
,flags=gtk.DIALOG_DESTROY_WITH_PARENT
|
||||
,type=gtk.MESSAGE_WARNING
|
||||
,buttons=(gtk.BUTTONS_YES_NO)
|
||||
,message_format="Confirm rebuilding database indexes")
|
||||
diastring = "Please confirm that you want to rebuild the database indexes."
|
||||
self.dia_confirm.format_secondary_text(diastring)
|
||||
# disable windowclose, do not want the the underlying processing interrupted mid-process
|
||||
self.dia_confirm.set_deletable(False)
|
||||
|
||||
response = self.dia_confirm.run()
|
||||
if response == gtk.RESPONSE_YES:
|
||||
#FIXME these progress messages do not seem to work
|
||||
lbl = gtk.Label(" Rebuilding Indexes ... ")
|
||||
self.dia_confirm.vbox.add(lbl)
|
||||
lbl.show()
|
||||
|
@ -550,8 +568,13 @@ class fpdb:
|
|||
pass
|
||||
|
||||
def __calendar_dialog(self, widget, entry):
|
||||
self.dia_confirm.set_modal(False)
|
||||
# do not alter the modality of the parent
|
||||
# self.dia_confirm.set_modal(False)
|
||||
d = gtk.Window(gtk.WINDOW_TOPLEVEL)
|
||||
d.set_transient_for(self.dia_confirm)
|
||||
d.set_destroy_with_parent(True)
|
||||
d.set_modal(True)
|
||||
|
||||
d.set_title('Pick a date')
|
||||
|
||||
vb = gtk.VBox()
|
||||
|
@ -714,7 +737,7 @@ class fpdb:
|
|||
self.warning_box( "There is an error in your config file\n" + self.config.file
|
||||
+ "\n\nError is: " + str(self.config.file_error)
|
||||
, diatitle="CONFIG FILE ERROR" )
|
||||
exit()
|
||||
sys.exit()
|
||||
|
||||
log = Configuration.get_logger("logging.conf", "fpdb", log_dir=self.config.dir_log)
|
||||
print "Logfile is " + os.path.join(self.config.dir_log, self.config.log_file) + "\n"
|
||||
|
@ -875,9 +898,12 @@ class fpdb:
|
|||
def tab_main_help(self, widget, data=None):
|
||||
"""Displays a tab with the main fpdb help screen"""
|
||||
mh_tab=gtk.Label("""Welcome to Fpdb!
|
||||
For documentation please visit our website at http://fpdb.sourceforge.net/ or check the docs directory in the fpdb folder.
|
||||
Please note that default.conf is no longer needed nor used, all configuration now happens in HUD_config.xml
|
||||
This program is licensed under the AGPL3, see docs"""+os.sep+"agpl-3.0.txt")
|
||||
This program is currently in an alpha-state, so our database format is still sometimes changed.
|
||||
You should therefore always keep your hand history files so that you can re-import after an update, if necessary.
|
||||
For documentation please visit our website at http://fpdb.sourceforge.net/.
|
||||
If you need help click on Contact - Get Help on our website.
|
||||
Please note that default.conf is no longer needed nor used, all configuration now happens in HUD_config.xml.
|
||||
This program is licensed under the AGPL3, see agpl-3.0.txt in the fpdb installation directory.""")
|
||||
self.add_and_display_tab(mh_tab, "Help")
|
||||
|
||||
def tab_table_viewer(self, widget, data=None):
|
||||
|
@ -905,7 +931,11 @@ This program is licensed under the AGPL3, see docs"""+os.sep+"agpl-3.0.txt")
|
|||
self.window.connect("destroy", self.destroy)
|
||||
self.window.set_title("Free Poker DB - v%s or higher" % (VERSION, ))
|
||||
self.window.set_border_width(1)
|
||||
self.window.set_default_size(900,720)
|
||||
defx, defy = 900, 720
|
||||
sx, sy = gtk.gdk.screen_width(), gtk.gdk.screen_height()
|
||||
if sx < defx: defx = sx
|
||||
if sy < defy: defy = sy
|
||||
self.window.set_default_size(defx, defy)
|
||||
self.window.set_resizable(True)
|
||||
|
||||
self.main_vbox = gtk.VBox(False, 1)
|
||||
|
@ -957,9 +987,15 @@ This program is licensed under the AGPL3, see docs"""+os.sep+"agpl-3.0.txt")
|
|||
menuItem = gtk.ImageMenuItem(gtk.STOCK_ABOUT)
|
||||
menuItem.connect('activate', self.dia_about)
|
||||
self.statusMenu.append(menuItem)
|
||||
menuItem = gtk.ImageMenuItem(gtk.STOCK_QUIT)
|
||||
menuItem.connect('activate', self.quit)
|
||||
self.statusMenu.append(menuItem)
|
||||
|
||||
# do not allow quit - if any transient (popup) windows are open (rebuild cache, rebuild index etc)
|
||||
# quit from the tray causes a very very unclean shutdown, lockup of python process and failure to release global lock.
|
||||
# fpdb window must be re-opened and the windows closed to quit
|
||||
|
||||
# menuItem = gtk.ImageMenuItem(gtk.STOCK_QUIT)
|
||||
# menuItem.connect('activate', self.quit)
|
||||
# self.statusMenu.append(menuItem)
|
||||
|
||||
self.statusIcon.connect('popup-menu', self.statusicon_menu, self.statusMenu)
|
||||
self.statusIcon.set_visible(True)
|
||||
|
||||
|
@ -1006,7 +1042,7 @@ This program is licensed under the AGPL3, see docs"""+os.sep+"agpl-3.0.txt")
|
|||
self.window.present()
|
||||
|
||||
def info_box(self, str1, str2):
|
||||
diapath = gtk.MessageDialog( parent=None, flags=0, type=gtk.MESSAGE_INFO
|
||||
diapath = gtk.MessageDialog( parent=self.window, flags=0, type=gtk.MESSAGE_INFO
|
||||
, buttons=(gtk.BUTTONS_OK), message_format=str1 )
|
||||
diapath.format_secondary_text(str2)
|
||||
response = diapath.run()
|
||||
|
@ -1014,7 +1050,7 @@ This program is licensed under the AGPL3, see docs"""+os.sep+"agpl-3.0.txt")
|
|||
return response
|
||||
|
||||
def warning_box(self, str, diatitle="FPDB WARNING"):
|
||||
diaWarning = gtk.Dialog(title=diatitle, parent=None, flags=0, buttons=(gtk.STOCK_OK,gtk.RESPONSE_OK))
|
||||
diaWarning = gtk.Dialog(title=diatitle, parent=self.window, flags=0, buttons=(gtk.STOCK_OK,gtk.RESPONSE_OK))
|
||||
|
||||
label = gtk.Label(str)
|
||||
diaWarning.vbox.add(label)
|
||||
|
|
|
@ -39,16 +39,14 @@ Py2exe script for fpdb.
|
|||
# MSVCP90.dll. These are somewhere in your windows install, so you
|
||||
# can just copy them to your working folder. (or just assume other
|
||||
# person will have them? any copyright issues with including them?)
|
||||
#- [ If it works, you'll have 3 new folders, build and dist and gfx. Build is
|
||||
# working space and should be deleted. Dist and gfx contain the files to be
|
||||
# distributed. ]
|
||||
# If it works, you'll have a new dir fpdb-XXX-YYYYMMDD-exe which should
|
||||
#- If it works, you'll have a new dir fpdb-YYYYMMDD-exe which should
|
||||
# contain 2 dirs; gfx and pyfpdb and run_fpdb.bat
|
||||
#- Last, you must copy the etc/, lib/ and share/ folders from your
|
||||
# gtk/bin/ (just /gtk/?) folder to the pyfpdb folder. (the whole folders,
|
||||
# not just the contents)
|
||||
#- [ This bit is now automated:
|
||||
# Last, you must copy the etc/, lib/ and share/ folders from your
|
||||
# gtk/bin/ (just /gtk/?) folder to the pyfpdb folder. (the whole folders,
|
||||
# not just the contents) ]
|
||||
#- You can (should) then prune the etc/, lib/ and share/ folders to
|
||||
# remove components we don't need.
|
||||
# remove components we don't need. (see output at end of program run)
|
||||
|
||||
# sqlcoder notes: this worked for me with the following notes:
|
||||
#- I used the following versions:
|
||||
|
@ -116,11 +114,11 @@ test_and_remove('build')
|
|||
|
||||
|
||||
today = date.today().strftime('%Y%m%d')
|
||||
print "\n" + r"Output will be created in \pyfpdb\ and \fpdb_XXX_"+today+'\\'
|
||||
print "Enter value for XXX (any length): ", # the comma means no newline
|
||||
xxx = sys.stdin.readline().rstrip()
|
||||
dist_dirname = r'fpdb-' + xxx + '-' + today + '-exe'
|
||||
dist_dir = r'..\fpdb-' + xxx + '-' + today + '-exe'
|
||||
print "\n" + r"Output will be created in \pyfpdb\ and \fpdb_"+today+'\\'
|
||||
#print "Enter value for XXX (any length): ", # the comma means no newline
|
||||
#xxx = sys.stdin.readline().rstrip()
|
||||
dist_dirname = r'fpdb-' + today + '-exe'
|
||||
dist_dir = r'..\fpdb-' + today + '-exe'
|
||||
print
|
||||
|
||||
test_and_remove(dist_dir)
|
||||
|
@ -137,7 +135,7 @@ setup(
|
|||
|
||||
options = {'py2exe': {
|
||||
'packages' : ['encodings', 'matplotlib'],
|
||||
'includes' : ['cairo', 'pango', 'pangocairo', 'atk', 'gobject'
|
||||
'includes' : ['gio', 'cairo', 'pango', 'pangocairo', 'atk', 'gobject'
|
||||
,'matplotlib.numerix.random_array'
|
||||
,'AbsoluteToFpdb', 'BetfairToFpdb'
|
||||
,'CarbonToFpdb', 'EverleafToFpdb'
|
||||
|
@ -163,10 +161,11 @@ setup(
|
|||
|
||||
os.rename('dist', 'pyfpdb')
|
||||
|
||||
print '\n' + 'If py2exe was successful add the \\etc \\lib and \\share dirs '
|
||||
print 'from your gtk dir to \\%s\\pyfpdb\\\n' % dist_dirname
|
||||
print 'Also copy libgobject-2.0-0.dll and libgdk-win32-2.0-0.dll from <gtk_dir>\\bin'
|
||||
print 'into there'
|
||||
# these instructions no longer needed:
|
||||
#print '\n' + 'If py2exe was successful add the \\etc \\lib and \\share dirs '
|
||||
#print 'from your gtk dir to \\%s\\pyfpdb\\\n' % dist_dirname
|
||||
#print 'Also copy libgobject-2.0-0.dll and libgdk-win32-2.0-0.dll from <gtk_dir>\\bin'
|
||||
#print 'into there'
|
||||
|
||||
dest = os.path.join(dist_dirname, 'pyfpdb')
|
||||
#print "try renaming pyfpdb to", dest
|
||||
|
@ -207,4 +206,24 @@ dest_dir = os.path.join(dest, 'share')
|
|||
dest_dir = dest_dir.replace('\\', '\\\\')
|
||||
shutil.copytree( src_dir, dest_dir )
|
||||
|
||||
print "\nIf py2exe was successful you should now have a new dir"
|
||||
print dist_dirname+" in your pyfpdb dir"
|
||||
print """
|
||||
The following dirs can probably removed to make the final package smaller:
|
||||
|
||||
pyfpdb/lib/glib-2.0
|
||||
pyfpdb/lib/gtk-2.0/include
|
||||
pyfpdb/lib/pkgconfig
|
||||
pyfpdb/share/aclocal
|
||||
pyfpdb/share/doc
|
||||
pyfpdb/share/glib-2.0
|
||||
pyfpdb/share/gtk-2.0
|
||||
pyfpdb/share/gtk-doc
|
||||
pyfpdb/share/locale
|
||||
pyfpdb/share/man
|
||||
pyfpdb/share/themes/Default
|
||||
|
||||
Use 7-zip to zip up the distribution and create a self extracting archive and that's it!
|
||||
"""
|
||||
|
||||
|
||||
|
|
|
@ -0,0 +1,665 @@
|
|||
Full Tilt Poker Game #11111111813: Table Fpdb - $2/$4 Ante $0.40 - Limit Stud Hi - 13:14:27 ET - 2010/06/10
|
||||
Seat 1: Player4 ($7.40)
|
||||
Seat 2: Player13 ($77.20)
|
||||
Seat 3: Player1 ($111.80)
|
||||
Seat 5: Player5 ($118.70)
|
||||
Seat 7: Player6 ($36.30)
|
||||
Player1 antes $0.40
|
||||
Player4 antes $0.40
|
||||
Player13 antes $0.40
|
||||
Player5 antes $0.40
|
||||
Player6 antes $0.40
|
||||
*** 3RD STREET ***
|
||||
Dealt to Player4 [9c]
|
||||
Dealt to Player13 [8s]
|
||||
Dealt to Player1 [Ac 9h] [3s]
|
||||
Dealt to Player5 [3c]
|
||||
Dealt to Player6 [Qs]
|
||||
Player5 is low with [3c]
|
||||
Player5 brings in for $0.50
|
||||
Player6 folds
|
||||
Player4 completes it to $2
|
||||
Player14 sits down
|
||||
Player13 folds
|
||||
Player1 folds
|
||||
Player14 adds $152
|
||||
Player5 calls $1.50
|
||||
*** 4TH STREET ***
|
||||
Dealt to Player4 [9c] [9d]
|
||||
Dealt to Player5 [3c] [8d]
|
||||
Player4 bets $4
|
||||
Player5 folds
|
||||
Uncalled bet of $4 returned to Player4
|
||||
Player4 mucks
|
||||
Player4 wins the pot ($6)
|
||||
*** SUMMARY ***
|
||||
Total pot $6 | Rake $0
|
||||
Seat 1: Player4 collected ($6), mucked
|
||||
Seat 2: Player13 folded on 3rd St.
|
||||
Seat 3: Player1 folded on 3rd St.
|
||||
Seat 5: Player5 folded on 4th St.
|
||||
Seat 7: Player6 folded on 3rd St.
|
||||
|
||||
|
||||
|
||||
Full Tilt Poker Game #11111111538: Table Fpdb - $2/$4 Ante $0.40 - Limit Stud Hi - 13:15:56 ET - 2010/06/10
|
||||
Seat 1: Player4 ($12.60)
|
||||
Seat 2: Player13 ($89.90)
|
||||
Seat 3: Player1 ($110.60)
|
||||
Seat 5: Player5 ($115.50)
|
||||
Seat 6: Player14 ($138.70)
|
||||
Seat 7: Player6 ($35.10)
|
||||
Player1 antes $0.40
|
||||
Player4 antes $0.40
|
||||
Player13 antes $0.40
|
||||
Player5 antes $0.40
|
||||
Player14 antes $0.40
|
||||
Player6 antes $0.40
|
||||
*** 3RD STREET ***
|
||||
Dealt to Player4 [Qc]
|
||||
Dealt to Player13 [5s]
|
||||
Dealt to Player1 [6c 5d] [3d]
|
||||
Dealt to Player5 [9d]
|
||||
Dealt to Player14 [8h]
|
||||
Dealt to Player6 [Ts]
|
||||
Player1 is low with [3d]
|
||||
Player1 brings in for $0.50
|
||||
Player5 folds
|
||||
Player14 folds
|
||||
Player6 completes it to $2
|
||||
Player4 folds
|
||||
Player13 folds
|
||||
Player1 calls $1.50
|
||||
*** 4TH STREET ***
|
||||
Dealt to Player1 [6c 5d 3d] [7c]
|
||||
Dealt to Player6 [Ts] [6d]
|
||||
Player6 bets $2
|
||||
Player1 calls $2
|
||||
*** 5TH STREET ***
|
||||
Dealt to Player1 [6c 5d 3d 7c] [Qd]
|
||||
Dealt to Player6 [Ts 6d] [9s]
|
||||
Player1 checks
|
||||
Player6 bets $4
|
||||
Player1 folds
|
||||
Uncalled bet of $4 returned to Player6
|
||||
Player6 mucks
|
||||
Player6 wins the pot ($10.40)
|
||||
*** SUMMARY ***
|
||||
Total pot $10.40 | Rake $0
|
||||
Seat 1: Player4 folded on 3rd St.
|
||||
Seat 2: Player13 folded on 3rd St.
|
||||
Seat 3: Player1 folded on 5th St.
|
||||
Seat 5: Player5 folded on 3rd St.
|
||||
Seat 6: Player14 folded on 3rd St.
|
||||
Seat 7: Player6 collected ($10.40), mucked
|
||||
|
||||
|
||||
Full Tilt Poker Game #11111111649: Table Fpdb - $2/$4 Ante $0.40 - Limit Stud Hi - 13:17:24 ET - 2010/06/10
|
||||
Seat 1: Player4 ($16.30)
|
||||
Seat 2: Player13 ($88.70)
|
||||
Seat 3: Player1 ($107.30)
|
||||
Seat 5: Player5 ($114.30)
|
||||
Seat 6: Player14 ($135.50)
|
||||
Seat 7: Player6 ($40.30)
|
||||
Player1 antes $0.40
|
||||
Player4 antes $0.40
|
||||
Player13 antes $0.40
|
||||
Player5 antes $0.40
|
||||
Player14 antes $0.40
|
||||
Player6 antes $0.40
|
||||
*** 3RD STREET ***
|
||||
Dealt to Player4 [9s]
|
||||
Dealt to Player13 [9h]
|
||||
Dealt to Player1 [8h Kd] [6s]
|
||||
Dealt to Player5 [4c]
|
||||
Dealt to Player14 [8d]
|
||||
Dealt to Player6 [6c]
|
||||
Player5 is low with [4c]
|
||||
Player10 sits down
|
||||
Player10 adds $40
|
||||
Player5 brings in for $0.50
|
||||
Player14 folds
|
||||
Player6 folds
|
||||
Player4 folds
|
||||
Player13 completes it to $2
|
||||
Player1 folds
|
||||
Player5 folds
|
||||
Uncalled bet of $1.50 returned to Player13
|
||||
Player13 mucks
|
||||
Player13 wins the pot ($3.40)
|
||||
*** SUMMARY ***
|
||||
Total pot $3.40 | Rake $0
|
||||
Seat 1: Player4 folded on 3rd St.
|
||||
Seat 2: Player13 collected ($3.40), mucked
|
||||
Seat 3: Player1 folded on 3rd St.
|
||||
Seat 5: Player5 folded on 3rd St.
|
||||
Seat 6: Player14 folded on 3rd St.
|
||||
Seat 7: Player6 folded on 3rd St.
|
||||
|
||||
|
||||
|
||||
Full Tilt Poker Game #11111112277: Table Fpdb - $2/$4 Ante $0.40 - Limit Stud Hi - 13:17:41 ET - 2010/06/10
|
||||
Seat 1: Player4 ($15.90)
|
||||
Seat 2: Player13 ($91.20)
|
||||
Seat 3: Player1 ($106.90)
|
||||
Seat 5: Player5 ($113.40)
|
||||
Seat 6: Player14 ($135.10)
|
||||
Seat 7: Player6 ($39.90)
|
||||
Seat 8: Player10 ($40)
|
||||
Player1 antes $0.40
|
||||
Player4 antes $0.40
|
||||
Player13 antes $0.40
|
||||
Player5 antes $0.40
|
||||
Player14 antes $0.40
|
||||
Player6 antes $0.40
|
||||
Player10 antes $0.40
|
||||
*** 3RD STREET ***
|
||||
Dealt to Player4 [Qs]
|
||||
Dealt to Player13 [8s]
|
||||
Dealt to Player1 [3h 9c] [Ah]
|
||||
Dealt to Player5 [Qc]
|
||||
Dealt to Player14 [Kc]
|
||||
Dealt to Player6 [Jh]
|
||||
Dealt to Player10 [6d]
|
||||
Player10 is low with [6d]
|
||||
Player10 brings in for $0.50
|
||||
Player4 folds
|
||||
Player13 folds
|
||||
Player1 folds
|
||||
Player5 completes it to $2
|
||||
Player14 raises to $4
|
||||
Player6 folds
|
||||
Player10 calls $3.50
|
||||
Player5 calls $2
|
||||
*** 4TH STREET ***
|
||||
Dealt to Player5 [Qc] [3c]
|
||||
Dealt to Player14 [Kc] [Kh]
|
||||
Dealt to Player10 [6d] [Td]
|
||||
Player14 has 15 seconds left to act
|
||||
Player14 bets $4
|
||||
Player10 folds
|
||||
Player5 folds
|
||||
Uncalled bet of $4 returned to Player14
|
||||
Player14 mucks
|
||||
Player14 wins the pot ($14.80)
|
||||
*** SUMMARY ***
|
||||
Total pot $14.80 | Rake $0
|
||||
Seat 1: Player4 folded on 3rd St.
|
||||
Seat 2: Player13 folded on 3rd St.
|
||||
Seat 3: Player1 folded on 3rd St.
|
||||
Seat 5: Player5 folded on 4th St.
|
||||
Seat 6: Player14 collected ($14.80), mucked
|
||||
Seat 7: Player6 folded on 3rd St.
|
||||
Seat 8: Player10 folded on 4th St.
|
||||
|
||||
|
||||
|
||||
Full Tilt Poker Game #11111110428: Table Fpdb - $2/$4 Ante $0.40 - Limit Stud Hi - 13:18:23 ET - 2010/06/10
|
||||
Seat 1: Player4 ($15.50)
|
||||
Seat 2: Player13 ($90.80)
|
||||
Seat 3: Player1 ($106.50)
|
||||
Seat 5: Player5 ($109)
|
||||
Seat 6: Player14 ($145.50)
|
||||
Seat 7: Player6 ($39.50)
|
||||
Seat 8: Player10 ($35.60)
|
||||
Player10 antes $0.40
|
||||
Player13 antes $0.40
|
||||
Player1 antes $0.40
|
||||
Player4 antes $0.40
|
||||
Player5 antes $0.40
|
||||
Player14 antes $0.40
|
||||
Player6 antes $0.40
|
||||
*** 3RD STREET ***
|
||||
Dealt to Player4 [Th]
|
||||
Dealt to Player13 [Kc]
|
||||
Dealt to Player1 [Kh 9c] [5h]
|
||||
Dealt to Player5 [6h]
|
||||
Dealt to Player14 [Js]
|
||||
Dealt to Player6 [Ac]
|
||||
Dealt to Player10 [Ah]
|
||||
Player1 is low with [5h]
|
||||
Player1 brings in for $0.50
|
||||
Player5 folds
|
||||
Player14 folds
|
||||
Player6 folds
|
||||
Player10 completes it to $2
|
||||
Player4 calls $2
|
||||
Player13 folds
|
||||
Player1 folds
|
||||
*** 4TH STREET ***
|
||||
Dealt to Player4 [Th] [4h]
|
||||
Dealt to Player10 [Ah] [3c]
|
||||
Player10 bets $2
|
||||
Player4 calls $2
|
||||
*** 5TH STREET ***
|
||||
Dealt to Player4 [Th 4h] [9h]
|
||||
Dealt to Player10 [Ah 3c] [8h]
|
||||
Player10 has 15 seconds left to act
|
||||
Player10 bets $4
|
||||
Player4 raises to $8
|
||||
Player10 folds
|
||||
Uncalled bet of $4 returned to Player4
|
||||
Player4 mucks
|
||||
Player4 wins the pot ($19.30)
|
||||
*** SUMMARY ***
|
||||
Total pot $19.30 | Rake $0
|
||||
Seat 1: Player4 collected ($19.30), mucked
|
||||
Seat 2: Player13 folded on 3rd St.
|
||||
Seat 3: Player1 folded on 3rd St.
|
||||
Seat 5: Player5 folded on 3rd St.
|
||||
Seat 6: Player14 folded on 3rd St.
|
||||
Seat 7: Player6 folded on 3rd St.
|
||||
Seat 8: Player10 folded on 5th St.
|
||||
|
||||
|
||||
|
||||
Full Tilt Poker Game #11111112961: Table Fpdb - $2/$4 Ante $0.40 - Limit Stud Hi - 13:19:27 ET - 2010/06/10
|
||||
Seat 1: Player4 ($26)
|
||||
Seat 2: Player13 ($90)
|
||||
Seat 3: Player1 ($105.20)
|
||||
Seat 5: Player5 ($108.20)
|
||||
Seat 6: Player14 ($144.70)
|
||||
Seat 7: Player6 ($41.50)
|
||||
Seat 8: Player10 ($26.80)
|
||||
Player4 antes $0.40
|
||||
Player13 antes $0.40
|
||||
Player1 antes $0.40
|
||||
Player5 antes $0.40
|
||||
Player10 antes $0.40
|
||||
Player14 antes $0.40
|
||||
Player6 antes $0.40
|
||||
*** 3RD STREET ***
|
||||
Dealt to Player4 [9d]
|
||||
Dealt to Player13 [Qs]
|
||||
Dealt to Player1 [9h 9s] [5c]
|
||||
Dealt to Player5 [Th]
|
||||
Dealt to Player14 [6c]
|
||||
Dealt to Player6 [2d]
|
||||
Dealt to Player10 [Qh]
|
||||
Player6 is low with [2d]
|
||||
Player6 brings in for $0.50
|
||||
Player10 folds
|
||||
Player4 folds
|
||||
Player13 folds
|
||||
Player1 completes it to $2
|
||||
Player5 folds
|
||||
Player14 folds
|
||||
Player6 calls $1.50
|
||||
*** 4TH STREET ***
|
||||
Dealt to Player1 [9h 9s 5c] [3s]
|
||||
Dealt to Player6 [2d] [Ah]
|
||||
Player6 checks
|
||||
Player1 bets $2
|
||||
Player6 calls $2
|
||||
*** 5TH STREET ***
|
||||
Dealt to Player1 [9h 9s 5c 3s] [Kh]
|
||||
Dealt to Player6 [2d Ah] [Kc]
|
||||
Player6 checks
|
||||
Player1 bets $4
|
||||
Player6 raises to $8
|
||||
Player1 calls $4
|
||||
*** 6TH STREET ***
|
||||
Dealt to Player1 [9h 9s 5c 3s Kh] [5d]
|
||||
Dealt to Player6 [2d Ah Kc] [4d]
|
||||
Player1 bets $4
|
||||
Player6 calls $4
|
||||
*** 7TH STREET ***
|
||||
Dealt to Player1 [9h 9s 5c 3s Kh 5d] [8s]
|
||||
Player1 bets $4
|
||||
Player6 calls $4
|
||||
*** SHOW DOWN ***
|
||||
Player1 shows [9s 9h 5c 3s Kh 5d 8s] two pair, Nines and Fives
|
||||
Player6 shows [Ad Kd 2d Ah Kc 4d 8h] two pair, Aces and Kings
|
||||
Player6 wins the pot ($40.80) with two pair, Aces and Kings
|
||||
*** SUMMARY ***
|
||||
Total pot $42.80 | Rake $2
|
||||
Seat 1: Player4 folded on 3rd St.
|
||||
Seat 2: Player13 folded on 3rd St.
|
||||
Seat 3: Player1 showed [9s 9h 5c 3s Kh 5d 8s] and lost with two pair, Nines and Fives
|
||||
Seat 5: Player5 folded on 3rd St.
|
||||
Seat 6: Player14 folded on 3rd St.
|
||||
Seat 7: Player6 showed [Ad Kd 2d Ah Kc 4d 8h] and won ($40.80) with two pair, Aces and Kings
|
||||
Seat 8: Player10 folded on 3rd St.
|
||||
|
||||
|
||||
|
||||
Full Tilt Poker Game #11111110018: Table Fpdb - $2/$4 Ante $0.40 - Limit Stud Hi - 13:26:21 ET - 2010/06/10
|
||||
Seat 1: Player12 ($66.10)
|
||||
Seat 2: Player13 ($85.50)
|
||||
Seat 3: Player1 ($81.10)
|
||||
Seat 4: Player11 ($283.75)
|
||||
Seat 5: Player5 ($109.40)
|
||||
Seat 6: Player14 ($140.20)
|
||||
Seat 7: Player6 ($59.80)
|
||||
Seat 8: Player10 ($62.10)
|
||||
Player10 antes $0.40
|
||||
Player13 antes $0.40
|
||||
Player1 antes $0.40
|
||||
Player5 antes $0.40
|
||||
Player14 antes $0.40
|
||||
Player12 antes $0.40
|
||||
Player11 antes $0.40
|
||||
Player6 antes $0.40
|
||||
*** 3RD STREET ***
|
||||
Dealt to Player12 [Qh]
|
||||
Dealt to Player13 [Kd]
|
||||
Dealt to Player1 [2d Kc] [5h]
|
||||
Dealt to Player11 [9d]
|
||||
Dealt to Player5 [6d]
|
||||
Dealt to Player14 [Ad]
|
||||
Dealt to Player6 [6h]
|
||||
Dealt to Player10 [7h]
|
||||
Player1 is low with [5h]
|
||||
Player1 brings in for $0.50
|
||||
Player11 folds
|
||||
Player5 folds
|
||||
Player14 folds
|
||||
Player6 folds
|
||||
Player10 folds
|
||||
Player12 folds
|
||||
Player13 completes it to $2
|
||||
Player1 folds
|
||||
Uncalled bet of $1.50 returned to Player13
|
||||
Player13 mucks
|
||||
Player13 wins the pot ($4.20)
|
||||
*** SUMMARY ***
|
||||
Total pot $4.20 | Rake $0
|
||||
Seat 1: Player12 folded on 3rd St.
|
||||
Seat 2: Player13 collected ($4.20), mucked
|
||||
Seat 3: Player1 folded on 3rd St.
|
||||
Seat 4: Player11 folded on 3rd St.
|
||||
Seat 5: Player5 folded on 3rd St.
|
||||
Seat 6: Player14 folded on 3rd St.
|
||||
Seat 7: Player6 folded on 3rd St.
|
||||
Seat 8: Player10 folded on 3rd St.
|
||||
|
||||
|
||||
|
||||
Full Tilt Poker Game #11111111146: Table Fpdb - $2/$4 Ante $0.40 - Limit Stud Hi - 13:26:47 ET - 2010/06/10
|
||||
Seat 1: Player12 ($65.70)
|
||||
Seat 2: Player13 ($88.80)
|
||||
Seat 3: Player1 ($80.20)
|
||||
Seat 4: Player11 ($283.35)
|
||||
Seat 5: Player5 ($109)
|
||||
Seat 6: Player14 ($139.80)
|
||||
Seat 7: Player6 ($59.40)
|
||||
Seat 8: Player10 ($61.70)
|
||||
Player10 antes $0.40
|
||||
Player1 antes $0.40
|
||||
Player13 antes $0.40
|
||||
Player5 antes $0.40
|
||||
Player11 antes $0.40
|
||||
Player12 antes $0.40
|
||||
Player14 antes $0.40
|
||||
Player6 antes $0.40
|
||||
*** 3RD STREET ***
|
||||
Dealt to Player12 [Qd]
|
||||
Dealt to Player13 [5c]
|
||||
Dealt to Player1 [4d 3s] [9s]
|
||||
Dealt to Player11 [Ks]
|
||||
Dealt to Player5 [2c]
|
||||
Dealt to Player14 [3d]
|
||||
Dealt to Player6 [2h]
|
||||
Dealt to Player10 [2d]
|
||||
Player5 is low with [2c]
|
||||
Player5 brings in for $0.50
|
||||
Player14 folds
|
||||
Player6 folds
|
||||
Player10 folds
|
||||
Player12 folds
|
||||
Player13 folds
|
||||
Player1 folds
|
||||
Player11 completes it to $2
|
||||
Player5 calls $1.50
|
||||
*** 4TH STREET ***
|
||||
Dealt to Player11 [Ks] [Ah]
|
||||
Dealt to Player5 [2c] [5s]
|
||||
Player11 bets $2
|
||||
Player5 folds
|
||||
Uncalled bet of $2 returned to Player11
|
||||
Player11 mucks
|
||||
Player11 wins the pot ($7.20)
|
||||
*** SUMMARY ***
|
||||
Total pot $7.20 | Rake $0
|
||||
Seat 1: Player12 folded on 3rd St.
|
||||
Seat 2: Player13 folded on 3rd St.
|
||||
Seat 3: Player1 folded on 3rd St.
|
||||
Seat 4: Player11 collected ($7.20), mucked
|
||||
Seat 5: Player5 folded on 4th St.
|
||||
Seat 6: Player14 folded on 3rd St.
|
||||
Seat 7: Player6 folded on 3rd St.
|
||||
Seat 8: Player10 folded on 3rd St.
|
||||
|
||||
|
||||
|
||||
Full Tilt Poker Game #11111111633: Table Fpdb - $2/$4 Ante $0.40 - Limit Stud Hi - 13:37:55 ET - 2010/06/10
|
||||
Seat 1: Player12 ($72)
|
||||
Seat 2: Player9 ($40), is sitting out
|
||||
Seat 3: Player1 ($89.20)
|
||||
Seat 4: Player2 ($96.10)
|
||||
Seat 5: Player5 ($105.50), is sitting out
|
||||
Seat 6: Player14 ($131.70)
|
||||
Seat 7: Player6 ($54.70)
|
||||
Seat 8: Player10 ($96.40)
|
||||
Player10 antes $0.40
|
||||
Player1 antes $0.40
|
||||
Player12 antes $0.40
|
||||
Player14 antes $0.40
|
||||
Player6 antes $0.40
|
||||
5 seconds left to act
|
||||
Player2 is sitting out
|
||||
*** 3RD STREET ***
|
||||
Dealt to Player12 [5c]
|
||||
Dealt to Player1 [Td 9d] [Kc]
|
||||
Dealt to Player14 [5h]
|
||||
Dealt to Player6 [4s]
|
||||
Dealt to Player10 [7s]
|
||||
Player6 is low with [4s]
|
||||
Player2 stands up
|
||||
Player6 brings in for $0.50
|
||||
Player10 folds
|
||||
Player12 folds
|
||||
Player1 completes it to $2
|
||||
Player14 calls $2
|
||||
Player6 folds
|
||||
*** 4TH STREET ***
|
||||
Dealt to Player1 [Td 9d Kc] [9s]
|
||||
Dealt to Player14 [5h] [9h]
|
||||
Player1 bets $2
|
||||
Player14 raises to $4
|
||||
Player1 calls $2
|
||||
*** 5TH STREET ***
|
||||
Dealt to Player1 [Td 9d Kc 9s] [Tc]
|
||||
Dealt to Player14 [5h 9h] [3d]
|
||||
Player1 checks
|
||||
Player14 checks
|
||||
*** 6TH STREET ***
|
||||
Dealt to Player1 [Td 9d Kc 9s Tc] [9c]
|
||||
Dealt to Player14 [5h 9h 3d] [Th]
|
||||
Player1 bets $4
|
||||
Player14 calls $4
|
||||
*** 7TH STREET ***
|
||||
Dealt to Player1 [Td 9d Kc 9s Tc 9c] [7h]
|
||||
Player1 bets $4
|
||||
Player14 calls $4
|
||||
*** SHOW DOWN ***
|
||||
Player1 shows [Td 9d Kc 9s Tc 9c 7h] a full house, Nines full of Tens
|
||||
Player14 mucks
|
||||
Player1 wins the pot ($29.50) with a full house, Nines full of Tens
|
||||
*** SUMMARY ***
|
||||
Total pot $30.50 | Rake $1
|
||||
Seat 1: Player12 folded on 3rd St.
|
||||
Seat 2: Player9 is sitting out
|
||||
Seat 3: Player1 showed [Td 9d Kc 9s Tc 9c 7h] and won ($29.50) with a full house, Nines full of Tens
|
||||
Seat 4: Player2 is sitting out
|
||||
Seat 5: Player5 is sitting out
|
||||
Seat 6: Player14 mucked [8h 6h 5h 9h 3d Th 3h] - a flush, Ten high
|
||||
Seat 7: Player6 folded on 3rd St.
|
||||
Seat 8: Player10 folded on 3rd St.
|
||||
|
||||
|
||||
|
||||
Full Tilt Poker Game #11111113928: Table Fpdb - $2/$4 Ante $0.40 - Limit Stud Hi - 13:39:41 ET - 2010/06/10
|
||||
Seat 1: Player12 ($68.70)
|
||||
Seat 2: Player9 ($40), is sitting out
|
||||
Seat 3: Player1 ($103.90)
|
||||
Seat 6: Player14 ($116.40)
|
||||
Seat 7: Player6 ($58.40)
|
||||
Seat 8: Player10 ($95.60)
|
||||
Player10 antes $0.40
|
||||
Player1 antes $0.40
|
||||
Player6 antes $0.40
|
||||
Player3 sits down
|
||||
Player14 antes $0.40
|
||||
Player12 antes $0.40
|
||||
*** 3RD STREET ***
|
||||
Dealt to Player12 [9c]
|
||||
Dealt to Player1 [Ts 4h] [9h]
|
||||
Dealt to Player14 [7c]
|
||||
Dealt to Player6 [7s]
|
||||
Dealt to Player10 [2h]
|
||||
Player10 is low with [2h]
|
||||
Player3 adds $40
|
||||
Player10 brings in for $0.50
|
||||
Player12 folds
|
||||
Player1 completes it to $2
|
||||
Player14 folds
|
||||
Player6 folds
|
||||
Player10 folds
|
||||
Uncalled bet of $1.50 returned to Player1
|
||||
Player1 mucks
|
||||
Player1 wins the pot ($3)
|
||||
*** SUMMARY ***
|
||||
Total pot $3 | Rake $0
|
||||
Seat 1: Player12 folded on 3rd St.
|
||||
Seat 2: Player9 is sitting out
|
||||
Seat 3: Player1 collected ($3), mucked
|
||||
Seat 6: Player14 folded on 3rd St.
|
||||
Seat 7: Player6 folded on 3rd St.
|
||||
Seat 8: Player10 folded on 3rd St.
|
||||
|
||||
|
||||
|
||||
|
||||
Full Tilt Poker Game #11111111062: Table Fpdb - $2/$4 Ante $0.40 - Limit Stud Hi - 13:51:45 ET - 2010/06/10
|
||||
Seat 1: Player12 ($83.40)
|
||||
Seat 2: Player9 ($24.35)
|
||||
Seat 3: Player1 ($147.90)
|
||||
Seat 4: Player3 ($74.10)
|
||||
Seat 5: Player8 ($63.10)
|
||||
Seat 6: Player14 ($103)
|
||||
Seat 7: Player6 ($63.20)
|
||||
Seat 8: Player7 ($48.40)
|
||||
Player7 antes $0.40
|
||||
Player1 antes $0.40
|
||||
Player8 antes $0.40
|
||||
Player3 antes $0.40
|
||||
Player9 antes $0.40
|
||||
Player12 antes $0.40
|
||||
Player14 antes $0.40
|
||||
Player6 antes $0.40
|
||||
*** 3RD STREET ***
|
||||
Dealt to Player12 [As]
|
||||
Dealt to Player9 [7s]
|
||||
Dealt to Player1 [7h 6s] [8d]
|
||||
Dealt to Player3 [2d]
|
||||
Dealt to Player8 [3c]
|
||||
Dealt to Player14 [7c]
|
||||
Dealt to Player6 [8h]
|
||||
Dealt to Player7 [Qs]
|
||||
Player3 is low with [2d]
|
||||
Player3 brings in for $0.50
|
||||
Player8 folds
|
||||
Player14 folds
|
||||
Player6 folds
|
||||
Player7 folds
|
||||
Player12 completes it to $2
|
||||
Player9 folds
|
||||
Player1 calls $2
|
||||
Player3 calls $1.50
|
||||
*** 4TH STREET ***
|
||||
Dealt to Player12 [As] [5d]
|
||||
Dealt to Player1 [7h 6s 8d] [Qc]
|
||||
Dealt to Player3 [2d] [3h]
|
||||
Player12 bets $2
|
||||
Player1 folds
|
||||
Player3 calls $2
|
||||
*** 5TH STREET ***
|
||||
Dealt to Player12 [As 5d] [4c]
|
||||
Dealt to Player3 [2d 3h] [5s]
|
||||
Player12 bets $4
|
||||
Player3 folds
|
||||
Uncalled bet of $4 returned to Player12
|
||||
Player12 mucks
|
||||
Player12 wins the pot ($13.20)
|
||||
*** SUMMARY ***
|
||||
Total pot $13.20 | Rake $0
|
||||
Seat 1: Player12 collected ($13.20), mucked
|
||||
Seat 2: Player9 folded on 3rd St.
|
||||
Seat 3: Player1 folded on 4th St.
|
||||
Seat 4: Player3 folded on 5th St.
|
||||
Seat 5: Player8 folded on 3rd St.
|
||||
Seat 6: Player14 folded on 3rd St.
|
||||
Seat 7: Player6 folded on 3rd St.
|
||||
Seat 8: Player7 folded on 3rd St.
|
||||
|
||||
|
||||
|
||||
Full Tilt Poker Game #11111115744: Table Fpdb - $2/$4 Ante $0.40 - Limit Stud Hi - 14:02:17 ET - 2010/06/10
|
||||
Seat 2: Player0 ($60)
|
||||
Seat 3: Player1 ($129.30)
|
||||
Seat 4: Player3 ($125.75)
|
||||
Seat 5: Player8 ($40.10)
|
||||
Seat 7: Player6 ($72)
|
||||
Seat 8: Player7 ($32.20)
|
||||
Player0 antes $0.40
|
||||
Player8 antes $0.40
|
||||
Player7 antes $0.40
|
||||
Player1 antes $0.40
|
||||
Player3 antes $0.40
|
||||
Player6 antes $0.40
|
||||
*** 3RD STREET ***
|
||||
Dealt to Player0 [Th]
|
||||
Dealt to Player1 [9s Qc] [7d]
|
||||
Dealt to Player3 [Qh]
|
||||
Dealt to Player8 [Kd]
|
||||
Dealt to Player6 [Jd]
|
||||
Dealt to Player7 [Jh]
|
||||
Player1 is low with [7d]
|
||||
Player1 brings in for $0.50
|
||||
Player3 folds
|
||||
Player8 folds
|
||||
Player6 folds
|
||||
Player7 completes it to $2
|
||||
Player0 calls $2
|
||||
Player1 folds
|
||||
*** 4TH STREET ***
|
||||
Dealt to Player0 [Th] [As]
|
||||
Dealt to Player7 [Jh] [8c]
|
||||
Player0 bets $2
|
||||
Player7 calls $2
|
||||
*** 5TH STREET ***
|
||||
Dealt to Player0 [Th As] [Kh]
|
||||
Dealt to Player7 [Jh 8c] [2s]
|
||||
Player0 checks
|
||||
Player7 checks
|
||||
*** 6TH STREET ***
|
||||
Dealt to Player0 [Th As Kh] [7h]
|
||||
Dealt to Player7 [Jh 8c 2s] [9h]
|
||||
Player0 bets $4
|
||||
Player7 folds
|
||||
Uncalled bet of $4 returned to Player0
|
||||
Player0 mucks
|
||||
Player0 wins the pot ($10.90)
|
||||
*** SUMMARY ***
|
||||
Total pot $10.90 | Rake $0
|
||||
Seat 2: Player0 collected ($10.90), mucked
|
||||
Seat 3: Player1 folded on 3rd St.
|
||||
Seat 4: Player3 folded on 3rd St.
|
||||
Seat 5: Player8 folded on 3rd St.
|
||||
Seat 7: Player6 folded on 3rd St.
|
||||
Seat 8: Player7 folded on 6th St.
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
Full Tilt Poker Game #19505996411: $2 + $0.25 Sit & Go (148860619), Table 1 - 300/600 - Limit Hold'em - 18:58:46 ET - 2010/03/23
|
||||
Seat 2: Player2 (7,723)
|
||||
Seat 5: Player5 (3,409)
|
||||
Seat 6: Player6 (50)
|
||||
Seat 8: Player8 (818)
|
||||
Player6 posts the small blind of 50, and is all in
|
||||
Player8 posts the big blind of 300
|
||||
The button is in seat #5
|
||||
*** HOLE CARDS ***
|
||||
Dealt to Player5 [2h 9h]
|
||||
Player2 has 15 seconds left to act
|
||||
Player2 calls 300
|
||||
Player5 folds
|
||||
Player8 checks
|
||||
*** FLOP *** [2d 7s Qc]
|
||||
Player8 checks
|
||||
Player2 checks
|
||||
*** TURN *** [2d 7s Qc] [8s]
|
||||
Player8 checks
|
||||
Player2 checks
|
||||
*** RIVER *** [2d 7s Qc 8s] [5c]
|
||||
Player8 checks
|
||||
Player2 checks
|
||||
*** SHOW DOWN ***
|
||||
Player8 shows [Ts 4c] Queen Ten high
|
||||
Player2 shows [2c As] a pair of Twos
|
||||
Player2 wins the side pot (500) with a pair of Twos
|
||||
Player6 shows [7c 5s] two pair, Sevens and Fives
|
||||
Player6 wins the main pot (150) with two pair, Sevens and Fives
|
||||
*** SUMMARY ***
|
||||
Total pot 650 Main pot 150. Side pot 500. | Rake 0
|
||||
Board: [2d 7s Qc 8s 5c]
|
||||
Seat 2: Player2 showed [2c As] and won (500) with a pair of Twos
|
||||
Seat 5: Player5 (button) didn't bet (folded)
|
||||
Seat 6: Player6 (small blind) showed [7c 5s] and won (150) with two pair, Sevens and Fives
|
||||
Seat 8: Player8 (big blind) showed [Ts 4c] and lost with Queen Ten high
|
||||
|
||||
|
||||
|
7
run_fpdb.py
Normal file → Executable file
7
run_fpdb.py
Normal file → Executable file
|
@ -15,7 +15,6 @@
|
|||
#In the "official" distribution you can find the license in
|
||||
#agpl-3.0.txt in the docs folder of the package.
|
||||
|
||||
|
||||
import os
|
||||
import sys
|
||||
|
||||
|
@ -25,6 +24,8 @@ sys.path[0] = sys.path[0]+os.sep+"pyfpdb"
|
|||
os.chdir(sys.path[0])
|
||||
#print "sys.path[0] =", sys.path[0], "cwd =", os.getcwd()
|
||||
|
||||
|
||||
os.execvpe('pythonw.exe', ('pythonw.exe', 'fpdb.pyw', '-r'), os.environ)
|
||||
if os.name=='nt':
|
||||
os.execvpe('pythonw.exe', list(('pythonw.exe', 'fpdb.pyw', '-r'))+sys.argv[1:], os.environ)
|
||||
else:
|
||||
os.execvpe('python', list(('python', 'fpdb.pyw', '-r'))+sys.argv[1:], os.environ)
|
||||
# first arg is ignored (name of program being run)
|
||||
|
|
|
@ -1,38 +0,0 @@
|
|||
#!/usr/bin/python
|
||||
|
||||
#Copyright 2008 Steffen Jobbagy-Felso
|
||||
#This program is free software: you can redistribute it and/or modify
|
||||
#it under the terms of the GNU Affero General Public License as published by
|
||||
#the Free Software Foundation, version 3 of the License.
|
||||
#
|
||||
#This program is distributed in the hope that it will be useful,
|
||||
#but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
#GNU General Public License for more details.
|
||||
#
|
||||
#You should have received a copy of the GNU Affero General Public License
|
||||
#along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#In the "official" distribution you can find the license in
|
||||
#agpl-3.0.txt in the docs folder of the package.
|
||||
|
||||
import sys
|
||||
import MySQLdb
|
||||
|
||||
db = MySQLdb.connect("localhost", "fpdb", sys.argv[1], "fpdb")
|
||||
cursor = db.cursor()
|
||||
print "Connected to MySQL on localhost. Printing dev-supplied base data:"
|
||||
|
||||
cursor.execute("SELECT * FROM sites")
|
||||
print "Sites"
|
||||
print "====="
|
||||
print cursor.fetchall()
|
||||
|
||||
cursor.execute("SELECT * FROM gametypes")
|
||||
print "Gametypes"
|
||||
print "========="
|
||||
result=cursor.fetchall()
|
||||
for i in range (len(result)):
|
||||
print result[i]
|
||||
|
||||
cursor.close()
|
||||
db.close()
|
|
@ -1,83 +0,0 @@
|
|||
#!/usr/bin/python
|
||||
|
||||
#Copyright 2008 Steffen Jobbagy-Felso
|
||||
#This program is free software: you can redistribute it and/or modify
|
||||
#it under the terms of the GNU Affero General Public License as published by
|
||||
#the Free Software Foundation, version 3 of the License.
|
||||
#
|
||||
#This program is distributed in the hope that it will be useful,
|
||||
#but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
#GNU General Public License for more details.
|
||||
#
|
||||
#You should have received a copy of the GNU Affero General Public License
|
||||
#along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#In the "official" distribution you can find the license in
|
||||
#agpl-3.0.txt in the docs folder of the package.
|
||||
|
||||
import sys
|
||||
import MySQLdb
|
||||
|
||||
db = MySQLdb.connect("localhost", "fpdb", sys.argv[1], "fpdb")
|
||||
cursor = db.cursor()
|
||||
print "Connected to MySQL on localhost. Printing summary stats:"
|
||||
|
||||
cursor.execute("SELECT id FROM Players")
|
||||
print "Players:",cursor.rowcount
|
||||
cursor.execute("SELECT id FROM Autorates")
|
||||
print "Autorates:",cursor.rowcount
|
||||
|
||||
cursor.execute("SELECT id FROM Sites")
|
||||
print "Sites:",cursor.rowcount
|
||||
cursor.execute("SELECT id FROM Gametypes")
|
||||
print "Gametypes:",cursor.rowcount
|
||||
|
||||
cursor.execute("SELECT id FROM Hands")
|
||||
print "Total Hands:",cursor.rowcount
|
||||
cursor.execute("SELECT Hands.id FROM Hands INNER JOIN Gametypes ON Hands.gametypeId = Gametypes.id WHERE Gametypes.type='ring'")
|
||||
print "Hands, Ring:",cursor.rowcount
|
||||
cursor.execute("SELECT Hands.id FROM Hands INNER JOIN Gametypes ON Hands.gametypeId = Gametypes.id WHERE Gametypes.type='stt'")
|
||||
print "Hands, STT:",cursor.rowcount
|
||||
cursor.execute("SELECT Hands.id FROM Hands INNER JOIN Gametypes ON Hands.gametypeId = Gametypes.id WHERE Gametypes.type='mtt'")
|
||||
print "Hands, MTT:",cursor.rowcount
|
||||
|
||||
print ""
|
||||
print "Hands per category and type"
|
||||
cursor.execute("SELECT Hands.id FROM Hands INNER JOIN Gametypes ON Hands.gametypeId = Gametypes.id WHERE Gametypes.limitType='cn'")
|
||||
print "Hands, Cap No Limit:",cursor.rowcount
|
||||
cursor.execute("SELECT Hands.id FROM Hands INNER JOIN Gametypes ON Hands.gametypeId = Gametypes.id WHERE Gametypes.limitType='cp'")
|
||||
print "Hands, Cap Pot Limit:",cursor.rowcount
|
||||
cursor.execute("SELECT Hands.id FROM Hands INNER JOIN Gametypes ON Hands.gametypeId = Gametypes.id WHERE Gametypes.category='holdem' AND Gametypes.limitType='nl'")
|
||||
print "Hands, Holdem No Limit:",cursor.rowcount
|
||||
cursor.execute("SELECT Hands.id FROM Hands INNER JOIN Gametypes ON Hands.gametypeId = Gametypes.id WHERE Gametypes.category='holdem' AND Gametypes.limitType='pl'")
|
||||
print "Hands, Holdem Pot Limit:",cursor.rowcount
|
||||
cursor.execute("SELECT Hands.id FROM Hands INNER JOIN Gametypes ON Hands.gametypeId = Gametypes.id WHERE Gametypes.category='holdem' AND Gametypes.limitType='fl'")
|
||||
print "Hands, Holdem Fixed Limit:",cursor.rowcount
|
||||
cursor.execute("SELECT Hands.id FROM Hands INNER JOIN Gametypes ON Hands.gametypeId = Gametypes.id WHERE Gametypes.category='omahahi' AND Gametypes.limitType='nl'")
|
||||
print "Hands, Omaha Hi No Limit:",cursor.rowcount
|
||||
cursor.execute("SELECT Hands.id FROM Hands INNER JOIN Gametypes ON Hands.gametypeId = Gametypes.id WHERE Gametypes.category='omahahi' AND Gametypes.limitType='pl'")
|
||||
print "Hands, Omaha Hi Pot Limit:",cursor.rowcount
|
||||
cursor.execute("SELECT Hands.id FROM Hands INNER JOIN Gametypes ON Hands.gametypeId = Gametypes.id WHERE Gametypes.category='omahahi' AND Gametypes.limitType='fl'")
|
||||
print "Hands, Omaha Hi Fixed Limit:",cursor.rowcount
|
||||
cursor.execute("SELECT Hands.id FROM Hands INNER JOIN Gametypes ON Hands.gametypeId = Gametypes.id WHERE Gametypes.category='omahahilo' AND Gametypes.limitType='nl'")
|
||||
print "Hands, Omaha Hi/Lo No Limit:",cursor.rowcount
|
||||
cursor.execute("SELECT Hands.id FROM Hands INNER JOIN Gametypes ON Hands.gametypeId = Gametypes.id WHERE Gametypes.category='omahahilo' AND Gametypes.limitType='pl'")
|
||||
print "Hands, Omaha Hi/Lo Pot Limit:",cursor.rowcount
|
||||
cursor.execute("SELECT Hands.id FROM Hands INNER JOIN Gametypes ON Hands.gametypeId = Gametypes.id WHERE Gametypes.category='omahahilo' AND Gametypes.limitType='fl'")
|
||||
print "Hands, Omaha Hi/Lo Fixed Limit:",cursor.rowcount
|
||||
cursor.execute("SELECT Hands.id FROM Hands INNER JOIN Gametypes ON Hands.gametypeId = Gametypes.id WHERE Gametypes.category='razz'")
|
||||
print "Hands, Razz:",cursor.rowcount
|
||||
cursor.execute("SELECT Hands.id FROM Hands INNER JOIN Gametypes ON Hands.gametypeId = Gametypes.id WHERE Gametypes.category='studhi'")
|
||||
print "Hands, Stud Hi:",cursor.rowcount
|
||||
cursor.execute("SELECT Hands.id FROM Hands INNER JOIN Gametypes ON Hands.gametypeId = Gametypes.id WHERE Gametypes.category='studhilo'")
|
||||
print "Hands, Stud Hi/Lo:",cursor.rowcount
|
||||
print ""
|
||||
cursor.execute("SELECT id FROM BoardCards")
|
||||
print "Board_cards:",cursor.rowcount
|
||||
cursor.execute("SELECT id FROM HandsPlayers")
|
||||
print "Hands_players:",cursor.rowcount
|
||||
cursor.execute("SELECT id FROM HandsActions")
|
||||
print "Hands_actions:",cursor.rowcount
|
||||
|
||||
cursor.close()
|
||||
db.close()
|
Loading…
Reference in New Issue
Block a user