diff --git a/pyfpdb/Configuration.py b/pyfpdb/Configuration.py
index a25b13eb..f1a6830f 100644
--- a/pyfpdb/Configuration.py
+++ b/pyfpdb/Configuration.py
@@ -415,12 +415,13 @@ class Database:
self.db_name = node.getAttribute("db_name")
self.db_desc = node.getAttribute("db_desc")
self.db_server = node.getAttribute("db_server").lower()
- self.db_ip = node.getAttribute("db_ip")
+ self.db_ip = node.getAttribute("db_ip")
+ self.db_port = node.getAttribute("db_port")
self.db_user = node.getAttribute("db_user")
self.db_pass = node.getAttribute("db_pass")
self.db_selected = string_to_bool(node.getAttribute("default"), default=False)
- log.debug("Database db_name:'%(name)s' db_server:'%(server)s' db_ip:'%(ip)s' db_user:'%(user)s' db_pass (not logged) selected:'%(sel)s'" \
- % { 'name':self.db_name, 'server':self.db_server, 'ip':self.db_ip, 'user':self.db_user, 'sel':self.db_selected} )
+ log.debug("Database db_name:'%(name)s' db_server:'%(server)s' db_ip:'%(ip)s' db_port:'%(port)s' db_user:'%(user)s' db_pass (not logged) selected:'%(sel)s'" \
+ % { 'name':self.db_name, 'server':self.db_server, 'ip':self.db_ip, 'port':self.db_port, 'user':self.db_user, 'sel':self.db_selected} )
def __str__(self):
temp = 'Database = ' + self.db_name + '\n'
@@ -1065,6 +1066,9 @@ class Config:
try: db['db-host'] = self.supported_databases[name].db_ip
except: pass
+ try: db['db-port'] = self.supported_databases[name].db_port
+ except KeyError: pass
+
try: db['db-user'] = self.supported_databases[name].db_user
except: pass
@@ -1078,15 +1082,16 @@ class Config:
return db
- def set_db_parameters(self, db_name = 'fpdb', db_ip = None, db_user = None,
- db_pass = None, db_desc = None, db_server = None,
- default = "False"):
+ def set_db_parameters(self, db_name = 'fpdb', db_ip = None, db_port = None,
+ db_user = None, db_pass = None, db_desc = None,
+ db_server = None, default = "False"):
db_node = self.get_db_node(db_name)
default = default.lower()
defaultb = string_to_bool(default, False)
if db_node != None:
if db_desc is not None: db_node.setAttribute("db_desc", db_desc)
if db_ip is not None: db_node.setAttribute("db_ip", db_ip)
+ if db_port is not None: db_node.setAttribute("db_port", db_port)
if db_user is not None: db_node.setAttribute("db_user", db_user)
if db_pass is not None: db_node.setAttribute("db_pass", db_pass)
if db_server is not None: db_node.setAttribute("db_server", db_server)
@@ -1100,6 +1105,7 @@ class Config:
if self.supported_databases.has_key(db_name):
if db_desc is not None: self.supported_databases[db_name].dp_desc = db_desc
if db_ip is not None: self.supported_databases[db_name].dp_ip = db_ip
+ if db_port is not None: self.supported_databases[db_name].dp_port = db_port
if db_user is not None: self.supported_databases[db_name].dp_user = db_user
if db_pass is not None: self.supported_databases[db_name].dp_pass = db_pass
if db_server is not None: self.supported_databases[db_name].dp_server = db_server
@@ -1154,6 +1160,7 @@ class Config:
if self.supported_databases.has_key(db_name):
if db_desc is not None: self.supported_databases[db_name].dp_desc = db_desc
if db_ip is not None: self.supported_databases[db_name].dp_ip = db_ip
+ if db_port is not None: self.supported_databases[db_name].dp_port = db_port
if db_user is not None: self.supported_databases[db_name].dp_user = db_user
if db_pass is not None: self.supported_databases[db_name].dp_pass = db_pass
if db_server is not None: self.supported_databases[db_name].dp_server = db_server
diff --git a/pyfpdb/Database.py b/pyfpdb/Database.py
index a0a0f9c8..dfffc9ce 100644
--- a/pyfpdb/Database.py
+++ b/pyfpdb/Database.py
@@ -254,6 +254,7 @@ class Database:
self.db_server = db_params['db-server']
self.database = db_params['db-databaseName']
self.host = db_params['db-host']
+ self.db_port = db_params['db-port']
self.db_path = ''
gen = c.get_general_params()
self.day_start = 0
@@ -349,6 +350,7 @@ class Database:
try:
self.connect(backend=db['db-backend'],
host=db['db-host'],
+ port=db['db-port'],
database=db['db-databaseName'],
user=db['db-user'],
password=db['db-password'])
@@ -363,14 +365,17 @@ class Database:
self.db_server = db_params['db-server']
self.database = db_params['db-databaseName']
self.host = db_params['db-host']
+ self.db_port = db_params['db-port']
- def connect(self, backend=None, host=None, database=None,
- user=None, password=None, create=False):
+ def connect(self, backend=None, host=None, port=None,
+ database=None, user=None, password=None,
+ create=False):
"""Connects a database with the given parameters"""
if backend is None:
raise FpdbError('Database backend not defined')
self.backend = backend
self.host = host
+ self.port = port
self.user = user
self.password = password
self.database = database
@@ -382,7 +387,8 @@ class Database:
if use_pool:
MySQLdb = pool.manage(MySQLdb, pool_size=5)
try:
- self.connection = MySQLdb.connect(host=host, user=user, passwd=password, db=database, use_unicode=True)
+ self.connection = MySQLdb.connect(host=host, port=port, user=user,
+ passwd=password, db=database, use_unicode=True)
self.__connected = True
#TODO: Add port option
except MySQLdb.Error, ex:
@@ -416,6 +422,7 @@ class Database:
if not self.is_connected():
try:
self.connection = psycopg2.connect(host = host,
+ port = port,
user = user,
password = password,
database = database)
@@ -1930,99 +1937,100 @@ class Database:
#print "DEBUG: %s %s %s" %(hid, pids, pdata)
inserts = []
for p in pdata:
- line = [0]*89
+ #NOTE: Insert new stats at right place because SQL needs strict order
+ line = []
- line[0] = 1 # HDs
- if pdata[p]['street0VPI']: line[1] = 1
- if pdata[p]['street0Aggr']: line[2] = 1
- if pdata[p]['street0_3BChance']: line[3] = 1
- if pdata[p]['street0_3BDone']: line[4] = 1
- if pdata[p]['street0_4BChance']: line[5] = 1
- if pdata[p]['street0_4BDone']: line[6] = 1
- if pdata[p]['street0_FoldTo3BChance']: line[7] = 1
- if pdata[p]['street0_FoldTo3BDone']: line[8] = 1
- if pdata[p]['street0_FoldTo4BChance']: line[9] = 1
- if pdata[p]['street0_FoldTo4BDone']: line[10] = 1
- if pdata[p]['other3BStreet0']: line[11] = 1
- if pdata[p]['other4BStreet0']: line[12] = 1
- if pdata[p]['street1Seen']: line[13] = 1
- if pdata[p]['street2Seen']: line[14] = 1
- if pdata[p]['street3Seen']: line[15] = 1
- if pdata[p]['street4Seen']: line[16] = 1
- if pdata[p]['sawShowdown']: line[17] = 1
- if pdata[p]['street1Aggr']: line[18] = 1
- if pdata[p]['street2Aggr']: line[19] = 1
- if pdata[p]['street3Aggr']: line[20] = 1
- if pdata[p]['street4Aggr']: line[21] = 1
- if pdata[p]['otherRaisedStreet0']: line[22] = 1
- if pdata[p]['otherRaisedStreet1']: line[23] = 1
- if pdata[p]['otherRaisedStreet2']: line[24] = 1
- if pdata[p]['otherRaisedStreet3']: line[25] = 1
- if pdata[p]['otherRaisedStreet4']: line[26] = 1
- if pdata[p]['foldToOtherRaisedStreet0']: line[27] = 1
- if pdata[p]['foldToOtherRaisedStreet1']: line[28] = 1
- if pdata[p]['foldToOtherRaisedStreet2']: line[29] = 1
- if pdata[p]['foldToOtherRaisedStreet3']: line[30] = 1
- if pdata[p]['foldToOtherRaisedStreet4']: line[31] = 1
- line[32] = pdata[p]['wonWhenSeenStreet1']
- line[33] = pdata[p]['wonWhenSeenStreet2']
- line[34] = pdata[p]['wonWhenSeenStreet3']
- line[35] = pdata[p]['wonWhenSeenStreet4']
- line[36] = pdata[p]['wonAtSD']
- if pdata[p]['raiseFirstInChance']: line[37] = 1
- if pdata[p]['raisedFirstIn']: line[38] = 1
- if pdata[p]['foldBbToStealChance']: line[39] = 1
- if pdata[p]['foldedBbToSteal']: line[40] = 1
- if pdata[p]['foldSbToStealChance']: line[41] = 1
- if pdata[p]['foldedSbToSteal']: line[42] = 1
- if pdata[p]['street1CBChance']: line[43] = 1
- if pdata[p]['street1CBDone']: line[44] = 1
- if pdata[p]['street2CBChance']: line[45] = 1
- if pdata[p]['street2CBDone']: line[46] = 1
- if pdata[p]['street3CBChance']: line[47] = 1
- if pdata[p]['street3CBDone']: line[48] = 1
- if pdata[p]['street4CBChance']: line[49] = 1
- if pdata[p]['street4CBDone']: line[50] = 1
- if pdata[p]['foldToStreet1CBChance']: line[51] = 1
- if pdata[p]['foldToStreet1CBDone']: line[52] = 1
- if pdata[p]['foldToStreet2CBChance']: line[53] = 1
- if pdata[p]['foldToStreet2CBDone']: line[54] = 1
- if pdata[p]['foldToStreet3CBChance']: line[55] = 1
- if pdata[p]['foldToStreet3CBDone']: line[56] = 1
- if pdata[p]['foldToStreet4CBChance']: line[57] = 1
- if pdata[p]['foldToStreet4CBDone']: line[58] = 1
- line[59] = pdata[p]['totalProfit']
- if pdata[p]['street1CheckCallRaiseChance']: line[60] = 1
- if pdata[p]['street1CheckCallRaiseDone']: line[61] = 1
- if pdata[p]['street2CheckCallRaiseChance']: line[62] = 1
- if pdata[p]['street2CheckCallRaiseDone']: line[63] = 1
- if pdata[p]['street3CheckCallRaiseChance']: line[64] = 1
- if pdata[p]['street3CheckCallRaiseDone']: line[65] = 1
- if pdata[p]['street4CheckCallRaiseChance']: line[66] = 1
- if pdata[p]['street4CheckCallRaiseDone']: line[67] = 1
- if pdata[p]['street0Calls']: line[68] = 1
- if pdata[p]['street1Calls']: line[69] = 1
- if pdata[p]['street2Calls']: line[70] = 1
- if pdata[p]['street3Calls']: line[71] = 1
- if pdata[p]['street4Calls']: line[72] = 1
- if pdata[p]['street0Bets']: line[73] = 1
- if pdata[p]['street1Bets']: line[74] = 1
- if pdata[p]['street2Bets']: line[75] = 1
- if pdata[p]['street3Bets']: line[76] = 1
- if pdata[p]['street4Bets']: line[77] = 1
- if pdata[p]['street0Raises']: line[78] = 1
- if pdata[p]['street1Raises']: line[79] = 1
- if pdata[p]['street2Raises']: line[80] = 1
- if pdata[p]['street3Raises']: line[81] = 1
- if pdata[p]['street4Raises']: line[82] = 1
+ line.append(1) # HDs
+ line.append(pdata[p]['street0VPI'])
+ line.append(pdata[p]['street0Aggr'])
+ line.append(pdata[p]['street0_3BChance'])
+ line.append(pdata[p]['street0_3BDone'])
+ line.append(pdata[p]['street0_4BChance'])
+ line.append(pdata[p]['street0_4BDone'])
+ line.append(pdata[p]['street0_FoldTo3BChance'])
+ line.append(pdata[p]['street0_FoldTo3BDone'])
+ line.append(pdata[p]['street0_FoldTo4BChance'])
+ line.append(pdata[p]['street0_FoldTo4BDone'])
+ line.append(pdata[p]['other3BStreet0'])
+ line.append(pdata[p]['other4BStreet0'])
+ line.append(pdata[p]['street1Seen'])
+ line.append(pdata[p]['street2Seen'])
+ line.append(pdata[p]['street3Seen'])
+ line.append(pdata[p]['street4Seen'])
+ line.append(pdata[p]['sawShowdown'])
+ line.append(pdata[p]['street1Aggr'])
+ line.append(pdata[p]['street2Aggr'])
+ line.append(pdata[p]['street3Aggr'])
+ line.append(pdata[p]['street4Aggr'])
+ line.append(pdata[p]['otherRaisedStreet0'])
+ line.append(pdata[p]['otherRaisedStreet1'])
+ line.append(pdata[p]['otherRaisedStreet2'])
+ line.append(pdata[p]['otherRaisedStreet3'])
+ line.append(pdata[p]['otherRaisedStreet4'])
+ line.append(pdata[p]['foldToOtherRaisedStreet0'])
+ line.append(pdata[p]['foldToOtherRaisedStreet1'])
+ line.append(pdata[p]['foldToOtherRaisedStreet2'])
+ line.append(pdata[p]['foldToOtherRaisedStreet3'])
+ line.append(pdata[p]['foldToOtherRaisedStreet4'])
+ line.append(pdata[p]['wonWhenSeenStreet1'])
+ line.append(pdata[p]['wonWhenSeenStreet2'])
+ line.append(pdata[p]['wonWhenSeenStreet3'])
+ line.append(pdata[p]['wonWhenSeenStreet4'])
+ line.append(pdata[p]['wonAtSD'])
+ line.append(pdata[p]['raiseFirstInChance'])
+ line.append(pdata[p]['raisedFirstIn'])
+ line.append(pdata[p]['foldBbToStealChance'])
+ line.append(pdata[p]['foldedBbToSteal'])
+ line.append(pdata[p]['foldSbToStealChance'])
+ line.append(pdata[p]['foldedSbToSteal'])
+ line.append(pdata[p]['street1CBChance'])
+ line.append(pdata[p]['street1CBDone'])
+ line.append(pdata[p]['street2CBChance'])
+ line.append(pdata[p]['street2CBDone'])
+ line.append(pdata[p]['street3CBChance'])
+ line.append(pdata[p]['street3CBDone'])
+ line.append(pdata[p]['street4CBChance'])
+ line.append(pdata[p]['street4CBDone'])
+ line.append(pdata[p]['foldToStreet1CBChance'])
+ line.append(pdata[p]['foldToStreet1CBDone'])
+ line.append(pdata[p]['foldToStreet2CBChance'])
+ line.append(pdata[p]['foldToStreet2CBDone'])
+ line.append(pdata[p]['foldToStreet3CBChance'])
+ line.append(pdata[p]['foldToStreet3CBDone'])
+ line.append(pdata[p]['foldToStreet4CBChance'])
+ line.append(pdata[p]['foldToStreet4CBDone'])
+ line.append(pdata[p]['totalProfit'])
+ line.append(pdata[p]['street1CheckCallRaiseChance'])
+ line.append(pdata[p]['street1CheckCallRaiseDone'])
+ line.append(pdata[p]['street2CheckCallRaiseChance'])
+ line.append(pdata[p]['street2CheckCallRaiseDone'])
+ line.append(pdata[p]['street3CheckCallRaiseChance'])
+ line.append(pdata[p]['street3CheckCallRaiseDone'])
+ line.append(pdata[p]['street4CheckCallRaiseChance'])
+ line.append(pdata[p]['street4CheckCallRaiseDone'])
+ line.append(pdata[p]['street0Calls'])
+ line.append(pdata[p]['street1Calls'])
+ line.append(pdata[p]['street2Calls'])
+ line.append(pdata[p]['street3Calls'])
+ line.append(pdata[p]['street4Calls'])
+ line.append(pdata[p]['street0Bets'])
+ line.append(pdata[p]['street1Bets'])
+ line.append(pdata[p]['street2Bets'])
+ line.append(pdata[p]['street3Bets'])
+ line.append(pdata[p]['street4Bets'])
+ line.append(pdata[p]['street0Raises'])
+ line.append(pdata[p]['street1Raises'])
+ line.append(pdata[p]['street2Raises'])
+ line.append(pdata[p]['street3Raises'])
+ line.append(pdata[p]['street4Raises'])
- line[83] = gid # gametypeId
- line[84] = pids[p] # playerId
- line[85] = len(pids) # activeSeats
+ line.append(gid) # gametypeId
+ line.append(pids[p]) # playerId
+ line.append(len(pids)) # activeSeats
pos = {'B':'B', 'S':'S', 0:'D', 1:'C', 2:'M', 3:'M', 4:'M', 5:'E', 6:'E', 7:'E', 8:'E', 9:'E' }
- line[86] = pos[pdata[p]['position']]
- line[87] = pdata[p]['tourneyTypeId']
- line[88] = styleKey # styleKey
+ line.append(pos[pdata[p]['position']])
+ line.append(pdata[p]['tourneyTypeId'])
+ line.append(styleKey) # styleKey
inserts.append(line)
diff --git a/pyfpdb/DerivedStats.py b/pyfpdb/DerivedStats.py
index 5ab047de..2bb3542f 100644
--- a/pyfpdb/DerivedStats.py
+++ b/pyfpdb/DerivedStats.py
@@ -446,21 +446,35 @@ class DerivedStats():
for action in hand.actions[hand.actionStreets[1]]:
# FIXME: fill other(3|4)BStreet0 - i have no idea what does it mean
pname, act, aggr = action[0], action[1], action[1] in ('raises', 'bets')
- if aggr and bet_level == 1:
- first_agressor = pname
- if aggr and bet_level == 2:
- self.handsplayers[pname]['street0_3BDone'] = True
- second_agressor = pname
- self.handsplayers[pname]['street0_4BDone'] = aggr and bet_level == 3 and pname == second_agressor
- self.handsplayers[pname]['street0_3BChance'] = self.handsplayers[pname]['street0_3BChance'] or bet_level == 2
- self.handsplayers[pname]['street0_4BChance'] = self.handsplayers[pname]['street0_4BChance'] or bet_level == 3 and pname == first_agressor
- self.handsplayers[pname]['street0_FoldTo3BChance'] = self.handsplayers[pname]['street0_FoldTo3BChance'] or (bet_level == 3 and pname == first_agressor)
- self.handsplayers[pname]['street0_FoldTo4BChance'] = self.handsplayers[pname]['street0_FoldTo4BChance'] or (bet_level == 4 and pname == second_agressor)
- self.handsplayers[pname]['street0_FoldTo3BDone'] = act == 'folds' and bet_level == 3 and pname == first_agressor
- self.handsplayers[pname]['street0_FoldTo4BDone'] = act == 'folds' and bet_level == 4 and pname == second_agressor
- if aggr:
- bet_level += 1
-
+ if bet_level == 1:
+ if aggr:
+ first_agressor = pname
+ bet_level += 1
+ continue
+ elif bet_level == 2:
+ self.handsplayers[pname]['street0_3BChance'] = True
+ if aggr:
+ self.handsplayers[pname]['street0_3BDone'] = True
+ second_agressor = pname
+ bet_level += 1
+ continue
+ elif bet_level == 3:
+ if pname == first_agressor:
+ self.handsplayers[pname]['street0_4BChance'] = True
+ self.handsplayers[pname]['street0_FoldTo3BChance'] = True
+ if aggr:
+ self.handsplayers[pname]['street0_4BDone'] = True
+ bet_level += 1
+ elif act == 'folds':
+ self.handsplayers[pname]['street0_FoldTo3BDone'] = True
+ break
+ continue
+ elif bet_level == 4:
+ if pname == second_agressor:
+ self.handsplayers[pname]['street0_FoldTo4BChance'] = True
+ if act == 'folds':
+ self.handsplayers[pname]['street0_FoldTo4BDone'] = True
+ break
def calcCBets(self, hand):
"""Fill streetXCBChance, streetXCBDone, foldToStreetXCBDone, foldToStreetXCBChance
diff --git a/pyfpdb/HUD_config.xml.example b/pyfpdb/HUD_config.xml.example
index 7bb30e0f..a3df15a2 100644
--- a/pyfpdb/HUD_config.xml.example
+++ b/pyfpdb/HUD_config.xml.example
@@ -796,6 +796,12 @@ Left-Drag to Move"
+
diff --git a/pyfpdb/SQL.py b/pyfpdb/SQL.py
index 2b432fc6..7acd8729 100644
--- a/pyfpdb/SQL.py
+++ b/pyfpdb/SQL.py
@@ -1511,10 +1511,14 @@ class Sql:
sum(hc.HDs) AS n,
sum(hc.street0VPI) AS vpip,
sum(hc.street0Aggr) AS pfr,
- sum(hc.street0_3BChance) AS TB_opp_0,
- sum(hc.street0_3BDone) AS TB_0,
- sum(hc.street0_FoldTo3BChance) AS FTB_opp_0,
- sum(hc.street0_FoldTo3BDone) AS FTB_0,
+ sum(hc.street0_3BChance) AS 3B_opp_0,
+ sum(hc.street0_3BDone) AS 3B_0,
+ sum(hc.street0_4BChance) AS 4B_opp_0,
+ sum(hc.street0_4BDone) AS 4B_0,
+ sum(hc.street0_FoldTo3BChance) AS F3B_opp_0,
+ sum(hc.street0_FoldTo3BDone) AS F3B_0,
+ sum(hc.street0_FoldTo4BChance) AS F4B_opp_0,
+ sum(hc.street0_FoldTo4BDone) AS F4B_0,
sum(hc.street1Seen) AS saw_f,
sum(hc.street1Seen) AS saw_1,
sum(hc.street2Seen) AS saw_2,
@@ -1624,10 +1628,14 @@ class Sql:
sum(hc.HDs) AS n,
sum(hc.street0VPI) AS vpip,
sum(hc.street0Aggr) AS pfr,
- sum(hc.street0_3BChance) AS TB_opp_0,
- sum(hc.street0_3BDone) AS TB_0,
- sum(hc.street0_FoldTo3BChance) AS FTB_opp_0,
- sum(hc.street0_FoldTo3BDone) AS FTB_0,
+ sum(hc.street0_3BChance) AS 3B_opp_0,
+ sum(hc.street0_3BDone) AS 3B_0,
+ sum(hc.street0_4BChance) AS 4B_opp_0,
+ sum(hc.street0_4BDone) AS 4B_0,
+ sum(hc.street0_FoldTo3BChance) AS F3B_opp_0,
+ sum(hc.street0_FoldTo3BDone) AS F3B_0,
+ sum(hc.street0_FoldTo4BChance) AS F4B_opp_0,
+ sum(hc.street0_FoldTo4BDone) AS F4B_0,
sum(hc.street1Seen) AS saw_f,
sum(hc.street1Seen) AS saw_1,
sum(hc.street2Seen) AS saw_2,
@@ -1754,10 +1762,14 @@ class Sql:
1 AS n,
cast(hp2.street0VPI as integer) AS vpip,
cast(hp2.street0Aggr as integer) AS pfr,
- cast(hp2.street0_3BChance as integer) AS TB_opp_0,
- cast(hp2.street0_3BDone as integer) AS TB_0,
- cast(hp2.street0_FoldTo3BChance as integer) AS FTB_opp_0,
- cast(hp2.street0_FoldTo3BDone as integer) AS FTB_0,
+ cast(hp2.street0_3BChance as integer) AS 3B_opp_0,
+ cast(hp2.street0_3BDone as integer) AS 3B_0,
+ cast(hp2.street0_4BChance as integer) AS 4B_opp_0,
+ cast(hp2.street0_4BDone as integer) AS 4B_0,
+ cast(hp2.street0_FoldTo3BChance as integer) AS F3B_opp_0,
+ cast(hp2.street0_FoldTo3BDone as integer) AS F3B_0,
+ cast(hp2.street0_FoldTo4BChance as integer) AS F4B_opp_0,
+ cast(hp2.street0_FoldTo4BDone as integer) AS F4B_0,
cast(hp2.street1Seen as integer) AS saw_f,
cast(hp2.street1Seen as integer) AS saw_1,
cast(hp2.street2Seen as integer) AS saw_2,
@@ -1860,10 +1872,14 @@ class Sql:
1 AS n,
cast(hp2.street0VPI as integer) AS vpip,
cast(hp2.street0Aggr as integer) AS pfr,
- cast(hp2.street0_3BChance as integer) AS TB_opp_0,
- cast(hp2.street0_3BDone as integer) AS TB_0,
- cast(hp2.street0_FoldTo3BChance as integer) AS FTB_opp_0,
- cast(hp2.street0_FoldTo3BDone as integer) AS FTB_0,
+ cast(hp2.street0_3BChance as integer) AS 3B_opp_0,
+ cast(hp2.street0_3BDone as integer) AS 3B_0,
+ cast(hp2.street0_4BChance as integer) AS 4B_opp_0,
+ cast(hp2.street0_4BDone as integer) AS 4B_0,
+ cast(hp2.street0_FoldTo3BChance as integer) AS 3TB_opp_0,
+ cast(hp2.street0_FoldTo3BDone as integer) AS 3TB_0,
+ cast(hp2.street0_FoldTo4BChance as integer) AS 4TB_opp_0,
+ cast(hp2.street0_FoldTo4BDone as integer) AS 4TB_0,
cast(hp2.street1Seen as integer) AS saw_f,
cast(hp2.street1Seen as integer) AS saw_1,
cast(hp2.street2Seen as integer) AS saw_2,
@@ -1967,10 +1983,14 @@ class Sql:
1 AS n,
cast(hp2.street0VPI as integer) AS vpip,
cast(hp2.street0Aggr as integer) AS pfr,
- cast(hp2.street0_3BChance as integer) AS TB_opp_0,
- cast(hp2.street0_3BDone as integer) AS TB_0,
- cast(hp2.street0_FoldTo3BChance as integer) AS TB_opp_0,
- cast(hp2.street0_FoldTo3BDone as integer) AS TB_0,
+ cast(hp2.street0_3BChance as integer) AS 3B_opp_0,
+ cast(hp2.street0_3BDone as integer) AS 3B_0,
+ cast(hp2.street0_4BChance as integer) AS 4B_opp_0,
+ cast(hp2.street0_4BDone as integer) AS 4B_0,
+ cast(hp2.street0_FoldTo3BChance as integer) AS F3B_opp_0,
+ cast(hp2.street0_FoldTo3BDone as integer) AS F3B_0,
+ cast(hp2.street0_FoldTo4BChance as integer) AS F4B_opp_0,
+ cast(hp2.street0_FoldTo4BDone as integer) AS F4B_0,
cast(hp2.street1Seen as integer) AS saw_f,
cast(hp2.street1Seen as integer) AS saw_1,
cast(hp2.street2Seen as integer) AS saw_2,
diff --git a/pyfpdb/Stats.py b/pyfpdb/Stats.py
index 8d9a4329..a85ac058 100755
--- a/pyfpdb/Stats.py
+++ b/pyfpdb/Stats.py
@@ -442,31 +442,50 @@ def three_B(stat_dict, player):
""" Three bet preflop/3rd."""
stat = 0.0
try:
- stat = float(stat_dict[player]['tb_0'])/float(stat_dict[player]['tb_opp_0'])
+ stat = float(stat_dict[player]['3b_0'])/float(stat_dict[player]['3b_opp_0'])
return (stat,
'%3.1f' % (100.0*stat),
'3B=%3.1f%%' % (100.0*stat),
'3B_pf=%3.1f%%' % (100.0*stat),
- '(%d/%d)' % (stat_dict[player]['tb_0'], stat_dict[player]['tb_opp_0']),
- _('% 3/4 Bet preflop/3rd'))
+ '(%d/%d)' % (stat_dict[player]['3b_0'], stat_dict[player]['3b_opp_0']),
+ _('% 4 Bet preflop/3rd'))
except:
return (stat,
'NA',
'3B=NA',
'3B_pf=NA',
'(0/0)',
- _('% 3/4 Bet preflop/3rd'))
+ _('% 3 Bet preflop/3rd'))
+
+def four_B(stat_dict, player):
+ """ Four bet preflop/4rd."""
+ stat = 0.0
+ try:
+ stat = float(stat_dict[player]['4b_0'])/float(stat_dict[player]['4b_opp_0'])
+ return (stat,
+ '%3.1f' % (100.0*stat),
+ '4B=%3.1f%%' % (100.0*stat),
+ '4B_pf=%3.1f%%' % (100.0*stat),
+ '(%d/%d)' % (stat_dict[player]['4b_0'], stat_dict[player]['4b_opp_0']),
+ _('% 4 Bet preflop/4rd'))
+ except:
+ return (stat,
+ 'NA',
+ '4B=NA',
+ '4B_pf=NA',
+ '(0/0)',
+ _('% 4 Bet preflop/4rd'))
def f_3bet(stat_dict, player):
""" Fold to 3bet preflop. """
stat = 0.0
try:
- stat = float(stat_dict[player]['ftb_0'])/float(stat_dict[player]['ftb_opp_0'])
+ stat = float(stat_dict[player]['f3b_0'])/float(stat_dict[player]['f3b_opp_0'])
return (stat,
'%3.1f' % (100.0*stat),
'F3B=%3.1f%%' % (100.0*stat),
'F3B_pf=%3.1f%%' % (100.0*stat),
- '(%d/%d)' % (stat_dict[player]['ftb_0'], stat_dict[player]['ftb_opp_0']),
+ '(%d/%d)' % (stat_dict[player]['f3b_0'], stat_dict[player]['f3b_opp_0']),
_('% Fold to 3 Bet preflop'))
except:
return (stat,
@@ -480,12 +499,12 @@ def f_4bet(stat_dict, player):
""" Fold to 4bet preflop. """
stat = 0.0
try:
- stat = float(stat_dict[player]['ffb_0'])/float(stat_dict[player]['ffb_opp_0'])
+ stat = float(stat_dict[player]['f4b_0'])/float(stat_dict[player]['f4b_opp_0'])
return (stat,
'%3.1f' % (100.0*stat),
'F4B=%3.1f%%' % (100.0*stat),
'F4B_pf=%3.1f%%' % (100.0*stat),
- '(%d/%d)' % (stat_dict[player]['ffb_0'], stat_dict[player]['ffb_opp_0']),
+ '(%d/%d)' % (stat_dict[player]['f4b_0'], stat_dict[player]['f4b_opp_0']),
_('% Fold to 4 Bet preflop'))
except:
return (stat,
diff --git a/pyfpdb/WinamaxToFpdb.py b/pyfpdb/WinamaxToFpdb.py
index 2baf3558..b8b5ed1e 100644
--- a/pyfpdb/WinamaxToFpdb.py
+++ b/pyfpdb/WinamaxToFpdb.py
@@ -107,6 +107,7 @@ class Winamax(HandHistoryConverter):
re_TailSplitHands = re.compile(r'\n\s*\n')
re_Button = re.compile(r'Seat\s#(?P