Merge branch 'master' of git://git.assembla.com/fpdboz.git
Conflicts: pyfpdb/AbsoluteToFpdb.py
This commit is contained in:
commit
2e698bb1d4
|
@ -181,9 +181,9 @@ or None if we fail to get the info """
|
|||
#m = re.search('(\*\* Dealing down cards \*\*\n)(?P<PREFLOP>.*?\n\*\*)?( Dealing Flop \*\* \[ (?P<FLOP1>\S\S), (?P<FLOP2>\S\S), (?P<FLOP3>\S\S) \])?(?P<FLOP>.*?\*\*)?( Dealing Turn \*\* \[ (?P<TURN1>\S\S) \])?(?P<TURN>.*?\*\*)?( Dealing River \*\* \[ (?P<RIVER1>\S\S) \])?(?P<RIVER>.*)', hand.handText,re.DOTALL)
|
||||
if hand.gametype['base'] == 'hold':
|
||||
m = re.search(r"\*\*\* POCKET CARDS \*\*\*(?P<PREFLOP>.+(?=\*\*\* FLOP \*\*\*)|.+)"
|
||||
r"\*\*\* FLOP \*\*\*(?P<FLOP>.+(?=\*\*\* TURN \*\*\*)|.+)"
|
||||
r"\*\*\* TURN \*\*\*(?P<TURN>.+(?=\*\*\* RIVER \*\*\*)|.+)"
|
||||
r"\*\*\* RIVER \*\*\*(?P<RIVER>.+)", hand.handText, re.DOTALL)
|
||||
r"(\*\*\* FLOP \*\*\*(?P<FLOP>.+(?=\*\*\* TURN \*\*\*)|.+))?"
|
||||
r"(\*\*\* TURN \*\*\*(?P<TURN>.+(?=\*\*\* RIVER \*\*\*)|.+))?"
|
||||
r"(\*\*\* RIVER \*\*\*(?P<RIVER>.+))?", hand.handText, re.DOTALL)
|
||||
|
||||
elif hand.gametype['base'] == 'stud': # TODO: Not implemented yet
|
||||
m = re.search(r"(?P<ANTES>.+(?=\*\* Dealing down cards \*\*)|.+)"
|
||||
|
@ -313,7 +313,6 @@ def validCard(card):
|
|||
if card == '10c': card = 'Tc'
|
||||
return card
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = OptionParser()
|
||||
parser.add_option("-i", "--input", dest="ipath", help="parse input hand history", default="-")
|
||||
|
|
|
@ -452,7 +452,7 @@ class Database:
|
|||
|
||||
def get_player_id(self, config, site, player_name):
|
||||
c = self.connection.cursor()
|
||||
c.execute(self.sql.query['get_player_id'], {'player': player_name, 'site': site})
|
||||
c.execute(self.sql.query['get_player_id'], (player_name, site))
|
||||
row = c.fetchone()
|
||||
if row:
|
||||
return row[0]
|
||||
|
@ -813,9 +813,11 @@ class Database:
|
|||
self.fillDefaultData()
|
||||
self.commit()
|
||||
except:
|
||||
print "Error creating tables: ", str(sys.exc_value)
|
||||
#print "Error creating tables: ", str(sys.exc_value)
|
||||
err = traceback.extract_tb(sys.exc_info()[2])[-1]
|
||||
print "***Error creating tables: "+err[2]+"("+str(err[1])+"): "+str(sys.exc_info()[1])
|
||||
self.rollback()
|
||||
raise fpdb_simple.FpdbError( "Error creating tables " + str(sys.exc_value) )
|
||||
raise
|
||||
#end def disconnect
|
||||
|
||||
def drop_tables(self):
|
||||
|
@ -845,8 +847,9 @@ class Database:
|
|||
|
||||
self.commit()
|
||||
except:
|
||||
print "Error dropping tables: " + str(sys.exc_value)
|
||||
raise fpdb_simple.FpdbError( "Error dropping tables " + str(sys.exc_value) )
|
||||
print "***Error dropping tables: "+err[2]+"("+str(err[1])+"): "+str(sys.exc_info()[1])
|
||||
self.rollback()
|
||||
raise
|
||||
#end def drop_tables
|
||||
|
||||
def createAllIndexes(self):
|
||||
|
@ -917,7 +920,13 @@ class Database:
|
|||
c.execute("INSERT INTO Sites (name,currency) VALUES ('PokerStars', 'USD')")
|
||||
c.execute("INSERT INTO Sites (name,currency) VALUES ('Everleaf', 'USD')")
|
||||
c.execute("INSERT INTO Sites (name,currency) VALUES ('Win2day', 'USD')")
|
||||
c.execute("INSERT INTO Sites (name,currency) VALUES ('OnGame', 'USD')")
|
||||
c.execute("INSERT INTO Sites (name,currency) VALUES ('UltimateBet', 'USD')")
|
||||
c.execute("INSERT INTO Sites (name,currency) VALUES ('Betfair', 'USD')")
|
||||
c.execute("INSERT INTO Sites (name,currency) VALUES ('Absolute', 'USD')")
|
||||
if self.backend == self.SQLITE:
|
||||
c.execute("INSERT INTO TourneyTypes VALUES (NULL, 1, 0, 0, 0, 0);")
|
||||
else:
|
||||
c.execute("INSERT INTO TourneyTypes VALUES (DEFAULT, 1, 0, 0, 0, False);")
|
||||
#c.execute("""INSERT INTO TourneyTypes
|
||||
# (siteId,buyin,fee,knockout,rebuyOrAddon) VALUES
|
||||
|
@ -1795,6 +1804,8 @@ if __name__=="__main__":
|
|||
print "database connection object = ", db_connection.connection
|
||||
print "database type = ", db_connection.type
|
||||
|
||||
db_connection.recreate_tables()
|
||||
|
||||
h = db_connection.get_last_hand()
|
||||
print "last hand = ", h
|
||||
|
||||
|
|
|
@ -15,6 +15,9 @@
|
|||
#In the "official" distribution you can find the license in
|
||||
#agpl-3.0.txt in the docs folder of the package.
|
||||
|
||||
#fpdb modules
|
||||
import Card
|
||||
|
||||
class DerivedStats():
|
||||
def __init__(self, hand):
|
||||
self.hand = hand
|
||||
|
@ -89,5 +92,69 @@ class DerivedStats():
|
|||
self.street4CheckCallRaiseChance = 0
|
||||
self.street4CheckCallRaiseDone = 0
|
||||
|
||||
def getStats():
|
||||
self.hands = {}
|
||||
self.handsplayers = {}
|
||||
|
||||
def getStats(self, hand):
|
||||
|
||||
for player in hand.players:
|
||||
self.handsplayers[player[1]] = {}
|
||||
|
||||
self.assembleHands(self.hand)
|
||||
self.assembleHandsPlayers(self.hand)
|
||||
|
||||
print "hands =", self.hands
|
||||
print "handsplayers =", self.handsplayers
|
||||
|
||||
def assembleHands(self, hand):
|
||||
self.hands['tableName'] = hand.tablename
|
||||
self.hands['siteHandNo'] = hand.handid
|
||||
self.hands['gametypeId'] = None # Leave None, handled later after checking db
|
||||
self.hands['handStart'] = hand.starttime # format this!
|
||||
self.hands['importTime'] = None
|
||||
self.hands['seats'] = self.countPlayers(hand)
|
||||
self.hands['maxSeats'] = hand.maxseats
|
||||
self.hands['boardcard1'] = None
|
||||
self.hands['boardcard2'] = None
|
||||
self.hands['boardcard3'] = None
|
||||
self.hands['boardcard4'] = None
|
||||
self.hands['boardcard5'] = None
|
||||
|
||||
boardCard = 1
|
||||
for street in hand.communityStreets:
|
||||
for card in hand.board[street]:
|
||||
self.hands['boardcard%s' % str(boardCard)] = Card.encodeCard(card)
|
||||
boardCard += 1
|
||||
|
||||
def assembleHandsPlayers(self, hand):
|
||||
self.vpip(self.hand)
|
||||
for i, street in enumerate(hand.actionStreets[1:]):
|
||||
self.aggr(self.hand, i)
|
||||
|
||||
def vpip(self, hand):
|
||||
vpipers = set()
|
||||
for act in hand.actions[hand.actionStreets[1]]:
|
||||
if act[1] in ('calls','bets', 'raises'):
|
||||
vpipers.add(act[0])
|
||||
|
||||
for player in hand.players:
|
||||
if player[1] in vpipers:
|
||||
self.handsplayers[player[1]]['vpip'] = True
|
||||
else:
|
||||
self.handsplayers[player[1]]['vpip'] = False
|
||||
self.hands['playersVpi'] = len(vpipers)
|
||||
|
||||
def aggr(self, hand, i):
|
||||
aggrers = set()
|
||||
for act in hand.actions[hand.actionStreets[i]]:
|
||||
if act[1] in ('completes', 'raises'):
|
||||
aggrers.add(act[0])
|
||||
|
||||
for player in hand.players:
|
||||
if player[1] in aggrers:
|
||||
self.handsplayers[player[1]]['street%sAggr' % i] = True
|
||||
else:
|
||||
self.handsplayers[player[1]]['street%sAggr' % i] = False
|
||||
|
||||
def countPlayers(self, hand):
|
||||
pass
|
|
@ -74,7 +74,7 @@ class GuiBulkImport():
|
|||
cb_hmodel = self.cb_drophudcache.get_model()
|
||||
cb_hindex = self.cb_drophudcache.get_active()
|
||||
|
||||
self.lab_info.set_text("Importing")
|
||||
self.lab_info.set_text("Importing") # doesn't display :-(
|
||||
if cb_index:
|
||||
self.importer.setDropIndexes(cb_model[cb_index][0])
|
||||
else:
|
||||
|
@ -95,6 +95,13 @@ class GuiBulkImport():
|
|||
print 'GuiBulkImport.load done: Stored: %d \tDuplicates: %d \tPartial: %d \tErrors: %d in %s seconds - %.0f/sec'\
|
||||
% (stored, dups, partial, errs, ttime, (stored+0.0) / ttime)
|
||||
self.importer.clearFileList()
|
||||
if self.n_hands_in_db == 0 and stored > 0:
|
||||
self.cb_dropindexes.set_sensitive(True)
|
||||
self.cb_dropindexes.set_active(0)
|
||||
self.lab_drop.set_sensitive(True)
|
||||
self.cb_drophudcache.set_sensitive(True)
|
||||
self.cb_drophudcache.set_active(0)
|
||||
self.lab_hdrop.set_sensitive(True)
|
||||
|
||||
self.lab_info.set_text("Import finished")
|
||||
except:
|
||||
|
@ -213,11 +220,11 @@ class GuiBulkImport():
|
|||
self.cbfilter.show()
|
||||
|
||||
# label - drop hudcache
|
||||
self.lab_drop = gtk.Label("Drop HudCache:")
|
||||
self.table.attach(self.lab_drop, 3, 4, 2, 3, xpadding = 0, ypadding = 0, yoptions=gtk.SHRINK)
|
||||
self.lab_drop.show()
|
||||
self.lab_drop.set_justify(gtk.JUSTIFY_RIGHT)
|
||||
self.lab_drop.set_alignment(1.0, 0.5)
|
||||
self.lab_hdrop = gtk.Label("Drop HudCache:")
|
||||
self.table.attach(self.lab_hdrop, 3, 4, 2, 3, xpadding = 0, ypadding = 0, yoptions=gtk.SHRINK)
|
||||
self.lab_hdrop.show()
|
||||
self.lab_hdrop.set_justify(gtk.JUSTIFY_RIGHT)
|
||||
self.lab_hdrop.set_alignment(1.0, 0.5)
|
||||
|
||||
# ComboBox - drop hudcache
|
||||
self.cb_drophudcache = gtk.combo_box_new_text()
|
||||
|
@ -258,7 +265,7 @@ class GuiBulkImport():
|
|||
self.lab_drop.set_sensitive(False)
|
||||
self.cb_drophudcache.set_active(2)
|
||||
self.cb_drophudcache.set_sensitive(False)
|
||||
self.lab_drop.set_sensitive(False)
|
||||
self.lab_hdrop.set_sensitive(False)
|
||||
|
||||
def main(argv=None):
|
||||
"""main can also be called in the python interpreter, by supplying the command line as the argument."""
|
||||
|
|
|
@ -203,6 +203,51 @@
|
|||
<location seat="9" x="70" y="53"> </location>
|
||||
</layout>
|
||||
</site>
|
||||
|
||||
|
||||
<site enabled="False"
|
||||
site_name="Absolute"
|
||||
table_finder="AbsolutePoker.exe"
|
||||
screen_name="YOUR SCREEN NAME HERE"
|
||||
site_path=""
|
||||
HH_path=""
|
||||
decoder="everleaf_decode_table"
|
||||
converter="AbsoluteToFpdb"
|
||||
supported_games="holdem">
|
||||
<layout fav_seat="0" height="547" max="8" width="794">
|
||||
<location seat="1" x="640" y="64"> </location>
|
||||
<location seat="2" x="650" y="230"> </location>
|
||||
<location seat="3" x="650" y="385"> </location>
|
||||
<location seat="4" x="588" y="425"> </location>
|
||||
<location seat="5" x="92" y="425"> </location>
|
||||
<location seat="6" x="0" y="373"> </location>
|
||||
<location seat="7" x="0" y="223"> </location>
|
||||
<location seat="8" x="25" y="50"> </location>
|
||||
</layout>
|
||||
<layout fav_seat="0" height="547" max="6" width="794">
|
||||
<location seat="1" x="640" y="58"> </location>
|
||||
<location seat="2" x="654" y="288"> </location>
|
||||
<location seat="3" x="615" y="424"> </location>
|
||||
<location seat="4" x="70" y="421"> </location>
|
||||
<location seat="5" x="0" y="280"> </location>
|
||||
<location seat="6" x="70" y="58"> </location>
|
||||
</layout>
|
||||
<layout fav_seat="0" height="547" max="2" width="794">
|
||||
<location seat="1" x="651" y="288"> </location>
|
||||
<location seat="2" x="10" y="288"> </location>
|
||||
</layout>
|
||||
<layout fav_seat="0" height="547" max="9" width="794">
|
||||
<location seat="1" x="634" y="38"> </location>
|
||||
<location seat="2" x="667" y="184"> </location>
|
||||
<location seat="3" x="667" y="321"> </location>
|
||||
<location seat="4" x="667" y="445"> </location>
|
||||
<location seat="5" x="337" y="459"> </location>
|
||||
<location seat="6" x="0" y="400"> </location>
|
||||
<location seat="7" x="0" y="322"> </location>
|
||||
<location seat="8" x="0" y="181"> </location>
|
||||
<location seat="9" x="70" y="53"> </location>
|
||||
</layout>
|
||||
</site>
|
||||
</supported_sites>
|
||||
|
||||
<supported_games>
|
||||
|
@ -337,6 +382,7 @@
|
|||
<hhc site="Full Tilt Poker" converter="FulltiltToFpdb"/>
|
||||
<hhc site="Everleaf" converter="EverleafToFpdb"/>
|
||||
<hhc site="Win2day" converter="Win2dayToFpdb"/>
|
||||
<hhc site="Absolute" converter="AbsoluteToFpdb"/>
|
||||
</hhcs>
|
||||
|
||||
<supported_databases>
|
||||
|
|
|
@ -204,7 +204,9 @@ which it expects to find at self.re_TailSplitHands -- see for e.g. Everleaf.py.
|
|||
logging.info("Unsupported game type: %s" % gametype)
|
||||
|
||||
if hand:
|
||||
# uncomment these to calculate some stats
|
||||
# print hand
|
||||
# hand.stats.getStats(hand)
|
||||
hand.writeHand(self.out_fh)
|
||||
return hand
|
||||
else:
|
||||
|
|
297
pyfpdb/SQL.py
297
pyfpdb/SQL.py
|
@ -19,9 +19,15 @@ Set up all of the SQL statements for a given game and database type.
|
|||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
# NOTES: The sql statements use the placeholder %s for bind variables
|
||||
# which is then replaced by ? for sqlite. Comments can be included
|
||||
# within sql statements using C style /* ... */ comments, BUT
|
||||
# THE COMMENTS MUST NOT INCLUDE %s OR ?.
|
||||
|
||||
########################################################################
|
||||
|
||||
# Standard Library modules
|
||||
import re
|
||||
|
||||
# pyGTK modules
|
||||
|
||||
|
@ -189,11 +195,11 @@ class Sql:
|
|||
version SMALLINT NOT NULL)
|
||||
ENGINE=INNODB"""
|
||||
elif db_server == 'postgresql':
|
||||
self.query['createSettingsTable'] = """CREATE TABLE Settings (version SMALLINT)"""
|
||||
self.query['createSettingsTable'] = """CREATE TABLE Settings (version SMALLINT NOT NULL)"""
|
||||
|
||||
elif db_server == 'sqlite':
|
||||
self.query['createSettingsTable'] = """CREATE TABLE Settings
|
||||
(version INTEGER) """
|
||||
(version INTEGER NOT NULL) """
|
||||
|
||||
|
||||
################################
|
||||
|
@ -290,7 +296,7 @@ class Sql:
|
|||
name TEXT,
|
||||
siteId INTEGER,
|
||||
comment TEXT,
|
||||
commentTs BLOB,
|
||||
commentTs REAL,
|
||||
FOREIGN KEY(siteId) REFERENCES Sites(id) ON DELETE CASCADE)"""
|
||||
|
||||
|
||||
|
@ -318,7 +324,14 @@ class Sql:
|
|||
ratingTime timestamp without time zone,
|
||||
handCount int)"""
|
||||
elif db_server == 'sqlite':
|
||||
self.query['createAutoratesTable'] = """ """
|
||||
self.query['createAutoratesTable'] = """CREATE TABLE Autorates (
|
||||
id INTEGER PRIMARY KEY,
|
||||
playerId INT,
|
||||
gametypeId INT,
|
||||
description TEXT,
|
||||
shortDesc TEXT,
|
||||
ratingTime REAL,
|
||||
handCount int)"""
|
||||
|
||||
|
||||
################################
|
||||
|
@ -400,12 +413,12 @@ class Sql:
|
|||
tableName TEXT(20),
|
||||
siteHandNo INTEGER,
|
||||
gametypeId INTEGER,
|
||||
handStart BLOB,
|
||||
importTime BLOB,
|
||||
handStart REAL,
|
||||
importTime REAL,
|
||||
seats INTEGER,
|
||||
maxSeats INTEGER,
|
||||
comment TEXT,
|
||||
commentTs BLOB,
|
||||
commentTs REAL,
|
||||
FOREIGN KEY(gametypeId) REFERENCES Gametypes(id) ON DELETE CASCADE)"""
|
||||
|
||||
|
||||
|
@ -425,14 +438,19 @@ class Sql:
|
|||
elif db_server == 'postgresql':
|
||||
self.query['createTourneyTypesTable'] = """CREATE TABLE TourneyTypes (
|
||||
id SERIAL, PRIMARY KEY (id),
|
||||
siteId INT, FOREIGN KEY (siteId) REFERENCES Sites(id),
|
||||
buyin INT,
|
||||
fee INT,
|
||||
knockout INT,
|
||||
rebuyOrAddon BOOLEAN)"""
|
||||
siteId INT NOT NULL, FOREIGN KEY (siteId) REFERENCES Sites(id),
|
||||
buyin INT NOT NULL,
|
||||
fee INT NOT NULL,
|
||||
knockout INT NOT NULL,
|
||||
rebuyOrAddon BOOLEAN NOT NULL)"""
|
||||
elif db_server == 'sqlite':
|
||||
self.query['createTourneyTypesTable'] = """ """
|
||||
|
||||
self.query['createTourneyTypesTable'] = """CREATE TABLE TourneyTypes (
|
||||
id INTEGER PRIMARY KEY,
|
||||
siteId INT NOT NULL,
|
||||
buyin INT NOT NULL,
|
||||
fee INT NOT NULL,
|
||||
knockout INT NOT NULL,
|
||||
rebuyOrAddon BOOLEAN NOT NULL)"""
|
||||
|
||||
################################
|
||||
# Create Tourneys
|
||||
|
@ -460,15 +478,15 @@ class Sql:
|
|||
comment TEXT,
|
||||
commentTs timestamp without time zone)"""
|
||||
elif db_server == 'sqlite':
|
||||
self.query['createTourneysTable'] = """CREATE TABLE TourneyTypes (
|
||||
self.query['createTourneysTable'] = """CREATE TABLE Tourneys (
|
||||
id INTEGER PRIMARY KEY,
|
||||
siteId INTEGER,
|
||||
buyin INTEGER,
|
||||
fee INTEGER,
|
||||
knockout INTEGER,
|
||||
rebuyOrAddon BOOL,
|
||||
FOREIGN KEY(siteId) REFERENCES Sites(id) ON DELETE CASCADE)"""
|
||||
|
||||
tourneyTypeId INT,
|
||||
siteTourneyNo INT,
|
||||
entries INT,
|
||||
prizepool INT,
|
||||
startTime REAL,
|
||||
comment TEXT,
|
||||
commentTs REAL)"""
|
||||
################################
|
||||
# Create HandsPlayers
|
||||
################################
|
||||
|
@ -709,7 +727,121 @@ class Sql:
|
|||
|
||||
FOREIGN KEY (tourneysPlayersId) REFERENCES TourneysPlayers(id))"""
|
||||
elif db_server == 'sqlite':
|
||||
self.query['createHandsPlayersTable'] = """ """
|
||||
self.query['createHandsPlayersTable'] = """CREATE TABLE HandsPlayers (
|
||||
id INTEGER PRIMARY KEY,
|
||||
handId INT NOT NULL,
|
||||
playerId INT NOT NULL,
|
||||
startCash INT NOT NULL,
|
||||
position TEXT,
|
||||
seatNo INT NOT NULL,
|
||||
|
||||
card1 INT NOT NULL, /* 0=none, 1-13=2-Ah 14-26=2-Ad 27-39=2-Ac 40-52=2-As */
|
||||
card2 INT NOT NULL,
|
||||
card3 INT,
|
||||
card4 INT,
|
||||
card5 INT,
|
||||
card6 INT,
|
||||
card7 INT,
|
||||
startCards INT,
|
||||
|
||||
ante INT,
|
||||
winnings INT NOT NULL,
|
||||
rake INT NOT NULL,
|
||||
totalProfit INT,
|
||||
comment TEXT,
|
||||
commentTs REAL,
|
||||
tourneysPlayersId INT,
|
||||
tourneyTypeId INT NOT NULL,
|
||||
|
||||
wonWhenSeenStreet1 REAL,
|
||||
wonWhenSeenStreet2 REAL,
|
||||
wonWhenSeenStreet3 REAL,
|
||||
wonWhenSeenStreet4 REAL,
|
||||
wonAtSD REAL,
|
||||
|
||||
street0VPI INT,
|
||||
street0Aggr INT,
|
||||
street0_3BChance INT,
|
||||
street0_3BDone INT,
|
||||
street0_4BChance INT,
|
||||
street0_4BDone INT,
|
||||
other3BStreet0 INT,
|
||||
other4BStreet0 INT,
|
||||
|
||||
street1Seen INT,
|
||||
street2Seen INT,
|
||||
street3Seen INT,
|
||||
street4Seen INT,
|
||||
sawShowdown INT,
|
||||
|
||||
street1Aggr INT,
|
||||
street2Aggr INT,
|
||||
street3Aggr INT,
|
||||
street4Aggr INT,
|
||||
|
||||
otherRaisedStreet0 INT,
|
||||
otherRaisedStreet1 INT,
|
||||
otherRaisedStreet2 INT,
|
||||
otherRaisedStreet3 INT,
|
||||
otherRaisedStreet4 INT,
|
||||
foldToOtherRaisedStreet0 INT,
|
||||
foldToOtherRaisedStreet1 INT,
|
||||
foldToOtherRaisedStreet2 INT,
|
||||
foldToOtherRaisedStreet3 INT,
|
||||
foldToOtherRaisedStreet4 INT,
|
||||
|
||||
stealAttemptChance INT,
|
||||
stealAttempted INT,
|
||||
foldBbToStealChance INT,
|
||||
foldedBbToSteal INT,
|
||||
foldSbToStealChance INT,
|
||||
foldedSbToSteal INT,
|
||||
|
||||
street1CBChance INT,
|
||||
street1CBDone INT,
|
||||
street2CBChance INT,
|
||||
street2CBDone INT,
|
||||
street3CBChance INT,
|
||||
street3CBDone INT,
|
||||
street4CBChance INT,
|
||||
street4CBDone INT,
|
||||
|
||||
foldToStreet1CBChance INT,
|
||||
foldToStreet1CBDone INT,
|
||||
foldToStreet2CBChance INT,
|
||||
foldToStreet2CBDone INT,
|
||||
foldToStreet3CBChance INT,
|
||||
foldToStreet3CBDone INT,
|
||||
foldToStreet4CBChance INT,
|
||||
foldToStreet4CBDone INT,
|
||||
|
||||
street1CheckCallRaiseChance INT,
|
||||
street1CheckCallRaiseDone INT,
|
||||
street2CheckCallRaiseChance INT,
|
||||
street2CheckCallRaiseDone INT,
|
||||
street3CheckCallRaiseChance INT,
|
||||
street3CheckCallRaiseDone INT,
|
||||
street4CheckCallRaiseChance INT,
|
||||
street4CheckCallRaiseDone INT,
|
||||
|
||||
street0Calls INT,
|
||||
street1Calls INT,
|
||||
street2Calls INT,
|
||||
street3Calls INT,
|
||||
street4Calls INT,
|
||||
street0Bets INT,
|
||||
street1Bets INT,
|
||||
street2Bets INT,
|
||||
street3Bets INT,
|
||||
street4Bets INT,
|
||||
street0Raises INT,
|
||||
street1Raises INT,
|
||||
street2Raises INT,
|
||||
street3Raises INT,
|
||||
street4Raises INT,
|
||||
|
||||
actionString REAL)
|
||||
"""
|
||||
|
||||
|
||||
################################
|
||||
|
@ -977,7 +1109,105 @@ class Sql:
|
|||
street4Raises INT)
|
||||
"""
|
||||
elif db_server == 'sqlite':
|
||||
self.query['createHudCacheTable'] = """ """
|
||||
self.query['createHudCacheTable'] = """CREATE TABLE HudCache (
|
||||
id INTEGER PRIMARY KEY,
|
||||
gametypeId INT,
|
||||
playerId INT,
|
||||
activeSeats INT,
|
||||
position TEXT,
|
||||
tourneyTypeId INT,
|
||||
styleKey TEXT NOT NULL, /* 1st char is style (A/T/H/S), other 6 are the key */
|
||||
HDs INT,
|
||||
|
||||
wonWhenSeenStreet1 REAL NOT NULL,
|
||||
wonWhenSeenStreet2 REAL,
|
||||
wonWhenSeenStreet3 REAL,
|
||||
wonWhenSeenStreet4 REAL,
|
||||
wonAtSD REAL NOT NULL,
|
||||
|
||||
street0VPI INT NOT NULL,
|
||||
street0Aggr INT,
|
||||
street0_3BChance INT NOT NULL,
|
||||
street0_3BDone INT NOT NULL,
|
||||
street0_4BChance INT,
|
||||
street0_4BDone INT,
|
||||
other3BStreet0 INT,
|
||||
other4BStreet0 INT,
|
||||
|
||||
street1Seen INT,
|
||||
street2Seen INT,
|
||||
street3Seen INT,
|
||||
street4Seen INT,
|
||||
sawShowdown INT,
|
||||
street1Aggr INT,
|
||||
street2Aggr INT,
|
||||
street3Aggr INT,
|
||||
street4Aggr INT,
|
||||
|
||||
otherRaisedStreet0 INT,
|
||||
otherRaisedStreet1 INT,
|
||||
otherRaisedStreet2 INT,
|
||||
otherRaisedStreet3 INT,
|
||||
otherRaisedStreet4 INT,
|
||||
foldToOtherRaisedStreet0 INT,
|
||||
foldToOtherRaisedStreet1 INT,
|
||||
foldToOtherRaisedStreet2 INT,
|
||||
foldToOtherRaisedStreet3 INT,
|
||||
foldToOtherRaisedStreet4 INT,
|
||||
|
||||
stealAttemptChance INT,
|
||||
stealAttempted INT,
|
||||
foldBbToStealChance INT,
|
||||
foldedBbToSteal INT,
|
||||
foldSbToStealChance INT,
|
||||
foldedSbToSteal INT,
|
||||
|
||||
street1CBChance INT,
|
||||
street1CBDone INT,
|
||||
street2CBChance INT,
|
||||
street2CBDone INT,
|
||||
street3CBChance INT,
|
||||
street3CBDone INT,
|
||||
street4CBChance INT,
|
||||
street4CBDone INT,
|
||||
|
||||
foldToStreet1CBChance INT,
|
||||
foldToStreet1CBDone INT,
|
||||
foldToStreet2CBChance INT,
|
||||
foldToStreet2CBDone INT,
|
||||
foldToStreet3CBChance INT,
|
||||
foldToStreet3CBDone INT,
|
||||
foldToStreet4CBChance INT,
|
||||
foldToStreet4CBDone INT,
|
||||
|
||||
totalProfit INT,
|
||||
|
||||
street1CheckCallRaiseChance INT,
|
||||
street1CheckCallRaiseDone INT,
|
||||
street2CheckCallRaiseChance INT,
|
||||
street2CheckCallRaiseDone INT,
|
||||
street3CheckCallRaiseChance INT,
|
||||
street3CheckCallRaiseDone INT,
|
||||
street4CheckCallRaiseChance INT,
|
||||
street4CheckCallRaiseDone INT,
|
||||
|
||||
street0Calls INT,
|
||||
street1Calls INT,
|
||||
street2Calls INT,
|
||||
street3Calls INT,
|
||||
street4Calls INT,
|
||||
street0Bets INT,
|
||||
street1Bets INT,
|
||||
street2Bets INT,
|
||||
street3Bets INT,
|
||||
street4Bets INT,
|
||||
street0Raises INT,
|
||||
street1Raises INT,
|
||||
street2Raises INT,
|
||||
street3Raises INT,
|
||||
street4Raises INT)
|
||||
"""
|
||||
|
||||
|
||||
if db_server == 'mysql':
|
||||
self.query['addTourneyIndex'] = """ALTER TABLE Tourneys ADD INDEX siteTourneyNo(siteTourneyNo)"""
|
||||
|
@ -1004,9 +1234,10 @@ class Sql:
|
|||
self.query['get_last_hand'] = "select max(id) from Hands"
|
||||
|
||||
self.query['get_player_id'] = """
|
||||
select Players.id AS player_id from Players, Sites
|
||||
where Players.name = %(player)s
|
||||
and Sites.name = %(site)s
|
||||
select Players.id AS player_id
|
||||
from Players, Sites
|
||||
where Players.name = %s
|
||||
and Sites.name = %s
|
||||
and Players.SiteId = Sites.id
|
||||
"""
|
||||
|
||||
|
@ -1081,7 +1312,7 @@ class Sql:
|
|||
AND hc.styleKey > %s
|
||||
/* styleKey is currently 'd' (for date) followed by a yyyymmdd
|
||||
date key. Set it to 0000000 or similar to get all records */
|
||||
/* also check activeseats here? even if only 3 groups eg 2-3/4-6/7+ ??
|
||||
/* also check activeseats here even if only 3 groups eg 2-3/4-6/7+
|
||||
e.g. could use a multiplier:
|
||||
AND h.seats > X / 1.25 and hp.seats < X * 1.25
|
||||
where X is the number of active players at the current table (and
|
||||
|
@ -1164,7 +1395,7 @@ class Sql:
|
|||
date key. Set it to 0000000 or similar to get all records */
|
||||
/* Note: s means the placeholder 'percent's but we can't include that
|
||||
in comments. (db api thinks they are actual arguments)
|
||||
Could also check activeseats here? even if only 3 groups eg 2-3/4-6/7+ ??
|
||||
Could also check activeseats here even if only 3 groups eg 2-3/4-6/7+
|
||||
e.g. could use a multiplier:
|
||||
AND h.seats > s / 1.25 and hp.seats < s * 1.25
|
||||
where s is the number of active players at the current table (and
|
||||
|
@ -1252,7 +1483,7 @@ class Sql:
|
|||
INNER JOIN HandsPlayers hp2 ON (hp2.playerId+0 = hp.playerId+0 AND (hp2.handId = h2.id+0)) /* other hands by these players */
|
||||
INNER JOIN Players p ON (p.id = hp2.PlayerId+0)
|
||||
WHERE hp.handId = %s
|
||||
/* check activeseats once this data returned? (don't want to do that here as it might
|
||||
/* check activeseats once this data returned (don't want to do that here as it might
|
||||
assume a session ended just because the number of seats dipped for a few hands)
|
||||
*/
|
||||
ORDER BY h.handStart desc, hp2.PlayerId
|
||||
|
@ -1331,7 +1562,7 @@ class Sql:
|
|||
AND hp2.handId = h2.id) /* other hands by these players */
|
||||
INNER JOIN Players p ON (p.id = hp2.PlayerId+0)
|
||||
WHERE h.id = %s
|
||||
/* check activeseats once this data returned? (don't want to do that here as it might
|
||||
/* check activeseats once this data returned (don't want to do that here as it might
|
||||
assume a session ended just because the number of seats dipped for a few hands)
|
||||
*/
|
||||
ORDER BY h.handStart desc, hp2.PlayerId
|
||||
|
@ -2450,6 +2681,10 @@ class Sql:
|
|||
else: # assume postgres
|
||||
self.query['lockForInsert'] = ""
|
||||
|
||||
if db_server == 'sqlite':
|
||||
for k,q in self.query.iteritems():
|
||||
self.query[k] = re.sub('%s','?',q)
|
||||
|
||||
if __name__== "__main__":
|
||||
# just print the default queries and exit
|
||||
s = Sql(game = 'razz', type = 'ptracks')
|
||||
|
|
|
@ -155,7 +155,7 @@ class fpdb_db:
|
|||
return (self.host, self.database, self.user, self.password)
|
||||
#end def get_db_info
|
||||
|
||||
def getLastInsertId(self):
|
||||
def getLastInsertId(self, cursor=None):
|
||||
try:
|
||||
if self.backend == self.MYSQL_INNODB:
|
||||
ret = self.db.insert_id()
|
||||
|
@ -177,9 +177,7 @@ class fpdb_db:
|
|||
else:
|
||||
ret = row[0]
|
||||
elif self.backend == fpdb_db.SQLITE:
|
||||
# don't know how to do this in sqlite
|
||||
print "getLastInsertId(): not coded for sqlite yet"
|
||||
ret = -1
|
||||
ret = cursor.lastrowid
|
||||
else:
|
||||
print "getLastInsertId(): unknown backend ", self.backend
|
||||
ret = -1
|
||||
|
|
|
@ -49,37 +49,6 @@ class FpdbError(Exception):
|
|||
def __str__(self):
|
||||
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
|
||||
def calcPayin(count, buyin, fee):
|
||||
return [buyin + fee for i in xrange(count)]
|
||||
|
|
42
utils/fix_table_desc.py
Normal file
42
utils/fix_table_desc.py
Normal file
|
@ -0,0 +1,42 @@
|
|||
#!/usr/bin/python
|
||||
|
||||
import re
|
||||
|
||||
desc = """
|
||||
+-------------+---------------------+------+-----+---------+----------------+
|
||||
| Field | Type | Null | Key | Default | Extra |
|
||||
+-------------+---------------------+------+-----+---------+----------------+
|
||||
| id | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
|
||||
| tourneyId | int(10) unsigned | NO | MUL | NULL | |
|
||||
| playerId | int(10) unsigned | NO | MUL | NULL | |
|
||||
| payinAmount | int(11) | NO | | NULL | |
|
||||
| rank | int(11) | NO | | NULL | |
|
||||
| winnings | int(11) | NO | | NULL | |
|
||||
| comment | text | YES | | NULL | |
|
||||
| commentTs | datetime | YES | | NULL | |
|
||||
+-------------+---------------------+------+-----+---------+----------------+
|
||||
"""
|
||||
|
||||
table = """
|
||||
{| border="1"
|
||||
|+Gametypes Table
|
||||
"""
|
||||
|
||||
# get rid of the verticle spacing and clean up
|
||||
desc = re.sub("[\+\-]+", "", desc)
|
||||
desc = re.sub("^\n+", "", desc) # there's probably a better way
|
||||
desc = re.sub("\n\n", "\n", desc)
|
||||
|
||||
# the first line is the header info
|
||||
temp, desc = re.split("\n", desc, 1)
|
||||
temp = re.sub("\|", "!", temp)
|
||||
temp = re.sub(" !", " !!", temp)
|
||||
table += temp + " Comments\n"
|
||||
|
||||
# the rest is he body of the table
|
||||
for line in re.split("\n", desc):
|
||||
line = re.sub(" \|", " ||", line)
|
||||
table += "|+\n" + line + "\n"
|
||||
|
||||
table += "|}\n"
|
||||
print table
|
Loading…
Reference in New Issue
Block a user