Merge branch 'master' of git://git.assembla.com/fpdboz
This commit is contained in:
commit
fd2cb9dc42
|
@ -29,8 +29,8 @@ cp -R regression-test fpdb-$1/
|
||||||
cp -R utils fpdb-$1/
|
cp -R utils fpdb-$1/
|
||||||
|
|
||||||
cd fpdb-$1
|
cd fpdb-$1
|
||||||
zip -r ../../fpdb-1.0_$1.zip *
|
zip -r releases/fpdb-1.0_$1.zip *
|
||||||
tar -cf - * | bzip2 >> ../../fpdb-1.0_$1.tar.bz2
|
tar -cf - * | bzip2 >> releases/fpdb-1.0_$1.tar.bz2
|
||||||
cd ..
|
cd ..
|
||||||
rm -r fpdb-$1
|
rm -r fpdb-$1
|
||||||
|
|
||||||
|
|
|
@ -312,11 +312,10 @@ The program itself is licensed under AGPLv3, see agpl-3.0.txt</p>
|
||||||
</TABLE>
|
</TABLE>
|
||||||
<p><BR></P>
|
<p><BR></P>
|
||||||
<p><B>Table HandsPlayers</B></P>
|
<p><B>Table HandsPlayers</B></P>
|
||||||
<p>cardX: can be 1 through 20, one for each card. In holdem only 1-2 of these are used, in omaha 1-4, in stud/razz 1-7, in single draw games 1-10 is used and in badugi 1-16 (4*4) is used.</P>
|
<p>cardX: can be 1 through 20, one for each card. In holdem only 1-2 of these are used, in omaha 1-4, in stud/razz 1-7, in single draw 1-10, in tripple draw all 20 and in badugi 1-16 (4*4).</P>
|
||||||
<p>For the draw games: the first 5 (badugi: 4) cards are the initial cards, the next 5 (badugi: 4) are after the first draw. If a player keeps some cards then those cards' spaces are filled with "k", short for "kept".<br>
|
<p>For the draw games: the first 5 (badugi: 4) cards are the initial cards, the next 5 (badugi: 4) are after the first draw, etc.<br>
|
||||||
Example 1: If a player gets 2-6 spades for his first five cards and decides to throw away the 4 and then gets a 7 of spades then the first 10 fields of cardXValue would be as follows: 2, 3, 4, 5, 6, k, k, 7, k, k<br>
|
Example 1: If a player gets 2-6 spades for his first five cards and decides to throw away the 4 and then gets a 7 of spades then the first 10 fields of cardXValue would be as follows: 2, 3, 4, 5, 6, 2, 3, 5, 6, 7<br>
|
||||||
Example 2: If a player gets 2, 3, 5, 8, J of spades for his first five cards and decides to throw away the 2 and the 3 and then gets a Q and K of spades then the first 10 fields of cardXValue would be as follows: 2, 3, 5, 8, J, Q, K, k, k, k<br>
|
Example 2: If a player gets 2, 3, 5, 8, J of spades for his first five cards and decides to throw away the 2 and the 3 and then gets a Q and K of spades then the first 10 fields of cardXValue would be as follows: 2, 3, 5, 8, J, 5, 8, J, Q, K.</p>
|
||||||
Note that it will k in the space of which card was there previously, so in example 2 where the player kept the last 3 cards, the last 3 fields of the first draw (ie. card8-10Value) are replaced with k.</p>
|
|
||||||
<p>I did not separate this into an extra table because I felt the lost space is not sufficiently large. Also the benefit for searching is far less relevant.</P>
|
<p>I did not separate this into an extra table because I felt the lost space is not sufficiently large. Also the benefit for searching is far less relevant.</P>
|
||||||
<TABLE BORDER=1 CELLPADDING=2 CELLSPACING=0>
|
<TABLE BORDER=1 CELLPADDING=2 CELLSPACING=0>
|
||||||
<TR VALIGN=TOP>
|
<TR VALIGN=TOP>
|
||||||
|
@ -370,6 +369,17 @@ Note that it will k in the space of which card was there previously, so in examp
|
||||||
<TD><P>char(1)</P></TD>
|
<TD><P>char(1)</P></TD>
|
||||||
<TD><P>h=hearts, s=spades, d=diamonds, c=clubs, unknown/no card=x</P></TD>
|
<TD><P>h=hearts, s=spades, d=diamonds, c=clubs, unknown/no card=x</P></TD>
|
||||||
</TR>
|
</TR>
|
||||||
|
<TR VALIGN=TOP>
|
||||||
|
<TD><P>cardXDiscarded</P></TD>
|
||||||
|
<TD><P>boolean</P></TD>
|
||||||
|
<TD><P>Whether the card was discarded (this only applies to draw games, X can be 1 through 15 since the final cards can obviously not be discarded).</P></TD>
|
||||||
|
</TR>
|
||||||
|
<TR VALIGN=TOP>
|
||||||
|
<TD><P>DrawnX</P></TD>
|
||||||
|
<TD><P>smallint</P></TD>
|
||||||
|
<TD><p>X can be 1 through 3.<br>
|
||||||
|
This field denotes how many cards the player has drawn on each draw.</P></TD>
|
||||||
|
</TR>
|
||||||
<TR VALIGN=TOP>
|
<TR VALIGN=TOP>
|
||||||
<TD><P>winnings</P></TD>
|
<TD><P>winnings</P></TD>
|
||||||
<TD><P>int</P></TD>
|
<TD><P>int</P></TD>
|
||||||
|
|
|
@ -444,9 +444,9 @@ class Config:
|
||||||
def get_import_parameters(self):
|
def get_import_parameters(self):
|
||||||
imp = {}
|
imp = {}
|
||||||
try:
|
try:
|
||||||
imp['callFpdbHud'] = self.callFpdbHud
|
imp['callFpdbHud'] = self.imp.callFpdbHud
|
||||||
imp['interval'] = self.interval
|
imp['interval'] = self.imp.interval
|
||||||
imp['hhArchiveBase'] = self.hhArchiveBase
|
imp['hhArchiveBase'] = self.imp.hhArchiveBase
|
||||||
except: # Default params
|
except: # Default params
|
||||||
imp['callFpdbHud'] = True
|
imp['callFpdbHud'] = True
|
||||||
imp['interval'] = 10
|
imp['interval'] = 10
|
||||||
|
@ -613,9 +613,7 @@ if __name__== "__main__":
|
||||||
print "----------- END POPUP WINDOW FORMATS -----------"
|
print "----------- END POPUP WINDOW FORMATS -----------"
|
||||||
|
|
||||||
print "\n----------- IMPORT -----------"
|
print "\n----------- IMPORT -----------"
|
||||||
tmp = c.get_import_parameters()
|
print c.imp
|
||||||
for param in tmp:
|
|
||||||
print " " + str(param) + ": " + str(tmp[param])
|
|
||||||
print "----------- END IMPORT -----------"
|
print "----------- END IMPORT -----------"
|
||||||
|
|
||||||
print "\n----------- TABLE VIEW -----------"
|
print "\n----------- TABLE VIEW -----------"
|
||||||
|
|
|
@ -73,13 +73,13 @@ class FpdbSQLQueries:
|
||||||
|
|
||||||
if(self.dbname == 'MySQL InnoDB'):
|
if(self.dbname == 'MySQL InnoDB'):
|
||||||
self.query['createSitesTable'] = """CREATE TABLE Sites (
|
self.query['createSitesTable'] = """CREATE TABLE Sites (
|
||||||
id SMALLINT UNSIGNED UNIQUE AUTO_INCREMENT NOT NULL, PRIMARY KEY (id),
|
id SMALLINT UNSIGNED AUTO_INCREMENT NOT NULL, PRIMARY KEY (id),
|
||||||
name varchar(32) NOT NULL,
|
name varchar(32) NOT NULL,
|
||||||
currency char(3) NOT NULL)
|
currency char(3) NOT NULL)
|
||||||
ENGINE=INNODB"""
|
ENGINE=INNODB"""
|
||||||
elif(self.dbname == 'PostgreSQL'):
|
elif(self.dbname == 'PostgreSQL'):
|
||||||
self.query['createSitesTable'] = """CREATE TABLE Sites (
|
self.query['createSitesTable'] = """CREATE TABLE Sites (
|
||||||
id SERIAL UNIQUE, PRIMARY KEY (id),
|
id SERIAL, PRIMARY KEY (id),
|
||||||
name varchar(32),
|
name varchar(32),
|
||||||
currency char(3))"""
|
currency char(3))"""
|
||||||
elif(self.dbname == 'SQLite'):
|
elif(self.dbname == 'SQLite'):
|
||||||
|
@ -92,7 +92,7 @@ class FpdbSQLQueries:
|
||||||
|
|
||||||
if(self.dbname == 'MySQL InnoDB'):
|
if(self.dbname == 'MySQL InnoDB'):
|
||||||
self.query['createGametypesTable'] = """CREATE TABLE Gametypes (
|
self.query['createGametypesTable'] = """CREATE TABLE Gametypes (
|
||||||
id SMALLINT UNSIGNED UNIQUE AUTO_INCREMENT NOT NULL, PRIMARY KEY (id),
|
id SMALLINT UNSIGNED AUTO_INCREMENT NOT NULL, PRIMARY KEY (id),
|
||||||
siteId SMALLINT UNSIGNED NOT NULL, FOREIGN KEY (siteId) REFERENCES Sites(id),
|
siteId SMALLINT UNSIGNED NOT NULL, FOREIGN KEY (siteId) REFERENCES Sites(id),
|
||||||
type char(4) NOT NULL,
|
type char(4) NOT NULL,
|
||||||
base char(4) NOT NULL,
|
base char(4) NOT NULL,
|
||||||
|
@ -106,7 +106,7 @@ class FpdbSQLQueries:
|
||||||
ENGINE=INNODB"""
|
ENGINE=INNODB"""
|
||||||
elif(self.dbname == 'PostgreSQL'):
|
elif(self.dbname == 'PostgreSQL'):
|
||||||
self.query['createGametypesTable'] = """CREATE TABLE Gametypes (
|
self.query['createGametypesTable'] = """CREATE TABLE Gametypes (
|
||||||
id SERIAL UNIQUE, PRIMARY KEY (id),
|
id SERIAL, PRIMARY KEY (id),
|
||||||
siteId INTEGER, FOREIGN KEY (siteId) REFERENCES Sites(id),
|
siteId INTEGER, FOREIGN KEY (siteId) REFERENCES Sites(id),
|
||||||
type char(4),
|
type char(4),
|
||||||
base char(4),
|
base char(4),
|
||||||
|
@ -127,7 +127,7 @@ class FpdbSQLQueries:
|
||||||
|
|
||||||
if(self.dbname == 'MySQL InnoDB'):
|
if(self.dbname == 'MySQL InnoDB'):
|
||||||
self.query['createPlayersTable'] = """CREATE TABLE Players (
|
self.query['createPlayersTable'] = """CREATE TABLE Players (
|
||||||
id INT UNSIGNED UNIQUE AUTO_INCREMENT NOT NULL, PRIMARY KEY (id),
|
id INT UNSIGNED AUTO_INCREMENT NOT NULL, PRIMARY KEY (id),
|
||||||
name VARCHAR(32) CHARACTER SET utf8 NOT NULL,
|
name VARCHAR(32) CHARACTER SET utf8 NOT NULL,
|
||||||
siteId SMALLINT UNSIGNED NOT NULL, FOREIGN KEY (siteId) REFERENCES Sites(id),
|
siteId SMALLINT UNSIGNED NOT NULL, FOREIGN KEY (siteId) REFERENCES Sites(id),
|
||||||
comment text,
|
comment text,
|
||||||
|
@ -135,7 +135,7 @@ class FpdbSQLQueries:
|
||||||
ENGINE=INNODB"""
|
ENGINE=INNODB"""
|
||||||
elif(self.dbname == 'PostgreSQL'):
|
elif(self.dbname == 'PostgreSQL'):
|
||||||
self.query['createPlayersTable'] = """CREATE TABLE Players (
|
self.query['createPlayersTable'] = """CREATE TABLE Players (
|
||||||
id SERIAL UNIQUE, PRIMARY KEY (id),
|
id SERIAL, PRIMARY KEY (id),
|
||||||
name VARCHAR(32),
|
name VARCHAR(32),
|
||||||
siteId INTEGER, FOREIGN KEY (siteId) REFERENCES Sites(id),
|
siteId INTEGER, FOREIGN KEY (siteId) REFERENCES Sites(id),
|
||||||
comment text,
|
comment text,
|
||||||
|
@ -150,7 +150,7 @@ class FpdbSQLQueries:
|
||||||
|
|
||||||
if(self.dbname == 'MySQL InnoDB'):
|
if(self.dbname == 'MySQL InnoDB'):
|
||||||
self.query['createAutoratesTable'] = """CREATE TABLE Autorates (
|
self.query['createAutoratesTable'] = """CREATE TABLE Autorates (
|
||||||
id BIGINT UNSIGNED UNIQUE AUTO_INCREMENT NOT NULL, PRIMARY KEY (id),
|
id BIGINT UNSIGNED AUTO_INCREMENT NOT NULL, PRIMARY KEY (id),
|
||||||
playerId INT UNSIGNED NOT NULL, FOREIGN KEY (playerId) REFERENCES Players(id),
|
playerId INT UNSIGNED NOT NULL, FOREIGN KEY (playerId) REFERENCES Players(id),
|
||||||
gametypeId SMALLINT UNSIGNED NOT NULL, FOREIGN KEY (gametypeId) REFERENCES Gametypes(id),
|
gametypeId SMALLINT UNSIGNED NOT NULL, FOREIGN KEY (gametypeId) REFERENCES Gametypes(id),
|
||||||
description varchar(50) NOT NULL,
|
description varchar(50) NOT NULL,
|
||||||
|
@ -160,7 +160,7 @@ class FpdbSQLQueries:
|
||||||
ENGINE=INNODB"""
|
ENGINE=INNODB"""
|
||||||
elif(self.dbname == 'PostgreSQL'):
|
elif(self.dbname == 'PostgreSQL'):
|
||||||
self.query['createAutoratesTable'] = """CREATE TABLE Autorates (
|
self.query['createAutoratesTable'] = """CREATE TABLE Autorates (
|
||||||
id BIGSERIAL UNIQUE, PRIMARY KEY (id),
|
id BIGSERIAL, PRIMARY KEY (id),
|
||||||
playerId INT, FOREIGN KEY (playerId) REFERENCES Players(id),
|
playerId INT, FOREIGN KEY (playerId) REFERENCES Players(id),
|
||||||
gametypeId INT, FOREIGN KEY (gametypeId) REFERENCES Gametypes(id),
|
gametypeId INT, FOREIGN KEY (gametypeId) REFERENCES Gametypes(id),
|
||||||
description varchar(50),
|
description varchar(50),
|
||||||
|
@ -177,7 +177,7 @@ class FpdbSQLQueries:
|
||||||
|
|
||||||
if(self.dbname == 'MySQL InnoDB'):
|
if(self.dbname == 'MySQL InnoDB'):
|
||||||
self.query['createHandsTable'] = """CREATE TABLE Hands (
|
self.query['createHandsTable'] = """CREATE TABLE Hands (
|
||||||
id BIGINT UNSIGNED UNIQUE AUTO_INCREMENT NOT NULL, PRIMARY KEY (id),
|
id BIGINT UNSIGNED AUTO_INCREMENT NOT NULL, PRIMARY KEY (id),
|
||||||
tableName VARCHAR(20) NOT NULL,
|
tableName VARCHAR(20) NOT NULL,
|
||||||
siteHandNo BIGINT NOT NULL,
|
siteHandNo BIGINT NOT NULL,
|
||||||
gametypeId SMALLINT UNSIGNED NOT NULL, FOREIGN KEY (gametypeId) REFERENCES Gametypes(id),
|
gametypeId SMALLINT UNSIGNED NOT NULL, FOREIGN KEY (gametypeId) REFERENCES Gametypes(id),
|
||||||
|
@ -190,7 +190,7 @@ class FpdbSQLQueries:
|
||||||
ENGINE=INNODB"""
|
ENGINE=INNODB"""
|
||||||
elif(self.dbname == 'PostgreSQL'):
|
elif(self.dbname == 'PostgreSQL'):
|
||||||
self.query['createHandsTable'] = """CREATE TABLE Hands (
|
self.query['createHandsTable'] = """CREATE TABLE Hands (
|
||||||
id BIGSERIAL UNIQUE, PRIMARY KEY (id),
|
id BIGSERIAL, PRIMARY KEY (id),
|
||||||
tableName VARCHAR(20),
|
tableName VARCHAR(20),
|
||||||
siteHandNo BIGINT,
|
siteHandNo BIGINT,
|
||||||
gametypeId INT, FOREIGN KEY (gametypeId) REFERENCES Gametypes(id),
|
gametypeId INT, FOREIGN KEY (gametypeId) REFERENCES Gametypes(id),
|
||||||
|
@ -210,7 +210,7 @@ class FpdbSQLQueries:
|
||||||
|
|
||||||
if(self.dbname == 'MySQL InnoDB'):
|
if(self.dbname == 'MySQL InnoDB'):
|
||||||
self.query['createBoardCardsTable'] = """CREATE TABLE BoardCards (
|
self.query['createBoardCardsTable'] = """CREATE TABLE BoardCards (
|
||||||
id BIGINT UNSIGNED UNIQUE AUTO_INCREMENT NOT NULL, PRIMARY KEY (id),
|
id BIGINT UNSIGNED AUTO_INCREMENT NOT NULL, PRIMARY KEY (id),
|
||||||
handId BIGINT UNSIGNED NOT NULL, FOREIGN KEY (handId) REFERENCES Hands(id),
|
handId BIGINT UNSIGNED NOT NULL, FOREIGN KEY (handId) REFERENCES Hands(id),
|
||||||
card1Value smallint NOT NULL,
|
card1Value smallint NOT NULL,
|
||||||
card1Suit char(1) NOT NULL,
|
card1Suit char(1) NOT NULL,
|
||||||
|
@ -225,7 +225,7 @@ class FpdbSQLQueries:
|
||||||
ENGINE=INNODB"""
|
ENGINE=INNODB"""
|
||||||
elif(self.dbname == 'PostgreSQL'):
|
elif(self.dbname == 'PostgreSQL'):
|
||||||
self.query['createBoardCardsTable'] = """CREATE TABLE BoardCards (
|
self.query['createBoardCardsTable'] = """CREATE TABLE BoardCards (
|
||||||
id BIGSERIAL UNIQUE, PRIMARY KEY (id),
|
id BIGSERIAL, PRIMARY KEY (id),
|
||||||
handId BIGINT, FOREIGN KEY (handId) REFERENCES Hands(id),
|
handId BIGINT, FOREIGN KEY (handId) REFERENCES Hands(id),
|
||||||
card1Value smallint,
|
card1Value smallint,
|
||||||
card1Suit char(1),
|
card1Suit char(1),
|
||||||
|
@ -247,7 +247,7 @@ class FpdbSQLQueries:
|
||||||
|
|
||||||
if(self.dbname == 'MySQL InnoDB'):
|
if(self.dbname == 'MySQL InnoDB'):
|
||||||
self.query['createTourneyTypesTable'] = """CREATE TABLE TourneyTypes (
|
self.query['createTourneyTypesTable'] = """CREATE TABLE TourneyTypes (
|
||||||
id SMALLINT UNSIGNED UNIQUE AUTO_INCREMENT NOT NULL, PRIMARY KEY (id),
|
id SMALLINT UNSIGNED AUTO_INCREMENT NOT NULL, PRIMARY KEY (id),
|
||||||
siteId SMALLINT UNSIGNED NOT NULL, FOREIGN KEY (siteId) REFERENCES Sites(id),
|
siteId SMALLINT UNSIGNED NOT NULL, FOREIGN KEY (siteId) REFERENCES Sites(id),
|
||||||
buyin INT NOT NULL,
|
buyin INT NOT NULL,
|
||||||
fee INT NOT NULL,
|
fee INT NOT NULL,
|
||||||
|
@ -272,7 +272,7 @@ class FpdbSQLQueries:
|
||||||
|
|
||||||
if(self.dbname == 'MySQL InnoDB'):
|
if(self.dbname == 'MySQL InnoDB'):
|
||||||
self.query['createTourneysTable'] = """CREATE TABLE Tourneys (
|
self.query['createTourneysTable'] = """CREATE TABLE Tourneys (
|
||||||
id INT UNSIGNED UNIQUE AUTO_INCREMENT NOT NULL, PRIMARY KEY (id),
|
id INT UNSIGNED AUTO_INCREMENT NOT NULL, PRIMARY KEY (id),
|
||||||
tourneyTypeId SMALLINT UNSIGNED NOT NULL, FOREIGN KEY (tourneyTypeId) REFERENCES TourneyTypes(id),
|
tourneyTypeId SMALLINT UNSIGNED NOT NULL, FOREIGN KEY (tourneyTypeId) REFERENCES TourneyTypes(id),
|
||||||
siteTourneyNo BIGINT NOT NULL,
|
siteTourneyNo BIGINT NOT NULL,
|
||||||
entries INT NOT NULL,
|
entries INT NOT NULL,
|
||||||
|
@ -283,7 +283,7 @@ class FpdbSQLQueries:
|
||||||
ENGINE=INNODB"""
|
ENGINE=INNODB"""
|
||||||
elif(self.dbname == 'PostgreSQL'):
|
elif(self.dbname == 'PostgreSQL'):
|
||||||
self.query['createTourneysTable'] = """CREATE TABLE Tourneys (
|
self.query['createTourneysTable'] = """CREATE TABLE Tourneys (
|
||||||
id SERIAL UNIQUE, PRIMARY KEY (id),
|
id SERIAL, PRIMARY KEY (id),
|
||||||
tourneyTypeId INT, FOREIGN KEY (tourneyTypeId) REFERENCES TourneyTypes(id),
|
tourneyTypeId INT, FOREIGN KEY (tourneyTypeId) REFERENCES TourneyTypes(id),
|
||||||
siteTourneyNo BIGINT,
|
siteTourneyNo BIGINT,
|
||||||
entries INT,
|
entries INT,
|
||||||
|
@ -300,7 +300,7 @@ class FpdbSQLQueries:
|
||||||
|
|
||||||
if(self.dbname == 'MySQL InnoDB'):
|
if(self.dbname == 'MySQL InnoDB'):
|
||||||
self.query['createHandsPlayersTable'] = """CREATE TABLE HandsPlayers (
|
self.query['createHandsPlayersTable'] = """CREATE TABLE HandsPlayers (
|
||||||
id BIGINT UNSIGNED UNIQUE AUTO_INCREMENT NOT NULL, PRIMARY KEY (id),
|
id BIGINT UNSIGNED AUTO_INCREMENT NOT NULL, PRIMARY KEY (id),
|
||||||
handId BIGINT UNSIGNED NOT NULL, FOREIGN KEY (handId) REFERENCES Hands(id),
|
handId BIGINT UNSIGNED NOT NULL, FOREIGN KEY (handId) REFERENCES Hands(id),
|
||||||
playerId INT UNSIGNED NOT NULL, FOREIGN KEY (playerId) REFERENCES Players(id),
|
playerId INT UNSIGNED NOT NULL, FOREIGN KEY (playerId) REFERENCES Players(id),
|
||||||
startCash INT NOT NULL,
|
startCash INT NOT NULL,
|
||||||
|
@ -332,7 +332,7 @@ class FpdbSQLQueries:
|
||||||
ENGINE=INNODB"""
|
ENGINE=INNODB"""
|
||||||
elif(self.dbname == 'PostgreSQL'):
|
elif(self.dbname == 'PostgreSQL'):
|
||||||
self.query['createHandsPlayersTable'] = """CREATE TABLE HandsPlayers (
|
self.query['createHandsPlayersTable'] = """CREATE TABLE HandsPlayers (
|
||||||
id BIGSERIAL UNIQUE, PRIMARY KEY (id),
|
id BIGSERIAL, PRIMARY KEY (id),
|
||||||
handId BIGINT, FOREIGN KEY (handId) REFERENCES Hands(id),
|
handId BIGINT, FOREIGN KEY (handId) REFERENCES Hands(id),
|
||||||
playerId INT, FOREIGN KEY (playerId) REFERENCES Players(id),
|
playerId INT, FOREIGN KEY (playerId) REFERENCES Players(id),
|
||||||
startCash INT,
|
startCash INT,
|
||||||
|
@ -370,7 +370,7 @@ class FpdbSQLQueries:
|
||||||
|
|
||||||
if(self.dbname == 'MySQL InnoDB'):
|
if(self.dbname == 'MySQL InnoDB'):
|
||||||
self.query['createTourneysPlayersTable'] = """CREATE TABLE TourneysPlayers (
|
self.query['createTourneysPlayersTable'] = """CREATE TABLE TourneysPlayers (
|
||||||
id BIGINT UNSIGNED UNIQUE AUTO_INCREMENT NOT NULL, PRIMARY KEY (id),
|
id BIGINT UNSIGNED AUTO_INCREMENT NOT NULL, PRIMARY KEY (id),
|
||||||
tourneyId INT UNSIGNED NOT NULL, FOREIGN KEY (tourneyId) REFERENCES Tourneys(id),
|
tourneyId INT UNSIGNED NOT NULL, FOREIGN KEY (tourneyId) REFERENCES Tourneys(id),
|
||||||
playerId INT UNSIGNED NOT NULL, FOREIGN KEY (playerId) REFERENCES Players(id),
|
playerId INT UNSIGNED NOT NULL, FOREIGN KEY (playerId) REFERENCES Players(id),
|
||||||
payinAmount INT NOT NULL,
|
payinAmount INT NOT NULL,
|
||||||
|
@ -381,7 +381,7 @@ class FpdbSQLQueries:
|
||||||
ENGINE=INNODB"""
|
ENGINE=INNODB"""
|
||||||
elif(self.dbname == 'PostgreSQL'):
|
elif(self.dbname == 'PostgreSQL'):
|
||||||
self.query['createTourneysPlayersTable'] = """CREATE TABLE TourneysPlayers (
|
self.query['createTourneysPlayersTable'] = """CREATE TABLE TourneysPlayers (
|
||||||
id BIGSERIAL UNIQUE, PRIMARY KEY (id),
|
id BIGSERIAL, PRIMARY KEY (id),
|
||||||
tourneyId INT, FOREIGN KEY (tourneyId) REFERENCES Tourneys(id),
|
tourneyId INT, FOREIGN KEY (tourneyId) REFERENCES Tourneys(id),
|
||||||
playerId INT, FOREIGN KEY (playerId) REFERENCES Players(id),
|
playerId INT, FOREIGN KEY (playerId) REFERENCES Players(id),
|
||||||
payinAmount INT,
|
payinAmount INT,
|
||||||
|
@ -399,7 +399,7 @@ class FpdbSQLQueries:
|
||||||
|
|
||||||
if(self.dbname == 'MySQL InnoDB'):
|
if(self.dbname == 'MySQL InnoDB'):
|
||||||
self.query['createHandsActionsTable'] = """CREATE TABLE HandsActions (
|
self.query['createHandsActionsTable'] = """CREATE TABLE HandsActions (
|
||||||
id BIGINT UNSIGNED UNIQUE AUTO_INCREMENT NOT NULL, PRIMARY KEY (id),
|
id BIGINT UNSIGNED AUTO_INCREMENT NOT NULL, PRIMARY KEY (id),
|
||||||
handPlayerId BIGINT UNSIGNED NOT NULL, FOREIGN KEY (handPlayerId) REFERENCES HandsPlayers(id),
|
handPlayerId BIGINT UNSIGNED NOT NULL, FOREIGN KEY (handPlayerId) REFERENCES HandsPlayers(id),
|
||||||
street SMALLINT NOT NULL,
|
street SMALLINT NOT NULL,
|
||||||
actionNo SMALLINT NOT NULL,
|
actionNo SMALLINT NOT NULL,
|
||||||
|
@ -411,7 +411,7 @@ class FpdbSQLQueries:
|
||||||
ENGINE=INNODB"""
|
ENGINE=INNODB"""
|
||||||
elif(self.dbname == 'PostgreSQL'):
|
elif(self.dbname == 'PostgreSQL'):
|
||||||
self.query['createHandsActionsTable'] = """CREATE TABLE HandsActions (
|
self.query['createHandsActionsTable'] = """CREATE TABLE HandsActions (
|
||||||
id BIGSERIAL UNIQUE, PRIMARY KEY (id),
|
id BIGSERIAL, PRIMARY KEY (id),
|
||||||
handPlayerId BIGINT, FOREIGN KEY (handPlayerId) REFERENCES HandsPlayers(id),
|
handPlayerId BIGINT, FOREIGN KEY (handPlayerId) REFERENCES HandsPlayers(id),
|
||||||
street SMALLINT,
|
street SMALLINT,
|
||||||
actionNo SMALLINT,
|
actionNo SMALLINT,
|
||||||
|
@ -430,7 +430,7 @@ class FpdbSQLQueries:
|
||||||
|
|
||||||
if(self.dbname == 'MySQL InnoDB'):
|
if(self.dbname == 'MySQL InnoDB'):
|
||||||
self.query['createHudCacheTable'] = """CREATE TABLE HudCache (
|
self.query['createHudCacheTable'] = """CREATE TABLE HudCache (
|
||||||
id BIGINT UNSIGNED UNIQUE AUTO_INCREMENT NOT NULL, PRIMARY KEY (id),
|
id BIGINT UNSIGNED AUTO_INCREMENT NOT NULL, PRIMARY KEY (id),
|
||||||
gametypeId SMALLINT UNSIGNED NOT NULL, FOREIGN KEY (gametypeId) REFERENCES Gametypes(id),
|
gametypeId SMALLINT UNSIGNED NOT NULL, FOREIGN KEY (gametypeId) REFERENCES Gametypes(id),
|
||||||
playerId INT UNSIGNED NOT NULL, FOREIGN KEY (playerId) REFERENCES Players(id),
|
playerId INT UNSIGNED NOT NULL, FOREIGN KEY (playerId) REFERENCES Players(id),
|
||||||
activeSeats SMALLINT NOT NULL,
|
activeSeats SMALLINT NOT NULL,
|
||||||
|
@ -503,7 +503,7 @@ class FpdbSQLQueries:
|
||||||
ENGINE=INNODB"""
|
ENGINE=INNODB"""
|
||||||
elif(self.dbname == 'PostgreSQL'):
|
elif(self.dbname == 'PostgreSQL'):
|
||||||
self.query['createHudCacheTable'] = """CREATE TABLE HudCache (
|
self.query['createHudCacheTable'] = """CREATE TABLE HudCache (
|
||||||
id BIGSERIAL UNIQUE, PRIMARY KEY (id),
|
id BIGSERIAL, PRIMARY KEY (id),
|
||||||
gametypeId INT, FOREIGN KEY (gametypeId) REFERENCES Gametypes(id),
|
gametypeId INT, FOREIGN KEY (gametypeId) REFERENCES Gametypes(id),
|
||||||
playerId INT, FOREIGN KEY (playerId) REFERENCES Players(id),
|
playerId INT, FOREIGN KEY (playerId) REFERENCES Players(id),
|
||||||
activeSeats SMALLINT,
|
activeSeats SMALLINT,
|
||||||
|
@ -576,26 +576,23 @@ class FpdbSQLQueries:
|
||||||
if(self.dbname == 'MySQL InnoDB'):
|
if(self.dbname == 'MySQL InnoDB'):
|
||||||
self.query['addTourneyIndex'] = """ALTER TABLE Tourneys ADD INDEX siteTourneyNo(siteTourneyNo)"""
|
self.query['addTourneyIndex'] = """ALTER TABLE Tourneys ADD INDEX siteTourneyNo(siteTourneyNo)"""
|
||||||
elif(self.dbname == 'PostgreSQL'):
|
elif(self.dbname == 'PostgreSQL'):
|
||||||
# FIXME: This query has a different syntax
|
self.query['addTourneyIndex'] = """CREATE INDEX siteTourneyNo ON Tourneys (siteTourneyNo)"""
|
||||||
self.query['addTourneyIndex'] = """ALTER TABLE Tourneys ADD INDEX siteTourneyNo(siteTourneyNo)"""
|
|
||||||
elif(self.dbname == 'SQLite'):
|
elif(self.dbname == 'SQLite'):
|
||||||
self.query['addHandsIndex'] = """ """
|
self.query['addHandsIndex'] = """ """
|
||||||
|
|
||||||
if(self.dbname == 'MySQL InnoDB'):
|
if(self.dbname == 'MySQL InnoDB'):
|
||||||
self.query['addHandsIndex'] = """ALTER TABLE Hands ADD INDEX siteHandNo(siteHandNo)"""
|
self.query['addHandsIndex'] = """ALTER TABLE Hands ADD INDEX siteHandNo(siteHandNo)"""
|
||||||
elif(self.dbname == 'PostgreSQL'):
|
elif(self.dbname == 'PostgreSQL'):
|
||||||
# FIXME: This query has a different syntax
|
self.query['addHandsIndex'] = """CREATE INDEX siteHandNo ON Hands (siteHandNo)"""
|
||||||
self.query['addHandsIndex'] = """ALTER TABLE Hands ADD INDEX siteHandNo(siteHandNo)"""
|
|
||||||
elif(self.dbname == 'SQLite'):
|
elif(self.dbname == 'SQLite'):
|
||||||
self.query['addHandsIndex'] = """ """
|
self.query['addHandsIndex'] = """ """
|
||||||
|
|
||||||
if(self.dbname == 'MySQL InnoDB'):
|
if(self.dbname == 'MySQL InnoDB'):
|
||||||
self.query['addPlayersIndex'] = """ALTER TABLE Players ADD INDEX name(name)"""
|
self.query['addPlayersIndex'] = """ALTER TABLE Players ADD INDEX name(name)"""
|
||||||
elif(self.dbname == 'PostgreSQL'):
|
elif(self.dbname == 'PostgreSQL'):
|
||||||
# FIXME: This query has a different syntax
|
self.query['addPlayersIndex'] = """CREATE INDEX name ON Players (name)"""
|
||||||
self.query['addHandsIndex'] = """ALTER TABLE Hands ADD INDEX siteHandNo(siteHandNo)"""
|
|
||||||
elif(self.dbname == 'SQLite'):
|
elif(self.dbname == 'SQLite'):
|
||||||
self.query['addHandsIndex'] = """ """
|
self.query['addPlayersIndex'] = """ """
|
||||||
|
|
||||||
################################
|
################################
|
||||||
# Queries used in GuiGraphViewer
|
# Queries used in GuiGraphViewer
|
||||||
|
@ -633,6 +630,11 @@ class FpdbSQLQueries:
|
||||||
WHERE Players.name = %s AND HandsPlayers.handId = %s
|
WHERE Players.name = %s AND HandsPlayers.handId = %s
|
||||||
AND Players.siteId = %s AND (tourneysPlayersId IS NULL)"""
|
AND Players.siteId = %s AND (tourneysPlayersId IS NULL)"""
|
||||||
|
|
||||||
|
if(self.dbname == 'MySQL InnoDB') or (self.dbname == 'PostgreSQL'):
|
||||||
|
self.query['getPlayerId'] = """SELECT id from Players where name = %s"""
|
||||||
|
elif(self.dbname == 'SQLite'):
|
||||||
|
self.query['getPlayerId'] = """SELECT id from Players where name = %s"""
|
||||||
|
|
||||||
if(self.dbname == 'MySQL InnoDB') or (self.dbname == 'PostgreSQL'):
|
if(self.dbname == 'MySQL InnoDB') or (self.dbname == 'PostgreSQL'):
|
||||||
self.query['getRingProfitAllHandsPlayerIdSite'] = """
|
self.query['getRingProfitAllHandsPlayerIdSite'] = """
|
||||||
SELECT hp.handId, hp.winnings, SUM(ha.amount), hp.winnings - SUM(ha.amount)
|
SELECT hp.handId, hp.winnings, SUM(ha.amount), hp.winnings - SUM(ha.amount)
|
||||||
|
@ -697,13 +699,11 @@ class FpdbSQLQueries:
|
||||||
,round(100*sum(street2Aggr)/sum(street2Seen)) AS TuAFq
|
,round(100*sum(street2Aggr)/sum(street2Seen)) AS TuAFq
|
||||||
,round(100*sum(street3Aggr)/sum(street3Seen)) AS RvAFq
|
,round(100*sum(street3Aggr)/sum(street3Seen)) AS RvAFq
|
||||||
,round(100*(sum(street1Aggr)+sum(street2Aggr)+sum(street3Aggr))
|
,round(100*(sum(street1Aggr)+sum(street2Aggr)+sum(street3Aggr))
|
||||||
|
|
||||||
/(sum(street1Seen)+sum(street2Seen)+sum(street3Seen))) AS PFAFq
|
/(sum(street1Seen)+sum(street2Seen)+sum(street3Seen))) AS PFAFq
|
||||||
from Gametypes gt
|
from Gametypes gt
|
||||||
inner join Sites s on s.Id = gt.siteId
|
inner join Sites s on s.Id = gt.siteId
|
||||||
inner join HudCache hc on hc.gameTypeId = gt.Id
|
inner join HudCache hc on hc.gameTypeId = gt.Id
|
||||||
where gt.limittype = 'nl'
|
where hc.playerId in <player_test>
|
||||||
and hc.playerId in (3) # use <player_test> here?
|
|
||||||
# use <gametype_test> here ?
|
# use <gametype_test> here ?
|
||||||
group by hc.gametypeId
|
group by hc.gametypeId
|
||||||
) stats
|
) stats
|
||||||
|
@ -716,7 +716,7 @@ class FpdbSQLQueries:
|
||||||
from HandsPlayers hp
|
from HandsPlayers hp
|
||||||
inner join Hands h ON h.id = hp.handId
|
inner join Hands h ON h.id = hp.handId
|
||||||
inner join HandsActions ha ON ha.handPlayerId = hp.id
|
inner join HandsActions ha ON ha.handPlayerId = hp.id
|
||||||
where hp.playerId in (3) # use <player_test> here?
|
where hp.playerId in <player_test>
|
||||||
# use <gametype_test> here ?
|
# use <gametype_test> here ?
|
||||||
and hp.tourneysPlayersId IS NULL
|
and hp.tourneysPlayersId IS NULL
|
||||||
group by hp.handId, h.gameTypeId, hp.position, hp.winnings
|
group by hp.handId, h.gameTypeId, hp.position, hp.winnings
|
||||||
|
|
|
@ -308,4 +308,3 @@ class GuiGraphViewer (threading.Thread):
|
||||||
|
|
||||||
self.leftPanelBox.show()
|
self.leftPanelBox.show()
|
||||||
self.graphBox.show()
|
self.graphBox.show()
|
||||||
|
|
||||||
|
|
|
@ -31,7 +31,9 @@ class GuiPlayerStats (threading.Thread):
|
||||||
return self.main_hbox
|
return self.main_hbox
|
||||||
|
|
||||||
def toggleCallback(self, widget, data=None):
|
def toggleCallback(self, widget, data=None):
|
||||||
print "%s was toggled %s" % (data, ("OFF", "ON")[widget.get_active()])
|
# print "%s was toggled %s" % (data, ("OFF", "ON")[widget.get_active()])
|
||||||
|
self.activesite = data
|
||||||
|
print "DEBUG: activesite set to %s" %(self.activesite)
|
||||||
|
|
||||||
def refreshStats(self, widget, data):
|
def refreshStats(self, widget, data):
|
||||||
try: self.stats_table.destroy()
|
try: self.stats_table.destroy()
|
||||||
|
@ -39,7 +41,15 @@ class GuiPlayerStats (threading.Thread):
|
||||||
self.fillStatsFrame(self.stats_frame)
|
self.fillStatsFrame(self.stats_frame)
|
||||||
|
|
||||||
def fillStatsFrame(self, vbox):
|
def fillStatsFrame(self, vbox):
|
||||||
self.cursor.execute(self.sql.query['playerStats'])
|
# Get currently active site and grab playerid
|
||||||
|
tmp = self.sql.query['playerStats']
|
||||||
|
|
||||||
|
result = self.cursor.execute(self.sql.query['getPlayerId'], self.heroes[self.activesite])
|
||||||
|
result = self.db.cursor.fetchall()
|
||||||
|
if not result == ():
|
||||||
|
pid = result[0][0]
|
||||||
|
tmp = tmp.replace("<player_test>", "(" + str(pid) + ")")
|
||||||
|
self.cursor.execute(tmp)
|
||||||
result = self.db.cursor.fetchall()
|
result = self.db.cursor.fetchall()
|
||||||
cols = 18
|
cols = 18
|
||||||
rows = len(result)+1 # +1 for title row
|
rows = len(result)+1 # +1 for title row
|
||||||
|
@ -61,7 +71,6 @@ class GuiPlayerStats (threading.Thread):
|
||||||
|
|
||||||
for row in range(rows-1):
|
for row in range(rows-1):
|
||||||
for col in range(cols):
|
for col in range(cols):
|
||||||
print "result[%s][%s]: %s" %(row-1, col, result[row-1][col])
|
|
||||||
if(row%2 == 0):
|
if(row%2 == 0):
|
||||||
bgcolor = "white"
|
bgcolor = "white"
|
||||||
else:
|
else:
|
||||||
|
@ -92,10 +101,15 @@ class GuiPlayerStats (threading.Thread):
|
||||||
hbox.show()
|
hbox.show()
|
||||||
|
|
||||||
def createPlayerLine(self, hbox, site, player):
|
def createPlayerLine(self, hbox, site, player):
|
||||||
|
if(self.buttongroup == None):
|
||||||
button = gtk.RadioButton(None, site + " id:")
|
button = gtk.RadioButton(None, site + " id:")
|
||||||
|
button.set_active(True)
|
||||||
|
self.buttongroup = button
|
||||||
|
self.activesite = site
|
||||||
|
else:
|
||||||
|
button = gtk.RadioButton(self.buttongroup, site + " id:")
|
||||||
hbox.pack_start(button, True, True, 0)
|
hbox.pack_start(button, True, True, 0)
|
||||||
button.connect("toggled", self.toggleCallback, site)
|
button.connect("toggled", self.toggleCallback, site)
|
||||||
# button.set_active(True)
|
|
||||||
button.show()
|
button.show()
|
||||||
|
|
||||||
pname = gtk.Entry()
|
pname = gtk.Entry()
|
||||||
|
@ -119,6 +133,9 @@ class GuiPlayerStats (threading.Thread):
|
||||||
|
|
||||||
self.sql = querylist
|
self.sql = querylist
|
||||||
|
|
||||||
|
self.activesite = None
|
||||||
|
self.buttongroup = None
|
||||||
|
|
||||||
self.heroes = {}
|
self.heroes = {}
|
||||||
self.stat_table = None
|
self.stat_table = None
|
||||||
self.stats_frame = None
|
self.stats_frame = None
|
||||||
|
@ -138,11 +155,11 @@ class GuiPlayerStats (threading.Thread):
|
||||||
statsFrame = gtk.Frame("Stats:")
|
statsFrame = gtk.Frame("Stats:")
|
||||||
statsFrame.set_label_align(0.0, 0.0)
|
statsFrame.set_label_align(0.0, 0.0)
|
||||||
statsFrame.show()
|
statsFrame.show()
|
||||||
vbox = gtk.VBox(False, 0)
|
self.stats_frame = gtk.VBox(False, 0)
|
||||||
vbox.show()
|
self.stats_frame.show()
|
||||||
|
|
||||||
self.fillStatsFrame(vbox)
|
self.fillStatsFrame(self.stats_frame)
|
||||||
statsFrame.add(vbox)
|
statsFrame.add(self.stats_frame)
|
||||||
|
|
||||||
self.main_hbox.pack_start(playerFrame)
|
self.main_hbox.pack_start(playerFrame)
|
||||||
self.main_hbox.pack_start(statsFrame)
|
self.main_hbox.pack_start(statsFrame)
|
||||||
|
|
|
@ -169,4 +169,3 @@ if __name__== "__main__":
|
||||||
main_window.show_all()
|
main_window.show_all()
|
||||||
|
|
||||||
gtk.main()
|
gtk.main()
|
||||||
|
|
||||||
|
|
|
@ -92,14 +92,22 @@ class Hud:
|
||||||
self.menu.append(self.item1)
|
self.menu.append(self.item1)
|
||||||
self.item1.connect("activate", self.kill_hud)
|
self.item1.connect("activate", self.kill_hud)
|
||||||
self.item1.show()
|
self.item1.show()
|
||||||
|
|
||||||
self.item2 = gtk.MenuItem('Save Layout')
|
self.item2 = gtk.MenuItem('Save Layout')
|
||||||
self.menu.append(self.item2)
|
self.menu.append(self.item2)
|
||||||
self.item2.connect("activate", self.save_layout)
|
self.item2.connect("activate", self.save_layout)
|
||||||
self.item2.show()
|
self.item2.show()
|
||||||
|
|
||||||
self.item3 = gtk.MenuItem('Reposition Stats')
|
self.item3 = gtk.MenuItem('Reposition Stats')
|
||||||
self.menu.append(self.item3)
|
self.menu.append(self.item3)
|
||||||
self.item3.connect("activate", self.reposition_windows)
|
self.item3.connect("activate", self.reposition_windows)
|
||||||
self.item3.show()
|
self.item3.show()
|
||||||
|
|
||||||
|
self.item4 = gtk.MenuItem('Debug Stat Windows')
|
||||||
|
self.menu.append(self.item4)
|
||||||
|
self.item4.connect("activate", self.debug_stat_windows)
|
||||||
|
self.item4.show()
|
||||||
|
|
||||||
self.ebox.connect_object("button-press-event", self.on_button_press, self.menu)
|
self.ebox.connect_object("button-press-event", self.on_button_press, self.menu)
|
||||||
|
|
||||||
self.main_window.show_all()
|
self.main_window.show_all()
|
||||||
|
@ -113,6 +121,19 @@ class Hud:
|
||||||
|
|
||||||
self.main_window.set_destroy_with_parent(True)
|
self.main_window.set_destroy_with_parent(True)
|
||||||
|
|
||||||
|
def update_table_position(self):
|
||||||
|
(x, y) = self.main_window.parentgdkhandle.get_origin()
|
||||||
|
if self.table.x != x or self.table.y != y:
|
||||||
|
self.table.x = x
|
||||||
|
self.table.y = y
|
||||||
|
self.main_window.move(x, y)
|
||||||
|
adj = self.adj_seats(self.hand, self.config)
|
||||||
|
loc = self.config.get_locations(self.table.site, self.max)
|
||||||
|
for i in range(1, self.max + 1):
|
||||||
|
(x, y) = loc[adj[i]]
|
||||||
|
if self.stat_windows.has_key(i):
|
||||||
|
self.stat_windows[i].relocate(x, y)
|
||||||
|
|
||||||
def on_button_press(self, widget, event):
|
def on_button_press(self, widget, event):
|
||||||
if event.button == 1:
|
if event.button == 1:
|
||||||
self.main_window.begin_move_drag(event.button, int(event.x_root), int(event.y_root), event.time)
|
self.main_window.begin_move_drag(event.button, int(event.x_root), int(event.y_root), event.time)
|
||||||
|
@ -129,9 +150,13 @@ class Hud:
|
||||||
self.deleted = True
|
self.deleted = True
|
||||||
|
|
||||||
def reposition_windows(self, *args):
|
def reposition_windows(self, *args):
|
||||||
|
self.update_table_position()
|
||||||
|
|
||||||
|
def debug_stat_windows(self, *args):
|
||||||
|
print self.table, "\n", self.main_window.window.get_transient_for()
|
||||||
for w in self.stat_windows:
|
for w in self.stat_windows:
|
||||||
self.stat_windows[w].window.move(self.stat_windows[w].x,
|
print self.stat_windows[w].window.window.get_transient_for()
|
||||||
self.stat_windows[w].y)
|
|
||||||
def save_layout(self, *args):
|
def save_layout(self, *args):
|
||||||
new_layout = [(0, 0)] * self.max
|
new_layout = [(0, 0)] * self.max
|
||||||
# todo: have the hud track the poker table's window position regularly, don't forget to update table.x and table.y.
|
# todo: have the hud track the poker table's window position regularly, don't forget to update table.x and table.y.
|
||||||
|
@ -200,8 +225,11 @@ class Hud:
|
||||||
aux_params = config.get_aux_parameters(game_params['aux'])
|
aux_params = config.get_aux_parameters(game_params['aux'])
|
||||||
self.aux_windows.append(eval("%s.%s(gtk.Window(), config, 'fpdb')" % (aux_params['module'], aux_params['class'])))
|
self.aux_windows.append(eval("%s.%s(gtk.Window(), config, 'fpdb')" % (aux_params['module'], aux_params['class'])))
|
||||||
|
|
||||||
|
gobject.timeout_add(0.5, self.update_table_position)
|
||||||
|
|
||||||
def update(self, hand, config, stat_dict):
|
def update(self, hand, config, stat_dict):
|
||||||
self.hand = hand # this is the last hand, so it is available later
|
self.hand = hand # this is the last hand, so it is available later
|
||||||
|
self.update_table_position()
|
||||||
for s in stat_dict.keys():
|
for s in stat_dict.keys():
|
||||||
try:
|
try:
|
||||||
self.stat_windows[stat_dict[s]['seat']].player_id = stat_dict[s]['player_id']
|
self.stat_windows[stat_dict[s]['seat']].player_id = stat_dict[s]['player_id']
|
||||||
|
@ -246,9 +274,9 @@ class Hud:
|
||||||
for w in tl_windows:
|
for w in tl_windows:
|
||||||
if w[1] == unique_name:
|
if w[1] == unique_name:
|
||||||
#win32gui.ShowWindow(w[0], win32con.SW_HIDE)
|
#win32gui.ShowWindow(w[0], win32con.SW_HIDE)
|
||||||
window.parentgdkhandle = gtk.gdk.window_foreign_new(long(self.table.number))
|
self.main_window.parentgdkhandle = gtk.gdk.window_foreign_new(long(self.table.number))
|
||||||
self.main_window.gdkhandle = gtk.gdk.window_foreign_new(w[0])
|
self.main_window.gdkhandle = gtk.gdk.window_foreign_new(w[0])
|
||||||
self.main_window.gdkhandle.set_transient_for(window.parentgdkhandle)
|
self.main_window.gdkhandle.set_transient_for(self.main_window.parentgdkhandle)
|
||||||
#win32gui.ShowWindow(w[0], win32con.SW_SHOW)
|
#win32gui.ShowWindow(w[0], win32con.SW_SHOW)
|
||||||
|
|
||||||
style = win32gui.GetWindowLong(self.table.number, win32con.GWL_EXSTYLE)
|
style = win32gui.GetWindowLong(self.table.number, win32con.GWL_EXSTYLE)
|
||||||
|
@ -293,6 +321,7 @@ class Stat_Window:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
if event.button == 1: # left button event
|
if event.button == 1: # left button event
|
||||||
|
# TODO: make position saving save sizes as well?
|
||||||
if event.state & gtk.gdk.SHIFT_MASK:
|
if event.state & gtk.gdk.SHIFT_MASK:
|
||||||
self.window.begin_resize_drag(gtk.gdk.WINDOW_EDGE_SOUTH_EAST, event.button, int(event.x_root), int(event.y_root), event.time)
|
self.window.begin_resize_drag(gtk.gdk.WINDOW_EDGE_SOUTH_EAST, event.button, int(event.x_root), int(event.y_root), event.time)
|
||||||
else:
|
else:
|
||||||
|
@ -372,41 +401,12 @@ class Stat_Window:
|
||||||
font = pango.FontDescription("Sans 7")
|
font = pango.FontDescription("Sans 7")
|
||||||
self.label[r][c].modify_font(font)
|
self.label[r][c].modify_font(font)
|
||||||
|
|
||||||
# if not os.name == 'nt': # seems to be a bug in opacity on windows
|
|
||||||
self.window.set_opacity(parent.colors['hudopacity'])
|
self.window.set_opacity(parent.colors['hudopacity'])
|
||||||
|
|
||||||
# self.window.realize()
|
|
||||||
self.window.move(self.x, self.y)
|
self.window.move(self.x, self.y)
|
||||||
# self.window.show_all()
|
|
||||||
# set_keep_above(1) for windows
|
|
||||||
if os.name == 'nt': self.topify_window(self.window)
|
|
||||||
self.window.hide()
|
self.window.hide()
|
||||||
|
|
||||||
def topify_window(self, window):
|
|
||||||
"""Set the specified gtk window to stayontop in MS Windows."""
|
|
||||||
|
|
||||||
def windowEnumerationHandler(hwnd, resultList):
|
|
||||||
'''Callback for win32gui.EnumWindows() to generate list of window handles.'''
|
|
||||||
resultList.append((hwnd, win32gui.GetWindowText(hwnd)))
|
|
||||||
|
|
||||||
unique_name = 'unique name for finding this window'
|
|
||||||
real_name = window.get_title()
|
|
||||||
window.set_title(unique_name)
|
|
||||||
tl_windows = []
|
|
||||||
win32gui.EnumWindows(windowEnumerationHandler, tl_windows)
|
|
||||||
|
|
||||||
for w in tl_windows:
|
|
||||||
if w[1] == unique_name:
|
|
||||||
|
|
||||||
#win32gui.SetWindowPos(w[0], win32con.HWND_TOPMOST, 0, 0, 0, 0, win32con.SWP_NOMOVE|win32con.SWP_NOSIZE)
|
|
||||||
|
|
||||||
# style = win32gui.GetWindowLong(w[0], win32con.GWL_EXSTYLE)
|
|
||||||
# style |= win32con.WS_EX_TOOLWINDOW
|
|
||||||
# style &= ~win32con.WS_EX_APPWINDOW
|
|
||||||
# win32gui.SetWindowLong(w[0], win32con.GWL_EXSTYLE, style)
|
|
||||||
win32gui.ShowWindow(w[0], win32con.SW_SHOW)
|
|
||||||
window.set_title(real_name)
|
|
||||||
|
|
||||||
def destroy(*args): # call back for terminating the main eventloop
|
def destroy(*args): # call back for terminating the main eventloop
|
||||||
gtk.main_quit()
|
gtk.main_quit()
|
||||||
|
|
||||||
|
|
1
pyfpdb/Mucked.py
Normal file → Executable file
1
pyfpdb/Mucked.py
Normal file → Executable file
|
@ -170,6 +170,7 @@ class Stud_cards:
|
||||||
for r in range(0, self.rows):
|
for r in range(0, self.rows):
|
||||||
self.grid_contents[( 0, r)] = gtk.Label("%d" % (r + 1))
|
self.grid_contents[( 0, r)] = gtk.Label("%d" % (r + 1))
|
||||||
self.grid_contents[( 1, r)] = gtk.Label("player %d" % (r + 1))
|
self.grid_contents[( 1, r)] = gtk.Label("player %d" % (r + 1))
|
||||||
|
self.grid_contents[( 1, r)].set_property("width-chars", 12)
|
||||||
self.grid_contents[( 4, r)] = gtk.Label("-")
|
self.grid_contents[( 4, r)] = gtk.Label("-")
|
||||||
self.grid_contents[( 9, r)] = gtk.Label("-")
|
self.grid_contents[( 9, r)] = gtk.Label("-")
|
||||||
self.grid_contents[( 2, r)] = self.eb[( 0, r)]
|
self.grid_contents[( 2, r)] = self.eb[( 0, r)]
|
||||||
|
|
|
@ -229,12 +229,11 @@ class Sql:
|
||||||
sum(street3CheckCallRaiseDone) AS ccr_3,
|
sum(street3CheckCallRaiseDone) AS ccr_3,
|
||||||
sum(street4CheckCallRaiseChance) AS ccr_opp_4,
|
sum(street4CheckCallRaiseChance) AS ccr_opp_4,
|
||||||
sum(street4CheckCallRaiseDone) AS ccr_4
|
sum(street4CheckCallRaiseDone) AS ccr_4
|
||||||
FROM HudCache, Hands
|
FROM Hands
|
||||||
WHERE HudCache.PlayerId in
|
INNER JOIN HandsPlayers ON (HandsPlayers.handId = %s)
|
||||||
(SELECT PlayerId FROM HandsPlayers
|
INNER JOIN HudCache ON ( HudCache.PlayerId = HandsPlayers.PlayerId+0
|
||||||
WHERE handId = %s)
|
AND HudCache.gametypeId+0 = Hands.gametypeId+0)
|
||||||
AND Hands.id = %s
|
WHERE Hands.id = %s
|
||||||
AND Hands.gametypeId = HudCache.gametypeId
|
|
||||||
GROUP BY HudCache.PlayerId
|
GROUP BY HudCache.PlayerId
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
130
pyfpdb/Stats.py
130
pyfpdb/Stats.py
|
@ -71,6 +71,7 @@ def do_stat(stat_dict, player = 24, stat = 'vpip'):
|
||||||
# functions that return individual stats
|
# functions that return individual stats
|
||||||
|
|
||||||
def playername(stat_dict, player):
|
def playername(stat_dict, player):
|
||||||
|
""" Player Name."""
|
||||||
return (stat_dict[player]['screen_name'],
|
return (stat_dict[player]['screen_name'],
|
||||||
stat_dict[player]['screen_name'],
|
stat_dict[player]['screen_name'],
|
||||||
stat_dict[player]['screen_name'],
|
stat_dict[player]['screen_name'],
|
||||||
|
@ -98,6 +99,26 @@ def vpip(stat_dict, player):
|
||||||
'Voluntarily Put In Pot %'
|
'Voluntarily Put In Pot %'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def vpip_0(stat_dict, player):
|
||||||
|
""" Voluntarily put $ in the pot (no decimals)."""
|
||||||
|
stat = 0.0
|
||||||
|
try:
|
||||||
|
stat = float(stat_dict[player]['vpip'])/float(stat_dict[player]['n'])
|
||||||
|
return (stat,
|
||||||
|
'%2.0f' % (100*stat) + '%',
|
||||||
|
'v=%2.0f' % (100*stat) + '%',
|
||||||
|
'vpip=%2.0f' % (100*stat) + '%',
|
||||||
|
'(%d/%d)' % (stat_dict[player]['vpip'], stat_dict[player]['n']),
|
||||||
|
'vpip'
|
||||||
|
)
|
||||||
|
except: return (stat,
|
||||||
|
'%2.0f' % (0) + '%',
|
||||||
|
'w=%2.0f' % (0) + '%',
|
||||||
|
'wtsd=%2.0f' % (0) + '%',
|
||||||
|
'(%d/%d)' % (0, 0),
|
||||||
|
'wtsd'
|
||||||
|
)
|
||||||
|
|
||||||
def pfr(stat_dict, player):
|
def pfr(stat_dict, player):
|
||||||
""" Preflop (3rd street) raise."""
|
""" Preflop (3rd street) raise."""
|
||||||
stat = 0.0
|
stat = 0.0
|
||||||
|
@ -119,6 +140,27 @@ def pfr(stat_dict, player):
|
||||||
'Pre-Flop Raise %'
|
'Pre-Flop Raise %'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def pfr_0(stat_dict, player):
|
||||||
|
""" Preflop (3rd street) raise (no decimals)."""
|
||||||
|
stat = 0.0
|
||||||
|
try:
|
||||||
|
stat = float(stat_dict[player]['pfr'])/float(stat_dict[player]['n'])
|
||||||
|
return (stat,
|
||||||
|
'%2.0f' % (100*stat) + '%',
|
||||||
|
'p=%2.0f' % (100*stat) + '%',
|
||||||
|
'pfr=%2.0f' % (100*stat) + '%',
|
||||||
|
'(%d/%d)' % (stat_dict[player]['pfr'], stat_dict[player]['n']),
|
||||||
|
'pfr'
|
||||||
|
)
|
||||||
|
except:
|
||||||
|
return (stat,
|
||||||
|
'%2.0f' % (0) + '%',
|
||||||
|
'p=%2.0f' % (0) + '%',
|
||||||
|
'pfr=%2.0f' % (0) + '%',
|
||||||
|
'(%d/%d)' % (0, 0),
|
||||||
|
'pfr'
|
||||||
|
)
|
||||||
|
|
||||||
def wtsd(stat_dict, player):
|
def wtsd(stat_dict, player):
|
||||||
""" Went to SD when saw flop/4th."""
|
""" Went to SD when saw flop/4th."""
|
||||||
stat = 0.0
|
stat = 0.0
|
||||||
|
@ -149,7 +191,7 @@ def wmsd(stat_dict, player):
|
||||||
'%3.1f' % (100*stat) + '%',
|
'%3.1f' % (100*stat) + '%',
|
||||||
'w=%3.1f' % (100*stat) + '%',
|
'w=%3.1f' % (100*stat) + '%',
|
||||||
'wmsd=%3.1f' % (100*stat) + '%',
|
'wmsd=%3.1f' % (100*stat) + '%',
|
||||||
'(%f5.0/%d)' % (stat_dict[player]['wmsd'], stat_dict[player]['sd']),
|
'(%5.1f/%d)' % (float(stat_dict[player]['wmsd']), stat_dict[player]['sd']),
|
||||||
'% won money at showdown'
|
'% won money at showdown'
|
||||||
)
|
)
|
||||||
except:
|
except:
|
||||||
|
@ -261,12 +303,11 @@ def f_SB_steal(stat_dict, player):
|
||||||
)
|
)
|
||||||
except:
|
except:
|
||||||
return (stat,
|
return (stat,
|
||||||
'%3.1f' % (0) + '%',
|
'NA',
|
||||||
'fSB=%3.1f' % (0) + '%',
|
'fSB=NA',
|
||||||
'fSB_s=%3.1f' % (0) + '%',
|
'fSB_s=NA',
|
||||||
'(%d/%d)' % (0, 0),
|
'0/0',
|
||||||
'% folded SB to steal'
|
'% folded SB to steal')
|
||||||
)
|
|
||||||
|
|
||||||
def f_BB_steal(stat_dict, player):
|
def f_BB_steal(stat_dict, player):
|
||||||
""" Folded BB to steal."""
|
""" Folded BB to steal."""
|
||||||
|
@ -282,12 +323,11 @@ def f_BB_steal(stat_dict, player):
|
||||||
)
|
)
|
||||||
except:
|
except:
|
||||||
return (stat,
|
return (stat,
|
||||||
'%3.1f' % (0) + '%',
|
'NA',
|
||||||
'fBB=%3.1f' % (0) + '%',
|
'fBB=NA',
|
||||||
'fBB_s=%3.1f' % (0) + '%',
|
'fBB_s=NA',
|
||||||
'(%d/%d)' % (0, 0),
|
'0/0',
|
||||||
'% folded BB to steal'
|
'% folded BB to steal')
|
||||||
)
|
|
||||||
|
|
||||||
def three_B_0(stat_dict, player):
|
def three_B_0(stat_dict, player):
|
||||||
""" Three bet preflop/3rd."""
|
""" Three bet preflop/3rd."""
|
||||||
|
@ -415,6 +455,61 @@ def a_freq_4(stat_dict, player):
|
||||||
'Aggression Freq 7th'
|
'Aggression Freq 7th'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def a_freq_123(stat_dict, player):
|
||||||
|
""" Post-Flop aggression frequency."""
|
||||||
|
stat = 0.0
|
||||||
|
try:
|
||||||
|
stat = float( stat_dict[player]['aggr_1'] + stat_dict[player]['aggr_2'] + stat_dict[player]['aggr_3']
|
||||||
|
) / float( stat_dict[player]['saw_1'] + stat_dict[player]['saw_2'] + stat_dict[player]['saw_3']);
|
||||||
|
return (stat,
|
||||||
|
'%3.1f' % (100*stat) + '%',
|
||||||
|
'afq=%3.1f' % (100*stat) + '%',
|
||||||
|
'postf_aggfq=%3.1f' % (100*stat) + '%',
|
||||||
|
'(%d/%d)' % ( stat_dict[player]['aggr_1']
|
||||||
|
+ stat_dict[player]['aggr_2']
|
||||||
|
+ stat_dict[player]['aggr_3']
|
||||||
|
, stat_dict[player]['saw_1']
|
||||||
|
+ stat_dict[player]['saw_2']
|
||||||
|
+ stat_dict[player]['saw_3']
|
||||||
|
),
|
||||||
|
'Post-Flop Aggression Freq'
|
||||||
|
)
|
||||||
|
except:
|
||||||
|
return (stat,
|
||||||
|
'%2.0f' % (0) + '%',
|
||||||
|
'a3=%2.0f' % (0) + '%',
|
||||||
|
'a_fq_3=%2.0f' % (0) + '%',
|
||||||
|
'(%d/%d)' % (0, 0),
|
||||||
|
'Post-Flop Aggression Freq'
|
||||||
|
)
|
||||||
|
|
||||||
|
def a_freq_123_0(stat_dict, player):
|
||||||
|
""" Post-Flop aggression frequency (no decimals)."""
|
||||||
|
stat = 0.0
|
||||||
|
try:
|
||||||
|
stat = float( stat_dict[player]['aggr_1'] + stat_dict[player]['aggr_2'] + stat_dict[player]['aggr_3']) / float( stat_dict[player]['saw_1'] + stat_dict[player]['saw_2'] + stat_dict[player]['saw_3']);
|
||||||
|
return (stat,
|
||||||
|
'%2.0f' % (100*stat) + '%',
|
||||||
|
'afq=%2.0f' % (100*stat) + '%',
|
||||||
|
'postf_aggfq=%2.0f' % (100*stat) + '%',
|
||||||
|
'(%d/%d)' % ( stat_dict[player]['aggr_1']
|
||||||
|
+ stat_dict[player]['aggr_2']
|
||||||
|
+ stat_dict[player]['aggr_3']
|
||||||
|
, stat_dict[player]['saw_1']
|
||||||
|
+ stat_dict[player]['saw_2']
|
||||||
|
+ stat_dict[player]['saw_3']
|
||||||
|
),
|
||||||
|
'Post-Flop Aggression Freq'
|
||||||
|
)
|
||||||
|
except:
|
||||||
|
return (stat,
|
||||||
|
'%2.0f' % (0) + '%',
|
||||||
|
'a3=%2.0f' % (0) + '%',
|
||||||
|
'a_fq_3=%2.0f' % (0) + '%',
|
||||||
|
'(%d/%d)' % (0, 0),
|
||||||
|
'Post-Flop Aggression Freq'
|
||||||
|
)
|
||||||
|
|
||||||
def cb_1(stat_dict, player):
|
def cb_1(stat_dict, player):
|
||||||
""" Flop continuation bet."""
|
""" Flop continuation bet."""
|
||||||
stat = 0.0
|
stat = 0.0
|
||||||
|
@ -591,7 +686,9 @@ if __name__== "__main__":
|
||||||
|
|
||||||
for player in stat_dict.keys():
|
for player in stat_dict.keys():
|
||||||
print "player = ", player, do_stat(stat_dict, player = player, stat = 'vpip')
|
print "player = ", player, do_stat(stat_dict, player = player, stat = 'vpip')
|
||||||
|
print "player = ", player, do_stat(stat_dict, player = player, stat = 'vpip_0')
|
||||||
print "player = ", player, do_stat(stat_dict, player = player, stat = 'pfr')
|
print "player = ", player, do_stat(stat_dict, player = player, stat = 'pfr')
|
||||||
|
print "player = ", player, do_stat(stat_dict, player = player, stat = 'pfr_0')
|
||||||
print "player = ", player, do_stat(stat_dict, player = player, stat = 'wtsd')
|
print "player = ", player, do_stat(stat_dict, player = player, stat = 'wtsd')
|
||||||
print "player = ", player, do_stat(stat_dict, player = player, stat = 'saw_f')
|
print "player = ", player, do_stat(stat_dict, player = player, stat = 'saw_f')
|
||||||
print "player = ", player, do_stat(stat_dict, player = player, stat = 'n')
|
print "player = ", player, do_stat(stat_dict, player = player, stat = 'n')
|
||||||
|
@ -606,6 +703,8 @@ if __name__== "__main__":
|
||||||
print "player = ", player, do_stat(stat_dict, player = player, stat = 'a_freq_2')
|
print "player = ", player, do_stat(stat_dict, player = player, stat = 'a_freq_2')
|
||||||
print "player = ", player, do_stat(stat_dict, player = player, stat = 'a_freq_3')
|
print "player = ", player, do_stat(stat_dict, player = player, stat = 'a_freq_3')
|
||||||
print "player = ", player, do_stat(stat_dict, player = player, stat = 'a_freq_4')
|
print "player = ", player, do_stat(stat_dict, player = player, stat = 'a_freq_4')
|
||||||
|
print "player = ", player, do_stat(stat_dict, player = player, stat = 'a_freq_123')
|
||||||
|
print "player = ", player, do_stat(stat_dict, player = player, stat = 'a_freq_123_0')
|
||||||
print "player = ", player, do_stat(stat_dict, player = player, stat = 'cb_1')
|
print "player = ", player, do_stat(stat_dict, player = player, stat = 'cb_1')
|
||||||
print "player = ", player, do_stat(stat_dict, player = player, stat = 'cb_2')
|
print "player = ", player, do_stat(stat_dict, player = player, stat = 'cb_2')
|
||||||
print "player = ", player, do_stat(stat_dict, player = player, stat = 'cb_3')
|
print "player = ", player, do_stat(stat_dict, player = player, stat = 'cb_3')
|
||||||
|
@ -614,6 +713,7 @@ if __name__== "__main__":
|
||||||
print "player = ", player, do_stat(stat_dict, player = player, stat = 'ffreq_2')
|
print "player = ", player, do_stat(stat_dict, player = player, stat = 'ffreq_2')
|
||||||
print "player = ", player, do_stat(stat_dict, player = player, stat = 'ffreq_3')
|
print "player = ", player, do_stat(stat_dict, player = player, stat = 'ffreq_3')
|
||||||
print "player = ", player, do_stat(stat_dict, player = player, stat = 'ffreq_4')
|
print "player = ", player, do_stat(stat_dict, player = player, stat = 'ffreq_4')
|
||||||
|
print "\n"
|
||||||
|
|
||||||
print "\n\nLegal stats:"
|
print "\n\nLegal stats:"
|
||||||
for attr in dir():
|
for attr in dir():
|
||||||
|
@ -621,8 +721,8 @@ if __name__== "__main__":
|
||||||
if attr in ("Configuration", "Database", "GInitiallyUnowned", "gtk", "pygtk",
|
if attr in ("Configuration", "Database", "GInitiallyUnowned", "gtk", "pygtk",
|
||||||
"player", "c", "db_connection", "do_stat", "do_tip", "stat_dict",
|
"player", "c", "db_connection", "do_stat", "do_tip", "stat_dict",
|
||||||
"h"): continue
|
"h"): continue
|
||||||
print attr, eval("%s.__doc__" % (attr))
|
print "%-14s %s" % (attr, eval("%s.__doc__" % (attr)))
|
||||||
# print " <pu_stat pu_stat_name = \"%s\"> </pu_stat>" % (attr)
|
# print " <pu_stat pu_stat_name = \"%s\"> </pu_stat>" % (attr)
|
||||||
|
|
||||||
db_connection.close
|
db_connection.close_connection
|
||||||
|
|
||||||
|
|
|
@ -248,7 +248,9 @@ def get_nt_exe(hwnd):
|
||||||
"""Finds the name of the executable that the given window handle belongs to."""
|
"""Finds the name of the executable that the given window handle belongs to."""
|
||||||
processid = win32process.GetWindowThreadProcessId(hwnd)
|
processid = win32process.GetWindowThreadProcessId(hwnd)
|
||||||
pshandle = win32api.OpenProcess(win32con.PROCESS_QUERY_INFORMATION | win32con.PROCESS_VM_READ, False, processid[1])
|
pshandle = win32api.OpenProcess(win32con.PROCESS_QUERY_INFORMATION | win32con.PROCESS_VM_READ, False, processid[1])
|
||||||
return win32process.GetModuleFileNameEx(pshandle, 0)
|
exename = win32process.GetModuleFileNameEx(pshandle, 0)
|
||||||
|
win32api.CloseHandle(pshandle)
|
||||||
|
return exename
|
||||||
|
|
||||||
def decode_windows(c, title, hwnd):
|
def decode_windows(c, title, hwnd):
|
||||||
"""Gets window parameters from the window title and handle--Windows."""
|
"""Gets window parameters from the window title and handle--Windows."""
|
||||||
|
|
|
@ -118,12 +118,12 @@ class fpdb:
|
||||||
|
|
||||||
def dia_create_del_database(self, widget, data):
|
def dia_create_del_database(self, widget, data):
|
||||||
print "todo: implement dia_create_del_database"
|
print "todo: implement dia_create_del_database"
|
||||||
obtain_global_lock()
|
self.obtain_global_lock()
|
||||||
#end def dia_create_del_database
|
#end def dia_create_del_database
|
||||||
|
|
||||||
def dia_create_del_user(self, widget, data):
|
def dia_create_del_user(self, widget, data):
|
||||||
print "todo: implement dia_create_del_user"
|
print "todo: implement dia_create_del_user"
|
||||||
obtain_global_lock()
|
self.obtain_global_lock()
|
||||||
#end def dia_create_del_user
|
#end def dia_create_del_user
|
||||||
|
|
||||||
def dia_database_stats(self, widget, data):
|
def dia_database_stats(self, widget, data):
|
||||||
|
@ -133,17 +133,17 @@ class fpdb:
|
||||||
|
|
||||||
def dia_delete_db_parts(self, widget, data):
|
def dia_delete_db_parts(self, widget, data):
|
||||||
print "todo: implement dia_delete_db_parts"
|
print "todo: implement dia_delete_db_parts"
|
||||||
obtain_global_lock()
|
self.obtain_global_lock()
|
||||||
#end def dia_delete_db_parts
|
#end def dia_delete_db_parts
|
||||||
|
|
||||||
def dia_edit_profile(self, widget=None, data=None, create_default=False, path=None):
|
def dia_edit_profile(self, widget=None, data=None, create_default=False, path=None):
|
||||||
print "todo: implement dia_edit_profile"
|
print "todo: implement dia_edit_profile"
|
||||||
obtain_global_lock()
|
self.obtain_global_lock()
|
||||||
#end def dia_edit_profile
|
#end def dia_edit_profile
|
||||||
|
|
||||||
def dia_export_db(self, widget, data):
|
def dia_export_db(self, widget, data):
|
||||||
print "todo: implement dia_export_db"
|
print "todo: implement dia_export_db"
|
||||||
obtain_global_lock()
|
self.obtain_global_lock()
|
||||||
#end def dia_export_db
|
#end def dia_export_db
|
||||||
|
|
||||||
def dia_get_db_root_credentials(self):
|
def dia_get_db_root_credentials(self):
|
||||||
|
@ -168,7 +168,7 @@ class fpdb:
|
||||||
|
|
||||||
def dia_import_db(self, widget, data):
|
def dia_import_db(self, widget, data):
|
||||||
print "todo: implement dia_import_db"
|
print "todo: implement dia_import_db"
|
||||||
obtain_global_lock()
|
self.obtain_global_lock()
|
||||||
#end def dia_import_db
|
#end def dia_import_db
|
||||||
|
|
||||||
def dia_licensing(self, widget, data):
|
def dia_licensing(self, widget, data):
|
||||||
|
@ -264,7 +264,11 @@ class fpdb:
|
||||||
|
|
||||||
self.db = fpdb_db.fpdb_db()
|
self.db = fpdb_db.fpdb_db()
|
||||||
#print "end of fpdb.load_profile, databaseName:",self.settings['db-databaseName']
|
#print "end of fpdb.load_profile, databaseName:",self.settings['db-databaseName']
|
||||||
self.db.connect(self.settings['db-backend'], self.settings['db-host'], self.settings['db-databaseName'], self.settings['db-user'], self.settings['db-password'])
|
self.db.connect(self.settings['db-backend'],
|
||||||
|
self.settings['db-host'],
|
||||||
|
self.settings['db-databaseName'],
|
||||||
|
self.settings['db-user'],
|
||||||
|
self.settings['db-password'])
|
||||||
if self.db.wrongDbVersion:
|
if self.db.wrongDbVersion:
|
||||||
diaDbVersionWarning = gtk.Dialog(title="Strong Warning - Invalid database version", parent=None, flags=0, buttons=(gtk.STOCK_OK,gtk.RESPONSE_OK))
|
diaDbVersionWarning = gtk.Dialog(title="Strong Warning - Invalid database version", parent=None, flags=0, buttons=(gtk.STOCK_OK,gtk.RESPONSE_OK))
|
||||||
|
|
||||||
|
|
21
pyfpdb/fpdb_db.py
Executable file → Normal file
21
pyfpdb/fpdb_db.py
Executable file → Normal file
|
@ -31,19 +31,34 @@ class fpdb_db:
|
||||||
self.SQLITE=4
|
self.SQLITE=4
|
||||||
#end def __init__
|
#end def __init__
|
||||||
|
|
||||||
def connect(self, backend, host, database, user, password):
|
def connect(self, backend=None, host=None, database=None,
|
||||||
|
user=None, password=None):
|
||||||
"""Connects a database with the given parameters"""
|
"""Connects a database with the given parameters"""
|
||||||
|
if backend is None:
|
||||||
|
raise FpdbError('Database backend not defined')
|
||||||
self.backend=backend
|
self.backend=backend
|
||||||
self.host=host
|
self.host=host
|
||||||
self.database=database
|
|
||||||
self.user=user
|
self.user=user
|
||||||
self.password=password
|
self.password=password
|
||||||
|
self.database=database
|
||||||
if backend==self.MYSQL_INNODB:
|
if backend==self.MYSQL_INNODB:
|
||||||
import MySQLdb
|
import MySQLdb
|
||||||
self.db=MySQLdb.connect(host = host, user = user, passwd = password, db = database)
|
self.db=MySQLdb.connect(host = host, user = user, passwd = password, db = database)
|
||||||
elif backend==self.PGSQL:
|
elif backend==self.PGSQL:
|
||||||
import psycopg2
|
import psycopg2
|
||||||
self.db = psycopg2.connect(host = host, user = user, password = password, database = database)
|
# If DB connection is made over TCP, then the variables
|
||||||
|
# host, user and password are required
|
||||||
|
print "host=%s user=%s pass=%s." % (host, user, password)
|
||||||
|
if self.host and self.user and self.password:
|
||||||
|
self.db = psycopg2.connect(host = host,
|
||||||
|
user = user,
|
||||||
|
password = password,
|
||||||
|
database = database)
|
||||||
|
# For local domain-socket connections, only DB name is
|
||||||
|
# needed, and everything else is in fact undefined and/or
|
||||||
|
# flat out wrong
|
||||||
|
else:
|
||||||
|
self.db = psycopg2.connect(database = database)
|
||||||
else:
|
else:
|
||||||
raise fpdb_simple.FpdbError("unrecognised database backend:"+backend)
|
raise fpdb_simple.FpdbError("unrecognised database backend:"+backend)
|
||||||
self.cursor=self.db.cursor()
|
self.cursor=self.db.cursor()
|
||||||
|
|
10
pyfpdb/fpdb_import.py
Executable file → Normal file
10
pyfpdb/fpdb_import.py
Executable file → Normal file
|
@ -62,6 +62,8 @@ class Importer:
|
||||||
self.settings['minPrint'] = 30
|
self.settings['minPrint'] = 30
|
||||||
self.dbConnect()
|
self.dbConnect()
|
||||||
|
|
||||||
|
# XXX: Why is this here, when fpdb_db.connect() already does the
|
||||||
|
# same?
|
||||||
def dbConnect(self):
|
def dbConnect(self):
|
||||||
#connect to DB
|
#connect to DB
|
||||||
if self.settings['db-backend'] == 2:
|
if self.settings['db-backend'] == 2:
|
||||||
|
@ -73,10 +75,15 @@ class Importer:
|
||||||
if not pgsqlLibFound:
|
if not pgsqlLibFound:
|
||||||
raise fpdb_simple.FpdbError("interface library psycopg2 not found but PostgreSQL selected as backend - please install the library or change the config file")
|
raise fpdb_simple.FpdbError("interface library psycopg2 not found but PostgreSQL selected as backend - please install the library or change the config file")
|
||||||
print self.settings
|
print self.settings
|
||||||
|
if self.settings.has_key('db-host') and \
|
||||||
|
self.settings.has_key('db-user'):
|
||||||
self.db = psycopg2.connect(host = self.settings['db-host'],
|
self.db = psycopg2.connect(host = self.settings['db-host'],
|
||||||
user = self.settings['db-user'],
|
user = self.settings['db-user'],
|
||||||
password = self.settings['db-password'],
|
password = self.settings['db-password'],
|
||||||
database = self.settings['db-databaseName'])
|
database = self.settings['db-databaseName'])
|
||||||
|
else:
|
||||||
|
dbname = self.settings['db-databaseName']
|
||||||
|
self.db = psycopg2.connect(database = dbname)
|
||||||
elif self.settings['db-backend'] == 4:
|
elif self.settings['db-backend'] == 4:
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
|
@ -236,7 +243,8 @@ class Importer:
|
||||||
self.hand=hand
|
self.hand=hand
|
||||||
|
|
||||||
try:
|
try:
|
||||||
handsId=fpdb_parse_logic.mainParser(self.db, self.cursor, site, category, hand)
|
handsId=fpdb_parse_logic.mainParser(self.settings['db-backend'], self.db
|
||||||
|
,self.cursor, site, category, hand)
|
||||||
self.db.commit()
|
self.db.commit()
|
||||||
|
|
||||||
stored+=1
|
stored+=1
|
||||||
|
|
|
@ -21,7 +21,7 @@ import fpdb_simple
|
||||||
import fpdb_save_to_db
|
import fpdb_save_to_db
|
||||||
|
|
||||||
#parses a holdem hand
|
#parses a holdem hand
|
||||||
def mainParser(db, cursor, site, category, hand):
|
def mainParser(backend, db, cursor, site, category, hand):
|
||||||
if (category=="holdem" or category=="omahahi" or category=="omahahilo"):
|
if (category=="holdem" or category=="omahahi" or category=="omahahilo"):
|
||||||
base="hold"
|
base="hold"
|
||||||
else:
|
else:
|
||||||
|
@ -48,7 +48,7 @@ def mainParser(db, cursor, site, category, hand):
|
||||||
#print "found small blind line:",smallBlindLine
|
#print "found small blind line:",smallBlindLine
|
||||||
break
|
break
|
||||||
#print "small blind line:",smallBlindLine
|
#print "small blind line:",smallBlindLine
|
||||||
gametypeID=fpdb_simple.recogniseGametypeID(cursor, hand[0], hand[smallBlindLine], siteID, category, isTourney)
|
gametypeID=fpdb_simple.recogniseGametypeID(backend, db, cursor, hand[0], hand[smallBlindLine], siteID, category, isTourney)
|
||||||
if isTourney:
|
if isTourney:
|
||||||
if site!="ps":
|
if site!="ps":
|
||||||
raise fpdb_simple.FpdbError("tourneys are only supported on PS right now")
|
raise fpdb_simple.FpdbError("tourneys are only supported on PS right now")
|
||||||
|
@ -133,9 +133,13 @@ def mainParser(db, cursor, site, category, hand):
|
||||||
totalWinnings+=winnings[i]
|
totalWinnings+=winnings[i]
|
||||||
|
|
||||||
if base=="hold":
|
if base=="hold":
|
||||||
hudImportData=fpdb_simple.generateHudCacheData(playerIDs, base, category, actionTypes, allIns, actionTypeByNo, winnings, totalWinnings, positions)
|
hudImportData=fpdb_simple.generateHudCacheData(playerIDs, base, category, actionTypes
|
||||||
|
, allIns, actionTypeByNo, winnings, totalWinnings, positions
|
||||||
|
, actionTypes, actionAmounts)
|
||||||
else:
|
else:
|
||||||
hudImportData=fpdb_simple.generateHudCacheData(playerIDs, base, category, actionTypes, allIns, actionTypeByNo, winnings, totalWinnings, None)
|
hudImportData=fpdb_simple.generateHudCacheData(playerIDs, base, category, actionTypes
|
||||||
|
, allIns, actionTypeByNo, winnings, totalWinnings, None
|
||||||
|
, actionTypes, actionAmounts)
|
||||||
|
|
||||||
if isTourney:
|
if isTourney:
|
||||||
ranks=[]
|
ranks=[]
|
||||||
|
@ -144,20 +148,41 @@ def mainParser(db, cursor, site, category, hand):
|
||||||
payin_amounts=fpdb_simple.calcPayin(len(names), buyin, fee)
|
payin_amounts=fpdb_simple.calcPayin(len(names), buyin, fee)
|
||||||
|
|
||||||
if base=="hold":
|
if base=="hold":
|
||||||
result = fpdb_save_to_db.tourney_holdem_omaha(cursor, base, category, siteTourneyNo, buyin, fee, knockout, entries, prizepool, tourneyStartTime, payin_amounts, ranks, tourneyTypeId, siteID,
|
result = fpdb_save_to_db.tourney_holdem_omaha(
|
||||||
siteHandNo, gametypeID, handStartTime, names, playerIDs, startCashes, positions, cardValues, cardSuits, boardValues, boardSuits, winnings, rakes, actionTypes, allIns, actionAmounts, actionNos, hudImportData, maxSeats, tableName, seatNos)
|
backend, db, cursor, base, category, siteTourneyNo, buyin
|
||||||
|
, fee, knockout, entries, prizepool, tourneyStartTime
|
||||||
|
, payin_amounts, ranks, tourneyTypeId, siteID, siteHandNo
|
||||||
|
, gametypeID, handStartTime, names, playerIDs, startCashes
|
||||||
|
, positions, cardValues, cardSuits, boardValues, boardSuits
|
||||||
|
, winnings, rakes, actionTypes, allIns, actionAmounts
|
||||||
|
, actionNos, hudImportData, maxSeats, tableName, seatNos)
|
||||||
elif base=="stud":
|
elif base=="stud":
|
||||||
result = fpdb_save_to_db.tourney_stud(cursor, base, category, siteTourneyNo, buyin, fee, knockout, entries, prizepool, tourneyStartTime, payin_amounts, ranks, tourneyTypeId, siteID,
|
result = fpdb_save_to_db.tourney_stud(
|
||||||
siteHandNo, gametypeID, handStartTime, names, playerIDs, startCashes, antes, cardValues, cardSuits, winnings, rakes, actionTypes, allIns, actionAmounts, actionNos, hudImportData, maxSeats, tableName, seatNos)
|
backend, db, cursor, base, category, siteTourneyNo
|
||||||
|
, buyin, fee, knockout, entries, prizepool, tourneyStartTime
|
||||||
|
, payin_amounts, ranks, tourneyTypeId, siteID, siteHandNo
|
||||||
|
, gametypeID, handStartTime, names, playerIDs, startCashes
|
||||||
|
, antes, cardValues, cardSuits, winnings, rakes, actionTypes
|
||||||
|
, allIns, actionAmounts, actionNos, hudImportData, maxSeats
|
||||||
|
, tableName, seatNos)
|
||||||
else:
|
else:
|
||||||
raise fpdb_simple.FpdbError ("unrecognised category")
|
raise fpdb_simple.FpdbError ("unrecognised category")
|
||||||
else:
|
else:
|
||||||
if base=="hold":
|
if base=="hold":
|
||||||
result = fpdb_save_to_db.ring_holdem_omaha(cursor, base, category, siteHandNo, gametypeID, handStartTime, names, playerIDs, startCashes, positions, cardValues, cardSuits, boardValues, boardSuits, winnings, rakes, actionTypes, allIns, actionAmounts, actionNos, hudImportData, maxSeats, tableName, seatNos)
|
result = fpdb_save_to_db.ring_holdem_omaha(
|
||||||
|
backend, db, cursor, base, category, siteHandNo
|
||||||
|
, gametypeID, handStartTime, names, playerIDs
|
||||||
|
, startCashes, positions, cardValues, cardSuits
|
||||||
|
, boardValues, boardSuits, winnings, rakes
|
||||||
|
, actionTypes, allIns, actionAmounts, actionNos
|
||||||
|
, hudImportData, maxSeats, tableName, seatNos)
|
||||||
elif base=="stud":
|
elif base=="stud":
|
||||||
result = fpdb_save_to_db.ring_stud(cursor, base, category, siteHandNo, gametypeID,
|
result = fpdb_save_to_db.ring_stud(
|
||||||
handStartTime, names, playerIDs, startCashes, antes, cardValues,
|
backend, db, cursor, base, category, siteHandNo, gametypeID
|
||||||
cardSuits, winnings, rakes, actionTypes, allIns, actionAmounts, actionNos, hudImportData, maxSeats, tableName, seatNos)
|
, handStartTime, names, playerIDs, startCashes, antes
|
||||||
|
, cardValues, cardSuits, winnings, rakes, actionTypes, allIns
|
||||||
|
, actionAmounts, actionNos, hudImportData, maxSeats, tableName
|
||||||
|
, seatNos)
|
||||||
else:
|
else:
|
||||||
raise fpdb_simple.FpdbError ("unrecognised category")
|
raise fpdb_simple.FpdbError ("unrecognised category")
|
||||||
db.commit()
|
db.commit()
|
||||||
|
|
|
@ -18,43 +18,68 @@
|
||||||
#This file contains methods to store hands into the db. decides to move this
|
#This file contains methods to store hands into the db. decides to move this
|
||||||
#into a seperate file since its ugly, fairly long and just generally in the way.
|
#into a seperate file since its ugly, fairly long and just generally in the way.
|
||||||
|
|
||||||
|
from time import time
|
||||||
|
|
||||||
import fpdb_simple
|
import fpdb_simple
|
||||||
|
|
||||||
#stores a stud/razz hand into the database
|
#stores a stud/razz hand into the database
|
||||||
def ring_stud(cursor, base, category, site_hand_no, gametype_id, hand_start_time, names, player_ids, start_cashes, antes, card_values, card_suits, winnings, rakes, action_types, allIns, action_amounts, actionNos, hudImportData, maxSeats, tableName, seatNos):
|
def ring_stud(backend, db, cursor, base, category, site_hand_no, gametype_id, hand_start_time
|
||||||
|
,names, player_ids, start_cashes, antes, card_values, card_suits, winnings, rakes
|
||||||
|
,action_types, allIns, action_amounts, actionNos, hudImportData, maxSeats, tableName
|
||||||
|
,seatNos):
|
||||||
fpdb_simple.fillCardArrays(len(names), base, category, card_values, card_suits)
|
fpdb_simple.fillCardArrays(len(names), base, category, card_values, card_suits)
|
||||||
|
|
||||||
hands_id=fpdb_simple.storeHands(cursor, site_hand_no, gametype_id, hand_start_time, names, tableName, maxSeats)
|
hands_id=fpdb_simple.storeHands(backend, db, cursor, site_hand_no, gametype_id
|
||||||
|
,hand_start_time, names, tableName, maxSeats)
|
||||||
|
|
||||||
#print "before calling store_hands_players_stud, antes:", antes
|
#print "before calling store_hands_players_stud, antes:", antes
|
||||||
hands_players_ids=fpdb_simple.store_hands_players_stud(cursor, hands_id, player_ids,
|
hands_players_ids=fpdb_simple.store_hands_players_stud(backend, db, cursor, hands_id, player_ids
|
||||||
start_cashes, antes, card_values, card_suits, winnings, rakes, seatNos)
|
,start_cashes, antes, card_values
|
||||||
|
,card_suits, winnings, rakes, seatNos)
|
||||||
|
|
||||||
fpdb_simple.storeHudCache(cursor, base, category, gametype_id, player_ids, hudImportData)
|
fpdb_simple.storeHudCache(cursor, base, category, gametype_id, player_ids, hudImportData)
|
||||||
|
|
||||||
fpdb_simple.storeActions(cursor, hands_players_ids, action_types, allIns, action_amounts, actionNos)
|
fpdb_simple.storeActions(cursor, hands_players_ids, action_types
|
||||||
|
,allIns, action_amounts, actionNos)
|
||||||
return hands_id
|
return hands_id
|
||||||
#end def ring_stud
|
#end def ring_stud
|
||||||
|
|
||||||
def ring_holdem_omaha(cursor, base, category, site_hand_no, gametype_id, hand_start_time, names, player_ids, start_cashes, positions, card_values, card_suits, board_values, board_suits, winnings, rakes, action_types, allIns, action_amounts, actionNos, hudImportData, maxSeats, tableName, seatNos):
|
def ring_holdem_omaha(backend, db, cursor, base, category, site_hand_no, gametype_id
|
||||||
|
,hand_start_time, names, player_ids, start_cashes, positions, card_values
|
||||||
|
,card_suits, board_values, board_suits, winnings, rakes, action_types, allIns
|
||||||
|
,action_amounts, actionNos, hudImportData, maxSeats, tableName, seatNos):
|
||||||
"""stores a holdem/omaha hand into the database"""
|
"""stores a holdem/omaha hand into the database"""
|
||||||
|
t0 = time()
|
||||||
fpdb_simple.fillCardArrays(len(names), base, category, card_values, card_suits)
|
fpdb_simple.fillCardArrays(len(names), base, category, card_values, card_suits)
|
||||||
|
t1 = time()
|
||||||
fpdb_simple.fill_board_cards(board_values, board_suits)
|
fpdb_simple.fill_board_cards(board_values, board_suits)
|
||||||
|
t2 = time()
|
||||||
|
|
||||||
hands_id=fpdb_simple.storeHands(cursor, site_hand_no, gametype_id, hand_start_time, names, tableName, maxSeats)
|
hands_id=fpdb_simple.storeHands(backend, db, cursor, site_hand_no, gametype_id
|
||||||
|
,hand_start_time, names, tableName, maxSeats)
|
||||||
hands_players_ids=fpdb_simple.store_hands_players_holdem_omaha(cursor, category, hands_id, player_ids, start_cashes, positions, card_values, card_suits, winnings, rakes, seatNos)
|
t3 = time()
|
||||||
|
hands_players_ids=fpdb_simple.store_hands_players_holdem_omaha(
|
||||||
|
backend, db, cursor, category, hands_id, player_ids, start_cashes
|
||||||
|
, positions, card_values, card_suits, winnings, rakes, seatNos)
|
||||||
|
t4 = time()
|
||||||
fpdb_simple.storeHudCache(cursor, base, category, gametype_id, player_ids, hudImportData)
|
fpdb_simple.storeHudCache(cursor, base, category, gametype_id, player_ids, hudImportData)
|
||||||
|
t5 = time()
|
||||||
fpdb_simple.store_board_cards(cursor, hands_id, board_values, board_suits)
|
fpdb_simple.store_board_cards(cursor, hands_id, board_values, board_suits)
|
||||||
|
t6 = time()
|
||||||
fpdb_simple.storeActions(cursor, hands_players_ids, action_types, allIns, action_amounts, actionNos)
|
fpdb_simple.storeActions(cursor, hands_players_ids, action_types, allIns, action_amounts, actionNos)
|
||||||
|
t7 = time()
|
||||||
|
print "cards=%4.3f board=%4.3f hands=%4.3f plyrs=%4.3f hudcache=%4.3f board=%4.3f actions=%4.3f" \
|
||||||
|
% (t1-t0, t2-t1, t3-t2, t4-t3, t5-t4, t6-t5, t7-t6)
|
||||||
return hands_id
|
return hands_id
|
||||||
#end def ring_holdem_omaha
|
#end def ring_holdem_omaha
|
||||||
|
|
||||||
def tourney_holdem_omaha(cursor, base, category, siteTourneyNo, buyin, fee, knockout, entries, prizepool, tourney_start, payin_amounts, ranks, tourneyTypeId, siteId, #end of tourney specific params
|
def tourney_holdem_omaha(backend, db, cursor, base, category, siteTourneyNo, buyin, fee, knockout
|
||||||
site_hand_no, gametype_id, hand_start_time, names, player_ids, start_cashes, positions, card_values, card_suits, board_values, board_suits, winnings, rakes, action_types, allIns, action_amounts, actionNos, hudImportData, maxSeats, tableName, seatNos):
|
,entries, prizepool, tourney_start, payin_amounts, ranks, tourneyTypeId
|
||||||
|
,siteId #end of tourney specific params
|
||||||
|
,site_hand_no, gametype_id, hand_start_time, names, player_ids
|
||||||
|
,start_cashes, positions, card_values, card_suits, board_values
|
||||||
|
,board_suits, winnings, rakes, action_types, allIns, action_amounts
|
||||||
|
,actionNos, hudImportData, maxSeats, tableName, seatNos):
|
||||||
"""stores a tourney holdem/omaha hand into the database"""
|
"""stores a tourney holdem/omaha hand into the database"""
|
||||||
fpdb_simple.fillCardArrays(len(names), base, category, card_values, card_suits)
|
fpdb_simple.fillCardArrays(len(names), base, category, card_values, card_suits)
|
||||||
fpdb_simple.fill_board_cards(board_values, board_suits)
|
fpdb_simple.fill_board_cards(board_values, board_suits)
|
||||||
|
@ -62,9 +87,12 @@ def tourney_holdem_omaha(cursor, base, category, siteTourneyNo, buyin, fee, knoc
|
||||||
tourney_id=fpdb_simple.store_tourneys(cursor, tourneyTypeId, siteTourneyNo, entries, prizepool, tourney_start)
|
tourney_id=fpdb_simple.store_tourneys(cursor, tourneyTypeId, siteTourneyNo, entries, prizepool, tourney_start)
|
||||||
tourneys_players_ids=fpdb_simple.store_tourneys_players(cursor, tourney_id, player_ids, payin_amounts, ranks, winnings)
|
tourneys_players_ids=fpdb_simple.store_tourneys_players(cursor, tourney_id, player_ids, payin_amounts, ranks, winnings)
|
||||||
|
|
||||||
hands_id=fpdb_simple.storeHands(cursor, site_hand_no, gametype_id, hand_start_time, names, tableName, maxSeats)
|
hands_id=fpdb_simple.storeHands(backend, db, cursor, site_hand_no, gametype_id
|
||||||
|
,hand_start_time, names, tableName, maxSeats)
|
||||||
|
|
||||||
hands_players_ids=fpdb_simple.store_hands_players_holdem_omaha_tourney(cursor, category, hands_id, player_ids, start_cashes, positions, card_values, card_suits, winnings, rakes, seatNos, tourneys_players_ids)
|
hands_players_ids=fpdb_simple.store_hands_players_holdem_omaha_tourney(
|
||||||
|
backend, db, cursor, category, hands_id, player_ids, start_cashes, positions
|
||||||
|
, card_values, card_suits, winnings, rakes, seatNos, tourneys_players_ids)
|
||||||
|
|
||||||
fpdb_simple.storeHudCache(cursor, base, category, gametype_id, player_ids, hudImportData)
|
fpdb_simple.storeHudCache(cursor, base, category, gametype_id, player_ids, hudImportData)
|
||||||
|
|
||||||
|
@ -74,8 +102,11 @@ def tourney_holdem_omaha(cursor, base, category, siteTourneyNo, buyin, fee, knoc
|
||||||
return hands_id
|
return hands_id
|
||||||
#end def tourney_holdem_omaha
|
#end def tourney_holdem_omaha
|
||||||
|
|
||||||
def tourney_stud(cursor, base, category, siteTourneyNo, buyin, fee, knockout, entries, prizepool, tourneyStartTime, payin_amounts, ranks, tourneyTypeId, siteId,
|
def tourney_stud(backend, db, cursor, base, category, siteTourneyNo, buyin, fee, knockout, entries
|
||||||
siteHandNo, gametypeId, handStartTime, names, playerIds, startCashes, antes, cardValues, cardSuits, winnings, rakes, actionTypes, allIns, actionAmounts, actionNos, hudImportData, maxSeats, tableName, seatNos):
|
,prizepool, tourneyStartTime, payin_amounts, ranks, tourneyTypeId, siteId
|
||||||
|
,siteHandNo, gametypeId, handStartTime, names, playerIds, startCashes, antes
|
||||||
|
,cardValues, cardSuits, winnings, rakes, actionTypes, allIns, actionAmounts
|
||||||
|
,actionNos, hudImportData, maxSeats, tableName, seatNos):
|
||||||
#stores a tourney stud/razz hand into the database
|
#stores a tourney stud/razz hand into the database
|
||||||
fpdb_simple.fillCardArrays(len(names), base, category, cardValues, cardSuits)
|
fpdb_simple.fillCardArrays(len(names), base, category, cardValues, cardSuits)
|
||||||
|
|
||||||
|
@ -83,9 +114,11 @@ def tourney_stud(cursor, base, category, siteTourneyNo, buyin, fee, knockout, en
|
||||||
|
|
||||||
tourneys_players_ids=fpdb_simple.store_tourneys_players(cursor, tourney_id, playerIds, payin_amounts, ranks, winnings)
|
tourneys_players_ids=fpdb_simple.store_tourneys_players(cursor, tourney_id, playerIds, payin_amounts, ranks, winnings)
|
||||||
|
|
||||||
hands_id=fpdb_simple.storeHands(cursor, siteHandNo, gametypeId, handStartTime, names, tableName, maxSeats)
|
hands_id=fpdb_simple.storeHands(backend, db, cursor, siteHandNo, gametypeId, handStartTime, names, tableName, maxSeats)
|
||||||
|
|
||||||
hands_players_ids=fpdb_simple.store_hands_players_stud_tourney(cursor, hands_id, playerIds, startCashes, antes, cardValues, cardSuits, winnings, rakes, seatNos, tourneys_players_ids)
|
hands_players_ids=fpdb_simple.store_hands_players_stud_tourney(backend, db, cursor, hands_id
|
||||||
|
, playerIds, startCashes, antes, cardValues, cardSuits
|
||||||
|
, winnings, rakes, seatNos, tourneys_players_ids)
|
||||||
|
|
||||||
fpdb_simple.storeHudCache(cursor, base, category, gametypeId, playerIds, hudImportData)
|
fpdb_simple.storeHudCache(cursor, base, category, gametypeId, playerIds, hudImportData)
|
||||||
|
|
||||||
|
|
180
pyfpdb/fpdb_simple.py
Normal file → Executable file
180
pyfpdb/fpdb_simple.py
Normal file → Executable file
|
@ -23,6 +23,11 @@ import re
|
||||||
PS=1
|
PS=1
|
||||||
FTP=2
|
FTP=2
|
||||||
|
|
||||||
|
MYSQL_INNODB=2
|
||||||
|
PGSQL=3
|
||||||
|
SQLITE=4
|
||||||
|
|
||||||
|
|
||||||
class DuplicateError(Exception):
|
class DuplicateError(Exception):
|
||||||
def __init__(self, value):
|
def __init__(self, value):
|
||||||
self.value = value
|
self.value = value
|
||||||
|
@ -35,6 +40,37 @@ class FpdbError(Exception):
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return repr(self.value)
|
return repr(self.value)
|
||||||
|
|
||||||
|
# gets value for last auto-increment key generated
|
||||||
|
# returns -1 if a problem occurs
|
||||||
|
def getLastInsertId(backend, conn, cursor):
|
||||||
|
if backend == MYSQL_INNODB:
|
||||||
|
ret = conn.insert_id()
|
||||||
|
if ret < 1 or ret > 999999999:
|
||||||
|
print "getLastInsertId(): problem fetching insert_id? ret=", ret
|
||||||
|
ret = -1
|
||||||
|
elif backend == PGSQL:
|
||||||
|
# some options:
|
||||||
|
# currval(hands_id_seq) - use name of implicit seq here
|
||||||
|
# lastval() - still needs sequences set up?
|
||||||
|
# insert ... returning is useful syntax (but postgres specific?)
|
||||||
|
# see rules (fancy trigger type things)
|
||||||
|
cursor.execute ("SELECT lastval()")
|
||||||
|
row = cursor.fetchone()
|
||||||
|
if not row:
|
||||||
|
print "getLastInsertId(%s): problem fetching lastval? row=" % seq, row
|
||||||
|
ret = -1
|
||||||
|
else:
|
||||||
|
ret = row[0]
|
||||||
|
elif backend == SQLITE:
|
||||||
|
# don't know how to do this in sqlite
|
||||||
|
print "getLastInsertId(): not coded for sqlite yet"
|
||||||
|
ret = -1
|
||||||
|
else:
|
||||||
|
print "getLastInsertId(): unknown backend ", backend
|
||||||
|
ret = -1
|
||||||
|
return ret
|
||||||
|
#end def getLastInsertId
|
||||||
|
|
||||||
#returns an array of the total money paid. intending to add rebuys/addons here
|
#returns an array of the total money paid. intending to add rebuys/addons here
|
||||||
def calcPayin(count, buyin, fee):
|
def calcPayin(count, buyin, fee):
|
||||||
result=[]
|
result=[]
|
||||||
|
@ -54,8 +90,7 @@ def checkPositions(positions):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
### RHH modified to allow for "position 9" here (pos==9 is when you're a dead hand before the BB
|
### RHH modified to allow for "position 9" here (pos==9 is when you're a dead hand before the BB
|
||||||
### eric - position 8 could be valid - if only one blind is posted, but there's still 10 people, ie a sitout is present, and the small is dead...
|
if (pos!="B" and pos!="S" and pos!=0 and pos!=1 and pos!=2 and pos!=3 and pos!=4 and pos!=5 and pos!=6 and pos!=7 and pos!=9):
|
||||||
if not (pos == "B" or pos == "S" or (pos >= 0 and pos <= 9)):
|
|
||||||
raise FpdbError("invalid position found in checkPositions. i: "+str(i)+" position: "+str(pos))
|
raise FpdbError("invalid position found in checkPositions. i: "+str(i)+" position: "+str(pos))
|
||||||
#end def fpdb_simple.checkPositions
|
#end def fpdb_simple.checkPositions
|
||||||
|
|
||||||
|
@ -485,6 +520,7 @@ def isActionLine(line):
|
||||||
|
|
||||||
#returns whether this is a duplicate
|
#returns whether this is a duplicate
|
||||||
def isAlreadyInDB(cursor, gametypeID, siteHandNo):
|
def isAlreadyInDB(cursor, gametypeID, siteHandNo):
|
||||||
|
#print "isAlreadyInDB gtid,shand:",gametypeID, siteHandNo
|
||||||
cursor.execute ("SELECT id FROM Hands WHERE gametypeId=%s AND siteHandNo=%s", (gametypeID, siteHandNo))
|
cursor.execute ("SELECT id FROM Hands WHERE gametypeId=%s AND siteHandNo=%s", (gametypeID, siteHandNo))
|
||||||
result=cursor.fetchall()
|
result=cursor.fetchall()
|
||||||
if (len(result)>=1):
|
if (len(result)>=1):
|
||||||
|
@ -735,7 +771,7 @@ def parseCardLine(site, category, street, line, names, cardValues, cardSuits, bo
|
||||||
print "line:",line,"cardValues[playerNo]:",cardValues[playerNo]
|
print "line:",line,"cardValues[playerNo]:",cardValues[playerNo]
|
||||||
raise FpdbError("read too many/too few holecards in parseCardLine")
|
raise FpdbError("read too many/too few holecards in parseCardLine")
|
||||||
elif (category=="razz" or category=="studhi" or category=="studhilo"):
|
elif (category=="razz" or category=="studhi" or category=="studhilo"):
|
||||||
if (line.find("shows")==-1 and line.find("mucked") == -1):
|
if (line.find("shows")==-1):
|
||||||
#print "parseCardLine(in stud if), street:", street
|
#print "parseCardLine(in stud if), street:", street
|
||||||
if line[pos+2]=="]": #-> not (hero and 3rd street)
|
if line[pos+2]=="]": #-> not (hero and 3rd street)
|
||||||
cardValues[playerNo][street+2]=line[pos:pos+1]
|
cardValues[playerNo][street+2]=line[pos:pos+1]
|
||||||
|
@ -832,16 +868,14 @@ def parseHandStartTime(topline, site):
|
||||||
tmp=topline[pos1:pos2]
|
tmp=topline[pos1:pos2]
|
||||||
isUTC=True
|
isUTC=True
|
||||||
else:
|
else:
|
||||||
tmp=topline
|
tmp=topline[-30:]
|
||||||
#print "parsehandStartTime, tmp:", tmp
|
#print "parsehandStartTime, tmp:", tmp
|
||||||
pos = tmp.find("-")+2
|
pos = tmp.find("-")+2
|
||||||
tmp = tmp[pos:]
|
tmp = tmp[pos:]
|
||||||
#Need to match either
|
#Need to match either
|
||||||
# 2008/09/07 06:23:14 ET or
|
# 2008/09/07 06:23:14 ET or
|
||||||
# 2008/08/17 - 01:14:43 (ET) or
|
# 2008/08/17 - 01:14:43 (ET)
|
||||||
# 2008/11/12 9:33:31 CET [2008/11/12 3:33:31 ET]
|
m = re.match('(?P<YEAR>[0-9]{4})\/(?P<MON>[0-9]{2})\/(?P<DAY>[0-9]{2})[\- ]+(?P<HR>[0-9]{2}):(?P<MIN>[0-9]{2}):(?P<SEC>[0-9]{2})',tmp)
|
||||||
rexx = '(?P<YEAR>[0-9]{4})\/(?P<MON>[0-9]{2})\/(?P<DAY>[0-9]{2})[\- ]+(?P<HR>[0-9]+):(?P<MIN>[0-9]+):(?P<SEC>[0-9]+)'
|
|
||||||
m = re.search(rexx,tmp)
|
|
||||||
#print "year:", int(m.group('YEAR')), "month", int(m.group('MON')), "day", int(m.group('DAY')), "hour", int(m.group('HR')), "minute", int(m.group('MIN')), "second", int(m.group('SEC'))
|
#print "year:", int(m.group('YEAR')), "month", int(m.group('MON')), "day", int(m.group('DAY')), "hour", int(m.group('HR')), "minute", int(m.group('MIN')), "second", int(m.group('SEC'))
|
||||||
result = datetime.datetime(int(m.group('YEAR')), int(m.group('MON')), int(m.group('DAY')), int(m.group('HR')), int(m.group('MIN')), int(m.group('SEC')))
|
result = datetime.datetime(int(m.group('YEAR')), int(m.group('MON')), int(m.group('DAY')), int(m.group('HR')), int(m.group('MIN')), int(m.group('SEC')))
|
||||||
else:
|
else:
|
||||||
|
@ -894,11 +928,6 @@ def parsePositions (hand, names):
|
||||||
if (bb!=-1):
|
if (bb!=-1):
|
||||||
bb=recognisePlayerNo(bb, names, "bet")
|
bb=recognisePlayerNo(bb, names, "bet")
|
||||||
|
|
||||||
# print "sb = ", sb, "bb = ", bb
|
|
||||||
if bb == sb:
|
|
||||||
sbExists = False
|
|
||||||
sb = -1
|
|
||||||
|
|
||||||
#write blinds into array
|
#write blinds into array
|
||||||
if (sbExists):
|
if (sbExists):
|
||||||
positions[sb]="S"
|
positions[sb]="S"
|
||||||
|
@ -915,25 +944,16 @@ def parsePositions (hand, names):
|
||||||
positions[arraypos]=distFromBtn
|
positions[arraypos]=distFromBtn
|
||||||
arraypos-=1
|
arraypos-=1
|
||||||
distFromBtn+=1
|
distFromBtn+=1
|
||||||
# eric - this takes into account dead seats between blinds
|
|
||||||
if sbExists:
|
|
||||||
i = bb - 1
|
|
||||||
while positions[i] < 0 and i != sb:
|
|
||||||
positions[i] = 9
|
|
||||||
i -= 1
|
|
||||||
### RHH - Changed to set the null seats before BB to "9"
|
|
||||||
if sbExists:
|
|
||||||
i = sb-1
|
|
||||||
else:
|
|
||||||
i = bb-1
|
|
||||||
|
|
||||||
|
### RHH - Changed to set the null seats before BB to "9"
|
||||||
|
i=bb-1
|
||||||
while positions[i] < 0:
|
while positions[i] < 0:
|
||||||
positions[i]=9
|
positions[i]=9
|
||||||
i-=1
|
i-=1
|
||||||
|
|
||||||
arraypos=len(names)-1
|
arraypos=len(names)-1
|
||||||
if (bb!=0 or (bb==0 and sbExists==False) or (bb == 1 and sb != arraypos) ):
|
if (bb!=0 or (bb==0 and sbExists==False)):
|
||||||
while (arraypos>bb and arraypos > sb):
|
while (arraypos>bb):
|
||||||
positions[arraypos]=distFromBtn
|
positions[arraypos]=distFromBtn
|
||||||
arraypos-=1
|
arraypos-=1
|
||||||
distFromBtn+=1
|
distFromBtn+=1
|
||||||
|
@ -943,7 +963,6 @@ def parsePositions (hand, names):
|
||||||
print "parsePositions names:",names
|
print "parsePositions names:",names
|
||||||
print "result:",positions
|
print "result:",positions
|
||||||
raise FpdbError ("failed to read positions")
|
raise FpdbError ("failed to read positions")
|
||||||
#print str(positions), "\n"
|
|
||||||
return positions
|
return positions
|
||||||
#end def parsePositions
|
#end def parsePositions
|
||||||
|
|
||||||
|
@ -1039,7 +1058,7 @@ def recogniseCategory(line):
|
||||||
#end def recogniseCategory
|
#end def recogniseCategory
|
||||||
|
|
||||||
#returns the int for the gametype_id for the given line
|
#returns the int for the gametype_id for the given line
|
||||||
def recogniseGametypeID(cursor, topline, smallBlindLine, site_id, category, isTourney):#todo: this method is messy
|
def recogniseGametypeID(backend, db, cursor, topline, smallBlindLine, site_id, category, isTourney):#todo: this method is messy
|
||||||
#if (topline.find("HORSE")!=-1):
|
#if (topline.find("HORSE")!=-1):
|
||||||
# raise FpdbError("recogniseGametypeID: HORSE is not yet supported.")
|
# raise FpdbError("recogniseGametypeID: HORSE is not yet supported.")
|
||||||
|
|
||||||
|
@ -1090,6 +1109,9 @@ def recogniseGametypeID(cursor, topline, smallBlindLine, site_id, category, isTo
|
||||||
else:
|
else:
|
||||||
cursor.execute ("SELECT id FROM Gametypes WHERE siteId=%s AND type=%s AND category=%s AND limitType=%s AND smallBlind=%s AND bigBlind=%s", (site_id, type, category, limit_type, small_bet, big_bet))
|
cursor.execute ("SELECT id FROM Gametypes WHERE siteId=%s AND type=%s AND category=%s AND limitType=%s AND smallBlind=%s AND bigBlind=%s", (site_id, type, category, limit_type, small_bet, big_bet))
|
||||||
result=cursor.fetchone()
|
result=cursor.fetchone()
|
||||||
|
#print "recgt1 result=",result
|
||||||
|
#ret=result[0]
|
||||||
|
#print "recgt1 ret=",ret
|
||||||
#print "tried SELECTing gametypes.id, result:",result
|
#print "tried SELECTing gametypes.id, result:",result
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
@ -1120,18 +1142,24 @@ def recogniseGametypeID(cursor, topline, smallBlindLine, site_id, category, isTo
|
||||||
small_blind=float2int(smallBlindLine[pos:])
|
small_blind=float2int(smallBlindLine[pos:])
|
||||||
else:
|
else:
|
||||||
small_blind=0
|
small_blind=0
|
||||||
cursor.execute("""INSERT INTO Gametypes
|
cursor.execute( """INSERT INTO Gametypes(siteId, type, base, category, limitType
|
||||||
(siteId, type, base, category, limitType, hiLo, smallBlind, bigBlind, smallBet, bigBet)
|
,hiLo, smallBlind, bigBlind, smallBet, bigBet)
|
||||||
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)""", (site_id, type, base, category, limit_type, hiLo, small_blind, big_blind, small_bet, big_bet))
|
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"""
|
||||||
cursor.execute ("SELECT id FROM Gametypes WHERE siteId=%s AND type=%s AND category=%s AND limitType=%s AND smallBet=%s AND bigBet=%s", (site_id, type, category, limit_type, small_bet, big_bet))
|
, (site_id, type, base, category, limit_type, hiLo
|
||||||
|
,small_blind, big_blind, small_bet, big_bet) )
|
||||||
|
#cursor.execute ("SELECT id FROM Gametypes WHERE siteId=%s AND type=%s AND category=%s
|
||||||
|
#AND limitType=%s AND smallBet=%s AND bigBet=%s", (site_id, type, category, limit_type, small_bet, big_bet))
|
||||||
else:
|
else:
|
||||||
cursor.execute("""INSERT INTO Gametypes
|
cursor.execute( """INSERT INTO Gametypes(siteId, type, base, category, limitType
|
||||||
(siteId, type, base, category, limitType, hiLo, smallBlind, bigBlind, smallBet, bigBet)
|
,hiLo, smallBlind, bigBlind, smallBet, bigBet)
|
||||||
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)""", (site_id, type, base, category, limit_type, hiLo, small_bet, big_bet, 0, 0))#remember, for these bet means blind
|
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"""
|
||||||
cursor.execute ("SELECT id FROM Gametypes WHERE siteId=%s AND type=%s AND category=%s AND limitType=%s AND smallBlind=%s AND bigBlind=%s", (site_id, type, category, limit_type, small_bet, big_bet))
|
, (site_id, type, base, category, limit_type
|
||||||
|
,hiLo, small_bet, big_bet, 0, 0))#remember, for these bet means blind
|
||||||
|
#cursor.execute ("SELECT id FROM Gametypes WHERE siteId=%s AND type=%s AND category=%s
|
||||||
|
#AND limitType=%s AND smallBlind=%s AND bigBlind=%s", (site_id, type, category, limit_type, small_bet, big_bet))
|
||||||
|
|
||||||
result=cursor.fetchone()
|
#result=(db.insert_id(),)
|
||||||
#print "created new gametypes.id:",result
|
result=(getLastInsertId(backend,db,cursor),)
|
||||||
|
|
||||||
return result[0]
|
return result[0]
|
||||||
#end def recogniseGametypeID
|
#end def recogniseGametypeID
|
||||||
|
@ -1253,7 +1281,8 @@ def storeActions(cursor, handsPlayersIds, actionTypes, allIns, actionAmounts, ac
|
||||||
for i in range (len(actionTypes)): #iterate through streets
|
for i in range (len(actionTypes)): #iterate through streets
|
||||||
for j in range (len(actionTypes[i])): #iterate through names
|
for j in range (len(actionTypes[i])): #iterate through names
|
||||||
for k in range (len(actionTypes[i][j])): #iterate through individual actions of that player on that street
|
for k in range (len(actionTypes[i][j])): #iterate through individual actions of that player on that street
|
||||||
cursor.execute ("INSERT INTO HandsActions (handPlayerId, street, actionNo, action, allIn, amount) VALUES (%s, %s, %s, %s, %s, %s)", (handsPlayersIds[j], i, actionNos[i][j][k], actionTypes[i][j][k], allIns[i][j][k], actionAmounts[i][j][k]))
|
cursor.execute ("INSERT INTO HandsActions (handPlayerId, street, actionNo, action, allIn, amount) VALUES (%s, %s, %s, %s, %s, %s)"
|
||||||
|
, (handsPlayersIds[j], i, actionNos[i][j][k], actionTypes[i][j][k], allIns[i][j][k], actionAmounts[i][j][k]))
|
||||||
#end def storeActions
|
#end def storeActions
|
||||||
|
|
||||||
def store_board_cards(cursor, hands_id, board_values, board_suits):
|
def store_board_cards(cursor, hands_id, board_values, board_suits):
|
||||||
|
@ -1266,15 +1295,19 @@ def store_board_cards(cursor, hands_id, board_values, board_suits):
|
||||||
board_values[4], board_suits[4]))
|
board_values[4], board_suits[4]))
|
||||||
#end def store_board_cards
|
#end def store_board_cards
|
||||||
|
|
||||||
def storeHands(cursor, site_hand_no, gametype_id, hand_start_time, names, tableName, maxSeats):
|
def storeHands(backend, conn, cursor, site_hand_no, gametype_id
|
||||||
|
,hand_start_time, names, tableName, maxSeats):
|
||||||
#stores into table hands
|
#stores into table hands
|
||||||
cursor.execute ("INSERT INTO Hands (siteHandNo, gametypeId, handStart, seats, tableName, importTime, maxSeats) VALUES (%s, %s, %s, %s, %s, %s, %s)", (site_hand_no, gametype_id, hand_start_time, len(names), tableName, datetime.datetime.today(), maxSeats))
|
cursor.execute ("INSERT INTO Hands (siteHandNo, gametypeId, handStart, seats, tableName, importTime, maxSeats) VALUES (%s, %s, %s, %s, %s, %s, %s)", (site_hand_no, gametype_id, hand_start_time, len(names), tableName, datetime.datetime.today(), maxSeats))
|
||||||
#todo: find a better way of doing this...
|
#todo: find a better way of doing this...
|
||||||
cursor.execute("SELECT id FROM Hands WHERE siteHandNo=%s AND gametypeId=%s", (site_hand_no, gametype_id))
|
#cursor.execute("SELECT id FROM Hands WHERE siteHandNo=%s AND gametypeId=%s", (site_hand_no, gametype_id))
|
||||||
return cursor.fetchall()[0][0]
|
#return cursor.fetchall()[0][0]
|
||||||
|
return getLastInsertId(backend, conn, cursor)
|
||||||
|
#return db.insert_id() # mysql only
|
||||||
#end def storeHands
|
#end def storeHands
|
||||||
|
|
||||||
def store_hands_players_holdem_omaha(cursor, category, hands_id, player_ids, start_cashes, positions, card_values, card_suits, winnings, rakes, seatNos):
|
def store_hands_players_holdem_omaha(backend, conn, cursor, category, hands_id, player_ids, start_cashes
|
||||||
|
,positions, card_values, card_suits, winnings, rakes, seatNos):
|
||||||
result=[]
|
result=[]
|
||||||
if (category=="holdem"):
|
if (category=="holdem"):
|
||||||
for i in range (len(player_ids)):
|
for i in range (len(player_ids)):
|
||||||
|
@ -1286,8 +1319,9 @@ def store_hands_players_holdem_omaha(cursor, category, hands_id, player_ids, sta
|
||||||
(hands_id, player_ids[i], start_cashes[i], positions[i],
|
(hands_id, player_ids[i], start_cashes[i], positions[i],
|
||||||
card_values[i][0], card_suits[i][0], card_values[i][1], card_suits[i][1],
|
card_values[i][0], card_suits[i][0], card_values[i][1], card_suits[i][1],
|
||||||
winnings[i], rakes[i], seatNos[i]))
|
winnings[i], rakes[i], seatNos[i]))
|
||||||
cursor.execute("SELECT id FROM HandsPlayers WHERE handId=%s AND playerId+0=%s", (hands_id, player_ids[i]))
|
#cursor.execute("SELECT id FROM HandsPlayers WHERE handId=%s AND playerId=%s", (hands_id, player_ids[i]))
|
||||||
result.append(cursor.fetchall()[0][0])
|
#result.append(cursor.fetchall()[0][0])
|
||||||
|
result.append( getLastInsertId(backend, conn, cursor) ) # mysql only
|
||||||
elif (category=="omahahi" or category=="omahahilo"):
|
elif (category=="omahahi" or category=="omahahilo"):
|
||||||
for i in range (len(player_ids)):
|
for i in range (len(player_ids)):
|
||||||
cursor.execute ("""INSERT INTO HandsPlayers
|
cursor.execute ("""INSERT INTO HandsPlayers
|
||||||
|
@ -1299,14 +1333,15 @@ def store_hands_players_holdem_omaha(cursor, category, hands_id, player_ids, sta
|
||||||
card_values[i][0], card_suits[i][0], card_values[i][1], card_suits[i][1],
|
card_values[i][0], card_suits[i][0], card_values[i][1], card_suits[i][1],
|
||||||
card_values[i][2], card_suits[i][2], card_values[i][3], card_suits[i][3],
|
card_values[i][2], card_suits[i][2], card_values[i][3], card_suits[i][3],
|
||||||
winnings[i], rakes[i], seatNos[i]))
|
winnings[i], rakes[i], seatNos[i]))
|
||||||
cursor.execute("SELECT id FROM HandsPlayers WHERE handId=%s AND playerId+0=%s", (hands_id, player_ids[i]))
|
#cursor.execute("SELECT id FROM HandsPlayers WHERE handId=%s AND playerId+0=%s", (hands_id, player_ids[i]))
|
||||||
result.append(cursor.fetchall()[0][0])
|
#result.append(cursor.fetchall()[0][0])
|
||||||
|
result.append( getLastInsertId(backend, conn, cursor) ) # mysql only
|
||||||
else:
|
else:
|
||||||
raise FpdbError("invalid category")
|
raise FpdbError("invalid category")
|
||||||
return result
|
return result
|
||||||
#end def store_hands_players_holdem_omaha
|
#end def store_hands_players_holdem_omaha
|
||||||
|
|
||||||
def store_hands_players_stud(cursor, hands_id, player_ids, start_cashes, antes,
|
def store_hands_players_stud(backend, conn, cursor, hands_id, player_ids, start_cashes, antes,
|
||||||
card_values, card_suits, winnings, rakes, seatNos):
|
card_values, card_suits, winnings, rakes, seatNos):
|
||||||
#stores hands_players rows for stud/razz games. returns an array of the resulting IDs
|
#stores hands_players rows for stud/razz games. returns an array of the resulting IDs
|
||||||
result=[]
|
result=[]
|
||||||
|
@ -1325,12 +1360,15 @@ def store_hands_players_stud(cursor, hands_id, player_ids, start_cashes, antes,
|
||||||
card_values[i][2], card_suits[i][2], card_values[i][3], card_suits[i][3],
|
card_values[i][2], card_suits[i][2], card_values[i][3], card_suits[i][3],
|
||||||
card_values[i][4], card_suits[i][4], card_values[i][5], card_suits[i][5],
|
card_values[i][4], card_suits[i][4], card_values[i][5], card_suits[i][5],
|
||||||
card_values[i][6], card_suits[i][6], winnings[i], rakes[i], seatNos[i]))
|
card_values[i][6], card_suits[i][6], winnings[i], rakes[i], seatNos[i]))
|
||||||
cursor.execute("SELECT id FROM HandsPlayers WHERE handId=%s AND playerId+0=%s", (hands_id, player_ids[i]))
|
#cursor.execute("SELECT id FROM HandsPlayers WHERE handId=%s AND playerId+0=%s", (hands_id, player_ids[i]))
|
||||||
result.append(cursor.fetchall()[0][0])
|
#result.append(cursor.fetchall()[0][0])
|
||||||
|
result.append( getLastInsertId(backend, conn, cursor) ) # mysql only
|
||||||
return result
|
return result
|
||||||
#end def store_hands_players_stud
|
#end def store_hands_players_stud
|
||||||
|
|
||||||
def store_hands_players_holdem_omaha_tourney(cursor, category, hands_id, player_ids, start_cashes, positions, card_values, card_suits, winnings, rakes, seatNos, tourneys_players_ids):
|
def store_hands_players_holdem_omaha_tourney(backend, conn, cursor, category, hands_id, player_ids
|
||||||
|
,start_cashes, positions, card_values, card_suits
|
||||||
|
, winnings, rakes, seatNos, tourneys_players_ids):
|
||||||
#stores hands_players for tourney holdem/omaha hands
|
#stores hands_players for tourney holdem/omaha hands
|
||||||
result=[]
|
result=[]
|
||||||
for i in range (len(player_ids)):
|
for i in range (len(player_ids)):
|
||||||
|
@ -1356,13 +1394,14 @@ def store_hands_players_holdem_omaha_tourney(cursor, category, hands_id, player_
|
||||||
winnings[i], rakes[i], tourneys_players_ids[i], seatNos[i]))
|
winnings[i], rakes[i], tourneys_players_ids[i], seatNos[i]))
|
||||||
else:
|
else:
|
||||||
raise FpdbError ("invalid card_values length:"+str(len(card_values[0])))
|
raise FpdbError ("invalid card_values length:"+str(len(card_values[0])))
|
||||||
cursor.execute("SELECT id FROM HandsPlayers WHERE handId=%s AND playerId+0=%s", (hands_id, player_ids[i]))
|
#cursor.execute("SELECT id FROM HandsPlayers WHERE handId=%s AND playerId+0=%s", (hands_id, player_ids[i]))
|
||||||
result.append(cursor.fetchall()[0][0])
|
#result.append(cursor.fetchall()[0][0])
|
||||||
|
result.append( getLastInsertId(backend, conn, cursor) ) # mysql only
|
||||||
|
|
||||||
return result
|
return result
|
||||||
#end def store_hands_players_holdem_omaha_tourney
|
#end def store_hands_players_holdem_omaha_tourney
|
||||||
|
|
||||||
def store_hands_players_stud_tourney(cursor, hands_id, player_ids, start_cashes,
|
def store_hands_players_stud_tourney(backend, conn, cursor, hands_id, player_ids, start_cashes,
|
||||||
antes, card_values, card_suits, winnings, rakes, seatNos, tourneys_players_ids):
|
antes, card_values, card_suits, winnings, rakes, seatNos, tourneys_players_ids):
|
||||||
#stores hands_players for tourney stud/razz hands
|
#stores hands_players for tourney stud/razz hands
|
||||||
result=[]
|
result=[]
|
||||||
|
@ -1380,13 +1419,18 @@ def store_hands_players_stud_tourney(cursor, hands_id, player_ids, start_cashes,
|
||||||
card_values[i][2], card_suits[i][2], card_values[i][3], card_suits[i][3],
|
card_values[i][2], card_suits[i][2], card_values[i][3], card_suits[i][3],
|
||||||
card_values[i][4], card_suits[i][4], card_values[i][5], card_suits[i][5],
|
card_values[i][4], card_suits[i][4], card_values[i][5], card_suits[i][5],
|
||||||
card_values[i][6], card_suits[i][6], winnings[i], rakes[i], tourneys_players_ids[i], seatNos[i]))
|
card_values[i][6], card_suits[i][6], winnings[i], rakes[i], tourneys_players_ids[i], seatNos[i]))
|
||||||
cursor.execute("SELECT id FROM HandsPlayers WHERE handId=%s AND playerId=%s", (hands_id, player_ids[i]))
|
#cursor.execute("SELECT id FROM HandsPlayers WHERE handId=%s AND playerId+0=%s", (hands_id, player_ids[i]))
|
||||||
result.append(cursor.fetchall()[0][0])
|
#result.append(cursor.fetchall()[0][0])
|
||||||
|
result.append( getLastInsertId(backend, conn, cursor) ) # mysql only
|
||||||
return result
|
return result
|
||||||
#end def store_hands_players_stud_tourney
|
#end def store_hands_players_stud_tourney
|
||||||
|
|
||||||
def generateHudCacheData(player_ids, base, category, action_types, allIns, actionTypeByNo, winnings, totalWinnings, positions):
|
def generateHudCacheData(player_ids, base, category, action_types, allIns, actionTypeByNo
|
||||||
"""calculates data for the HUD during import. IMPORTANT: if you change this method make sure to also change the following storage method and table_viewer.prepare_data if necessary"""
|
,winnings, totalWinnings, positions, actionTypes, actionAmounts):
|
||||||
|
"""calculates data for the HUD during import. IMPORTANT: if you change this method make
|
||||||
|
sure to also change the following storage method and table_viewer.prepare_data if necessary
|
||||||
|
"""
|
||||||
|
#print "generateHudCacheData, len(player_ids)=", len(player_ids)
|
||||||
#setup subarrays of the result dictionary.
|
#setup subarrays of the result dictionary.
|
||||||
street0VPI=[]
|
street0VPI=[]
|
||||||
street0Aggr=[]
|
street0Aggr=[]
|
||||||
|
@ -1692,7 +1736,7 @@ def generateHudCacheData(player_ids, base, category, action_types, allIns, actio
|
||||||
hudDataPositions.append('C')
|
hudDataPositions.append('C')
|
||||||
elif pos>=2 and pos<=4:
|
elif pos>=2 and pos<=4:
|
||||||
hudDataPositions.append('M')
|
hudDataPositions.append('M')
|
||||||
elif pos>=5 and pos<=8:
|
elif pos>=5 and pos<=7:
|
||||||
hudDataPositions.append('E')
|
hudDataPositions.append('E')
|
||||||
### RHH Added this elif to handle being a dead hand before the BB (pos==9)
|
### RHH Added this elif to handle being a dead hand before the BB (pos==9)
|
||||||
elif pos==9:
|
elif pos==9:
|
||||||
|
@ -1906,8 +1950,14 @@ def generateHudCacheData(player_ids, base, category, action_types, allIns, actio
|
||||||
street3CheckCallRaiseDone=[]
|
street3CheckCallRaiseDone=[]
|
||||||
street4CheckCallRaiseChance=[]
|
street4CheckCallRaiseChance=[]
|
||||||
street4CheckCallRaiseDone=[]
|
street4CheckCallRaiseDone=[]
|
||||||
for player in range (len(player_ids)):
|
#print "b4 totprof calc, len(playerIds)=", len(player_ids)
|
||||||
myTotalProfit=0
|
for pl in range (len(player_ids)):
|
||||||
|
#print "pl=", pl
|
||||||
|
myTotalProfit=winnings[pl] # still need to deduct costs
|
||||||
|
for i in range (len(actionTypes)): #iterate through streets
|
||||||
|
#for j in range (len(actionTypes[i])): #iterate through names (using pl loop above)
|
||||||
|
for k in range (len(actionTypes[i][pl])): #iterate through individual actions of that player on that street
|
||||||
|
myTotalProfit -= actionAmounts[i][pl][k]
|
||||||
|
|
||||||
myStreet1CheckCallRaiseChance=False
|
myStreet1CheckCallRaiseChance=False
|
||||||
myStreet1CheckCallRaiseDone=False
|
myStreet1CheckCallRaiseDone=False
|
||||||
|
@ -1918,7 +1968,9 @@ def generateHudCacheData(player_ids, base, category, action_types, allIns, actio
|
||||||
myStreet4CheckCallRaiseChance=False
|
myStreet4CheckCallRaiseChance=False
|
||||||
myStreet4CheckCallRaiseDone=False
|
myStreet4CheckCallRaiseDone=False
|
||||||
|
|
||||||
|
#print "myTotalProfit=", myTotalProfit
|
||||||
totalProfit.append(myTotalProfit)
|
totalProfit.append(myTotalProfit)
|
||||||
|
#print "totalProfit[]=", totalProfit
|
||||||
|
|
||||||
street1CheckCallRaiseChance.append(myStreet1CheckCallRaiseChance)
|
street1CheckCallRaiseChance.append(myStreet1CheckCallRaiseChance)
|
||||||
street1CheckCallRaiseDone.append(myStreet1CheckCallRaiseDone)
|
street1CheckCallRaiseDone.append(myStreet1CheckCallRaiseDone)
|
||||||
|
@ -1930,6 +1982,7 @@ def generateHudCacheData(player_ids, base, category, action_types, allIns, actio
|
||||||
street4CheckCallRaiseDone.append(myStreet4CheckCallRaiseDone)
|
street4CheckCallRaiseDone.append(myStreet4CheckCallRaiseDone)
|
||||||
|
|
||||||
result['totalProfit']=totalProfit
|
result['totalProfit']=totalProfit
|
||||||
|
#print "res[totalProfit]=", result['totalProfit']
|
||||||
|
|
||||||
result['street1CheckCallRaiseChance']=street1CheckCallRaiseChance
|
result['street1CheckCallRaiseChance']=street1CheckCallRaiseChance
|
||||||
result['street1CheckCallRaiseDone']=street1CheckCallRaiseDone
|
result['street1CheckCallRaiseDone']=street1CheckCallRaiseDone
|
||||||
|
@ -1965,6 +2018,8 @@ def generateFoldToCB(street, playerIDs, didStreetCB, streetCBDone, foldToStreetC
|
||||||
def storeHudCache(cursor, base, category, gametypeId, playerIds, hudImportData):
|
def storeHudCache(cursor, base, category, gametypeId, playerIds, hudImportData):
|
||||||
# if (category=="holdem" or category=="omahahi" or category=="omahahilo"):
|
# if (category=="holdem" or category=="omahahi" or category=="omahahilo"):
|
||||||
|
|
||||||
|
#print "storeHudCache, len(playerIds)=", len(playerIds), " len(vpip)=" \
|
||||||
|
#, len(hudImportData['street0VPI']), " len(totprof)=", len(hudImportData['totalProfit'])
|
||||||
for player in range (len(playerIds)):
|
for player in range (len(playerIds)):
|
||||||
if base=="hold":
|
if base=="hold":
|
||||||
cursor.execute("SELECT * FROM HudCache WHERE gametypeId+0=%s AND playerId=%s AND activeSeats=%s AND position=%s", (gametypeId, playerIds[player], len(playerIds), hudImportData['position'][player]))
|
cursor.execute("SELECT * FROM HudCache WHERE gametypeId+0=%s AND playerId=%s AND activeSeats=%s AND position=%s", (gametypeId, playerIds[player], len(playerIds), hudImportData['position'][player]))
|
||||||
|
@ -2049,6 +2104,9 @@ def storeHudCache(cursor, base, category, gametypeId, playerIds, hudImportData):
|
||||||
if hudImportData['foldToStreet4CBChance'][player]: row[50]+=1
|
if hudImportData['foldToStreet4CBChance'][player]: row[50]+=1
|
||||||
if hudImportData['foldToStreet4CBDone'][player]: row[51]+=1
|
if hudImportData['foldToStreet4CBDone'][player]: row[51]+=1
|
||||||
|
|
||||||
|
#print "player=", player
|
||||||
|
#print "len(totalProfit)=", len(hudImportData['totalProfit'])
|
||||||
|
if hudImportData['totalProfit'][player]:
|
||||||
row[52]+=hudImportData['totalProfit'][player]
|
row[52]+=hudImportData['totalProfit'][player]
|
||||||
|
|
||||||
if hudImportData['street1CheckCallRaiseChance'][player]: row[53]+=1
|
if hudImportData['street1CheckCallRaiseChance'][player]: row[53]+=1
|
||||||
|
|
27
pyfpdb/upd_indexes.sql
Executable file
27
pyfpdb/upd_indexes.sql
Executable file
|
@ -0,0 +1,27 @@
|
||||||
|
|
||||||
|
# script to update indexes on mysql (+other?) database
|
||||||
|
|
||||||
|
select '1. Dropping indexes' as ' ';
|
||||||
|
select 'Can''t drop messages indicate index already gone' as ' ';
|
||||||
|
|
||||||
|
ALTER TABLE `fpdb`.`Settings` DROP INDEX `id`;
|
||||||
|
ALTER TABLE `fpdb`.`Sites` DROP INDEX `id`;
|
||||||
|
ALTER TABLE `fpdb`.`Gametypes` DROP INDEX `id`;
|
||||||
|
ALTER TABLE `fpdb`.`Players` DROP INDEX `id`;
|
||||||
|
ALTER TABLE `fpdb`.`Autorates` DROP INDEX `id`;
|
||||||
|
ALTER TABLE `fpdb`.`Hands` DROP INDEX `id`;
|
||||||
|
ALTER TABLE `fpdb`.`BoardCards` DROP INDEX `id`;
|
||||||
|
ALTER TABLE `fpdb`.`TourneyTypes` DROP INDEX `id`;
|
||||||
|
ALTER TABLE `fpdb`.`Tourneys` DROP INDEX `id`;
|
||||||
|
ALTER TABLE `fpdb`.`TourneysPlayers` DROP INDEX `id`;
|
||||||
|
ALTER TABLE `fpdb`.`HandsPlayers` DROP INDEX `id`;
|
||||||
|
ALTER TABLE `fpdb`.`HandsActions` DROP INDEX `id`;
|
||||||
|
ALTER TABLE `fpdb`.`HudCache` DROP INDEX `id`;
|
||||||
|
|
||||||
|
select '2. Adding extra indexes on useful fields' as ' ';
|
||||||
|
select 'Duplicate key name messages indicate new indexes already there' as ' ';
|
||||||
|
|
||||||
|
ALTER TABLE `fpdb`.`tourneys` ADD INDEX `siteTourneyNo`(`siteTourneyNo`);
|
||||||
|
ALTER TABLE `fpdb`.`hands` ADD INDEX `siteHandNo`(`siteHandNo`);
|
||||||
|
ALTER TABLE `fpdb`.`players` ADD INDEX `name`(`name`);
|
||||||
|
|
0
readme.txt
Normal file
0
readme.txt
Normal file
Loading…
Reference in New Issue
Block a user