2008-12-13 18:52:25 +01:00
#!/usr/bin/python
#Copyright 2008 Steffen Jobbagy-Felso
#This program is free software: you can redistribute it and/or modify
#it under the terms of the GNU Affero General Public License as published by
#the Free Software Foundation, version 3 of the License.
#
#This program is distributed in the hope that it will be useful,
#but WITHOUT ANY WARRANTY; without even the implied warranty of
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
#GNU General Public License for more details.
#
#You should have received a copy of the GNU Affero General Public License
#along with this program. If not, see <http://www.gnu.org/licenses/>.
#In the "official" distribution you can find the license in
#agpl-3.0.txt in the docs folder of the package.
#This file contains simple functions for fpdb
2009-06-07 21:07:18 +02:00
#Aiming to eventually remove this module, functions will move to, eg:
#fpdb_db db create/re-create/management/etc
#Hands or related files for saving hands to db, etc
2008-12-13 18:52:25 +01:00
import datetime
2009-03-19 02:22:04 +01:00
import time
2008-12-13 18:52:25 +01:00
import re
2009-05-31 22:06:33 +02:00
import sys
2009-05-21 05:26:00 +02:00
import Card
2008-12-13 18:52:25 +01:00
2009-03-19 02:22:04 +01:00
PS = 1
FTP = 2
2008-12-13 18:52:25 +01:00
2009-03-19 02:22:04 +01:00
# TODO: these constants are also used in fpdb_save_to_db and others, is there a way to do like C #define, and #include ?
2009-06-07 21:07:18 +02:00
# answer - yes. These are defined in fpdb_db so are accessible through that class.
2009-03-19 02:22:04 +01:00
MYSQL_INNODB = 2
PGSQL = 3
SQLITE = 4
2008-12-16 04:17:50 +01:00
2009-05-28 00:34:10 +02:00
# config while trying out new hudcache mechanism
use_date_in_hudcache = True
2008-12-13 18:52:25 +01:00
class DuplicateError ( Exception ) :
def __init__ ( self , value ) :
self . value = value
def __str__ ( self ) :
return repr ( self . value )
class FpdbError ( Exception ) :
def __init__ ( self , value ) :
self . value = value
def __str__ ( self ) :
return repr ( self . value )
2008-12-16 04:46:31 +01:00
2008-12-13 18:52:25 +01:00
# 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 ) :
2009-03-26 20:11:24 +01:00
return [ buyin + fee for i in xrange ( count ) ]
2008-12-13 18:52:25 +01:00
#end def calcPayin
2009-03-19 02:22:04 +01:00
2008-12-13 18:52:25 +01:00
def checkPositions ( positions ) :
2009-03-19 02:22:04 +01:00
""" verify positions are valid """
2009-03-26 20:11:24 +01:00
if any ( not ( p == " B " or p == " S " or ( p > = 0 and p < = 9 ) ) for p in positions ) :
raise FpdbError ( " invalid position ' " + p + " ' found in checkPositions " )
2009-03-19 02:22:04 +01:00
### 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...
2008-12-13 18:52:25 +01:00
#classifies each line for further processing in later code. Manipulates the passed arrays.
def classifyLines ( hand , category , lineTypes , lineStreets ) :
2009-03-19 02:22:04 +01:00
currentStreet = " predeal "
done = False #set this to true once we reach the last relevant line (the summary, except rake, is all repeats)
2009-03-09 10:56:41 +01:00
for i , line in enumerate ( hand ) :
if done :
if " [ " not in line or " mucked [ " not in line :
2008-12-13 18:52:25 +01:00
lineTypes . append ( " ignore " )
2009-03-09 10:56:41 +01:00
else :
2008-12-13 18:52:25 +01:00
lineTypes . append ( " cards " )
2009-03-09 10:56:41 +01:00
elif line . startswith ( " Dealt to " ) :
2008-12-13 18:52:25 +01:00
lineTypes . append ( " cards " )
2009-03-09 10:56:41 +01:00
elif i == 0 :
2008-12-13 18:52:25 +01:00
lineTypes . append ( " header " )
2009-03-19 08:40:40 +01:00
elif line . startswith ( " Table ' " ) :
lineTypes . append ( " table " )
2009-03-09 10:56:41 +01:00
elif line . startswith ( " Seat " ) and ( ( " in chips " in line ) or " ($ " in line ) :
2008-12-13 18:52:25 +01:00
lineTypes . append ( " name " )
2009-03-09 10:56:41 +01:00
elif isActionLine ( line ) :
2008-12-13 18:52:25 +01:00
lineTypes . append ( " action " )
2009-03-09 10:56:41 +01:00
if " posts " in line or " posts the " in line :
2008-12-13 18:52:25 +01:00
currentStreet = " preflop "
2009-03-09 10:56:41 +01:00
elif " antes " in line or " posts the ante " in line :
2008-12-13 18:52:25 +01:00
lineTypes . append ( " ante " )
2009-03-09 10:56:41 +01:00
elif line . startswith ( " *** FLOP *** [ " ) :
2008-12-13 18:52:25 +01:00
lineTypes . append ( " cards " )
currentStreet = " flop "
2009-03-09 10:56:41 +01:00
elif line . startswith ( " *** TURN *** [ " ) :
2008-12-13 18:52:25 +01:00
lineTypes . append ( " cards " )
currentStreet = " turn "
2009-03-09 10:56:41 +01:00
elif line . startswith ( " *** RIVER *** [ " ) :
2008-12-13 18:52:25 +01:00
lineTypes . append ( " cards " )
currentStreet = " river "
2009-03-09 10:56:41 +01:00
elif line . startswith ( " *** 3 " ) :
2008-12-13 18:52:25 +01:00
lineTypes . append ( " ignore " )
currentStreet = 0
2009-03-09 10:56:41 +01:00
elif line . startswith ( " *** 4 " ) :
2008-12-13 18:52:25 +01:00
lineTypes . append ( " ignore " )
currentStreet = 1
2009-03-09 10:56:41 +01:00
elif line . startswith ( " *** 5 " ) :
2008-12-13 18:52:25 +01:00
lineTypes . append ( " ignore " )
currentStreet = 2
2009-03-09 10:56:41 +01:00
elif line . startswith ( " *** 6 " ) :
2008-12-13 18:52:25 +01:00
lineTypes . append ( " ignore " )
currentStreet = 3
2009-03-09 10:56:41 +01:00
elif line . startswith ( " *** 7 " ) or line == " *** RIVER *** " :
2008-12-13 18:52:25 +01:00
lineTypes . append ( " ignore " )
currentStreet = 4
2009-03-19 08:40:40 +01:00
elif isWinLine ( line ) :
lineTypes . append ( " win " )
elif line . startswith ( " Total pot " ) and " Rake " in line :
lineTypes . append ( " rake " )
done = True
elif " *** SHOW DOWN *** " in line or " *** SUMMARY *** " in line :
lineTypes . append ( " ignore " )
#print "in classifyLine, showdown or summary"
2009-03-09 10:56:41 +01:00
elif " shows [ " in line :
2008-12-13 18:52:25 +01:00
lineTypes . append ( " cards " )
else :
raise FpdbError ( " unrecognised linetype in: " + hand [ i ] )
lineStreets . append ( currentStreet )
#end def classifyLines
2009-03-10 15:03:02 +01:00
def convert3B4B ( category , limit_type , actionTypes , actionAmounts ) :
2008-12-13 18:52:25 +01:00
""" calculates the actual bet amounts in the given amount array and changes it accordingly. """
2009-03-10 21:01:35 +01:00
for i in xrange ( len ( actionTypes ) ) :
for j in xrange ( len ( actionTypes [ i ] ) ) :
2008-12-13 18:52:25 +01:00
bets = [ ]
2009-03-10 21:01:35 +01:00
for k in xrange ( len ( actionTypes [ i ] [ j ] ) ) :
2008-12-13 18:52:25 +01:00
if ( actionTypes [ i ] [ j ] [ k ] == " bet " ) :
bets . append ( ( i , j , k ) )
2009-04-05 19:46:41 +02:00
if ( len ( bets ) > = 2 ) :
#print "len(bets) 2 or higher, need to correct it. bets:",bets,"len:",len(bets)
for betNo in reversed ( xrange ( 1 , len ( bets ) ) ) :
amount2 = actionAmounts [ bets [ betNo ] [ 0 ] ] [ bets [ betNo ] [ 1 ] ] [ bets [ betNo ] [ 2 ] ]
amount1 = actionAmounts [ bets [ betNo - 1 ] [ 0 ] ] [ bets [ betNo - 1 ] [ 1 ] ] [ bets [ betNo - 1 ] [ 2 ] ]
actionAmounts [ bets [ betNo ] [ 0 ] ] [ bets [ betNo ] [ 1 ] ] [ bets [ betNo ] [ 2 ] ] = amount2 - amount1
2008-12-13 18:52:25 +01:00
#print "actionAmounts postConvert",actionAmounts
#end def convert3B4B(actionTypes, actionAmounts)
#Corrects the bet amount if the player had to pay blinds
def convertBlindBet ( actionTypes , actionAmounts ) :
i = 0 #setting street to pre-flop
2009-03-10 21:01:35 +01:00
for j in xrange ( len ( actionTypes [ i ] ) ) : #playerloop
2008-12-13 18:52:25 +01:00
blinds = [ ]
bets = [ ]
2009-03-10 21:01:35 +01:00
for k in xrange ( len ( actionTypes [ i ] [ j ] ) ) :
2009-03-26 23:28:03 +01:00
if actionTypes [ i ] [ j ] [ k ] == " blind " :
2008-12-13 18:52:25 +01:00
blinds . append ( ( i , j , k ) )
2009-03-26 23:28:03 +01:00
if blinds and actionTypes [ i ] [ j ] [ k ] == " bet " :
# if (len(blinds)>0 and actionTypes[i][j][k]=="bet"):
2008-12-13 18:52:25 +01:00
bets . append ( ( i , j , k ) )
2009-03-26 23:28:03 +01:00
if len ( bets ) == 1 :
2008-12-13 18:52:25 +01:00
blind_amount = actionAmounts [ blinds [ 0 ] [ 0 ] ] [ blinds [ 0 ] [ 1 ] ] [ blinds [ 0 ] [ 2 ] ]
bet_amount = actionAmounts [ bets [ 0 ] [ 0 ] ] [ bets [ 0 ] [ 1 ] ] [ bets [ 0 ] [ 2 ] ]
actionAmounts [ bets [ 0 ] [ 0 ] ] [ bets [ 0 ] [ 1 ] ] [ bets [ 0 ] [ 2 ] ] = bet_amount - blind_amount
#end def convertBlindBet
#converts the strings in the given array to ints (changes the passed array, no returning). see table design for conversion details
#todo: make this use convertCardValuesBoard
def convertCardValues ( arr ) :
2009-03-09 11:18:12 +01:00
map ( convertCardValuesBoard , arr )
2008-12-13 18:52:25 +01:00
#end def convertCardValues
2009-03-19 08:40:40 +01:00
2009-03-23 22:13:32 +01:00
# a 0-card is one in a stud game that we did not see or was not shown
2009-03-24 03:58:13 +01:00
card_map = { 0 : 0 , " 2 " : 2 , " 3 " : 3 , " 4 " : 4 , " 5 " : 5 , " 6 " : 6 , " 7 " : 7 , " 8 " : 8 , " 9 " : 9 , " T " : 10 , " J " : 11 , " Q " : 12 , " K " : 13 , " A " : 14 }
2008-12-13 18:52:25 +01:00
#converts the strings in the given array to ints (changes the passed array, no returning). see table design for conversion details
def convertCardValuesBoard ( arr ) :
2009-03-10 21:01:35 +01:00
for i in xrange ( len ( arr ) ) :
2009-03-19 02:22:04 +01:00
arr [ i ] = card_map [ arr [ i ] ]
2008-12-13 18:52:25 +01:00
#end def convertCardValuesBoard
#this creates the 2D/3D arrays. manipulates the passed arrays instead of returning.
def createArrays ( category , seats , card_values , card_suits , antes , winnings , rakes , action_types , allIns , action_amounts , actionNos , actionTypeByNo ) :
2009-03-09 11:18:12 +01:00
for i in xrange ( seats ) : #create second dimension arrays
2009-03-19 08:40:40 +01:00
card_values . append ( [ ] )
card_suits . append ( [ ] )
2008-12-13 18:52:25 +01:00
antes . append ( 0 )
winnings . append ( 0 )
rakes . append ( 0 )
2009-03-19 02:22:04 +01:00
streetCount = 4 if category == " holdem " or category == " omahahi " or category == " omahahilo " else 5
2008-12-13 18:52:25 +01:00
2009-03-09 11:41:02 +01:00
for i in xrange ( streetCount ) : #build the first dimension array, for streets
2009-03-19 08:40:40 +01:00
action_types . append ( [ ] )
allIns . append ( [ ] )
action_amounts . append ( [ ] )
actionNos . append ( [ ] )
actionTypeByNo . append ( [ ] )
2009-03-09 11:18:12 +01:00
for j in xrange ( seats ) : #second dimension arrays: players
2009-03-19 08:40:40 +01:00
action_types [ i ] . append ( [ ] )
allIns [ i ] . append ( [ ] )
action_amounts [ i ] . append ( [ ] )
actionNos [ i ] . append ( [ ] )
2009-03-19 02:22:04 +01:00
# if (category=="holdem" or category=="omahahi" or category=="omahahilo"):
# pass
if category == " razz " or category == " studhi " or category == " studhilo " : #need to fill card arrays.
2009-03-09 11:18:12 +01:00
for i in xrange ( seats ) :
2009-03-19 02:22:04 +01:00
for j in xrange ( 7 ) :
2008-12-13 18:52:25 +01:00
card_values [ i ] . append ( 0 )
card_suits [ i ] . append ( " x " )
2009-03-19 02:22:04 +01:00
# else:
# raise FpdbError("invalid category")
2008-12-13 18:52:25 +01:00
#end def createArrays
def fill_board_cards ( board_values , board_suits ) :
#fill up the two board card arrays
while ( len ( board_values ) < 5 ) :
board_values . append ( 0 )
board_suits . append ( " x " )
#end def fill_board_cards
def fillCardArrays ( player_count , base , category , card_values , card_suits ) :
""" fills up the two card arrays """
if ( category == " holdem " ) :
2009-03-19 02:22:04 +01:00
cardCount = 2
2008-12-13 18:52:25 +01:00
elif ( category == " omahahi " or category == " omahahilo " ) :
2009-03-19 02:22:04 +01:00
cardCount = 4
2008-12-13 18:52:25 +01:00
elif base == " stud " :
2009-03-19 02:22:04 +01:00
cardCount = 7
2008-12-13 18:52:25 +01:00
else :
2009-03-19 02:22:04 +01:00
raise fpdb_simple . FpdbError ( " invalid category: " , category )
2008-12-13 18:52:25 +01:00
2009-03-19 02:22:04 +01:00
for i in xrange ( player_count ) :
while ( len ( card_values [ i ] ) < cardCount ) :
2008-12-13 18:52:25 +01:00
card_values [ i ] . append ( 0 )
card_suits [ i ] . append ( " x " )
#end def fillCardArrays
#filters out a player that folded before paying ante or blinds. This should be called
#before calling the actual hand parser. manipulates hand, no return.
2009-03-10 15:03:02 +01:00
def filterAnteBlindFold ( hand ) :
2008-12-13 18:52:25 +01:00
#todo: this'll only get rid of one ante folder, not multiple ones
#todo: in tourneys this should not be removed but
#print "start of filterAnteBlindFold"
pre3rd = [ ]
2009-03-19 08:52:18 +01:00
for i , line in enumerate ( hand ) :
if line . startswith ( " *** 3 " ) or line . startswith ( " *** HOLE " ) :
2009-03-19 02:22:04 +01:00
pre3rd = hand [ 0 : i ]
2008-12-13 18:52:25 +01:00
foldeeName = None
2009-03-19 08:52:18 +01:00
for line in pre3rd :
if line . endswith ( " folds " ) or line . endswith ( " is sitting out " ) or line . endswith ( " stands up " ) : #found ante fold or timeout
pos = line . find ( " folds " )
foldeeName = line [ 0 : pos ]
if pos == - 1 and " in chips) " not in line :
pos = line . find ( " is sitting out " )
foldeeName = line [ 0 : pos ]
if pos == - 1 :
pos = line . find ( " stands up " )
foldeeName = line [ 0 : pos ]
2009-03-19 02:22:04 +01:00
if pos == - 1 :
2009-03-19 08:52:18 +01:00
pos1 = line . find ( " : " ) + 2
pos2 = line . find ( " ( " )
foldeeName = line [ pos1 : pos2 ]
2008-12-13 18:52:25 +01:00
if foldeeName != None :
#print "filterAnteBlindFold, foldeeName:",foldeeName
2009-03-19 08:52:18 +01:00
for i , line in enumerate ( hand ) :
if foldeeName in line :
hand [ i ] = None
2009-03-24 04:49:09 +01:00
return [ line for line in hand if line ]
2008-12-13 18:52:25 +01:00
#end def filterAnteFold
2009-03-19 02:22:04 +01:00
def stripEOLspaces ( str ) :
2009-03-26 22:20:08 +01:00
return str . rstrip ( )
2008-12-13 18:52:25 +01:00
#removes useless lines as well as trailing spaces
2009-03-10 15:03:02 +01:00
def filterCrap ( hand , isTourney ) :
2008-12-13 18:52:25 +01:00
#remove two trailing spaces at end of line
2009-03-26 22:20:08 +01:00
hand = [ line . rstrip ( ) for line in hand ]
2008-12-13 18:52:25 +01:00
#print "hand after trailing space removal in filterCrap:",hand
#general variable position word filter/string filter
2009-03-09 11:18:12 +01:00
for i in xrange ( len ( hand ) ) :
2009-03-26 22:20:08 +01:00
if hand [ i ] . startswith ( " Board [ " ) :
2009-03-19 02:22:04 +01:00
hand [ i ] = False
2009-03-26 22:20:08 +01:00
elif hand [ i ] . find ( " out of hand " ) != - 1 :
2008-12-13 18:52:25 +01:00
hand [ i ] = hand [ i ] [ : - 56 ]
2009-03-26 22:20:08 +01:00
elif " ($0 in chips) " in hand [ i ] :
2009-03-19 02:22:04 +01:00
hand [ i ] = False
2009-03-26 22:20:08 +01:00
elif hand [ i ] == " *** HOLE CARDS *** " :
2009-03-19 02:22:04 +01:00
hand [ i ] = False
2009-03-26 22:20:08 +01:00
elif hand [ i ] . endswith ( " has been disconnected " ) :
2009-03-19 02:22:04 +01:00
hand [ i ] = False
2009-03-26 22:20:08 +01:00
elif hand [ i ] . endswith ( " has requested TIME " ) :
2009-03-19 02:22:04 +01:00
hand [ i ] = False
2009-03-26 22:20:08 +01:00
elif hand [ i ] . endswith ( " has returned " ) :
2009-03-19 02:22:04 +01:00
hand [ i ] = False
2009-03-26 22:20:08 +01:00
elif hand [ i ] . endswith ( " will be allowed to play after the button " ) :
2009-03-19 02:22:04 +01:00
hand [ i ] = False
2009-03-26 22:20:08 +01:00
elif hand [ i ] . endswith ( " has timed out " ) :
2009-03-19 02:22:04 +01:00
hand [ i ] = False
2009-03-26 22:20:08 +01:00
elif hand [ i ] . endswith ( " has timed out while disconnected " ) :
2009-03-19 02:22:04 +01:00
hand [ i ] = False
2009-03-26 22:20:08 +01:00
elif hand [ i ] . endswith ( " has timed out while being disconnected " ) :
2009-03-19 02:22:04 +01:00
hand [ i ] = False
2009-03-26 22:20:08 +01:00
elif hand [ i ] . endswith ( " is connected " ) :
2009-03-19 02:22:04 +01:00
hand [ i ] = False
2009-03-26 22:20:08 +01:00
elif hand [ i ] . endswith ( " is disconnected " ) :
2009-03-19 02:22:04 +01:00
hand [ i ] = False
2009-03-27 16:54:13 +01:00
elif hand [ i ] . find ( " is low with [ " ) != - 1 :
2009-03-19 02:22:04 +01:00
hand [ i ] = False
2009-03-26 22:20:08 +01:00
elif hand [ i ] . endswith ( " mucks " ) :
2009-03-19 02:22:04 +01:00
hand [ i ] = False
2009-03-26 22:20:08 +01:00
elif hand [ i ] . endswith ( " : mucks hand " ) :
2009-03-19 02:22:04 +01:00
hand [ i ] = False
2009-03-26 22:20:08 +01:00
elif hand [ i ] == " No low hand qualified " :
2009-03-19 02:22:04 +01:00
hand [ i ] = False
2009-03-26 22:20:08 +01:00
elif hand [ i ] == " Pair on board - a double bet is allowed " :
2009-03-19 02:22:04 +01:00
hand [ i ] = False
2009-03-26 22:20:08 +01:00
elif " shows " in hand [ i ] and " [ " not in hand [ i ] :
2009-03-19 02:22:04 +01:00
hand [ i ] = False
2009-03-26 22:20:08 +01:00
elif hand [ i ] . startswith ( " The button is in seat # " ) :
2009-03-19 02:22:04 +01:00
hand [ i ] = False
2008-12-13 18:52:25 +01:00
#above is alphabetic, reorder below if bored
2009-03-26 22:20:08 +01:00
elif hand [ i ] . startswith ( " Time has expired " ) :
2009-03-19 02:22:04 +01:00
hand [ i ] = False
2009-03-26 22:20:08 +01:00
elif hand [ i ] . endswith ( " has reconnected " ) :
2009-03-19 02:22:04 +01:00
hand [ i ] = False
2009-03-26 22:20:08 +01:00
elif hand [ i ] . endswith ( " seconds left to act " ) :
2009-03-19 02:22:04 +01:00
hand [ i ] = False
2009-03-26 22:20:08 +01:00
elif hand [ i ] . endswith ( " seconds to reconnect " ) :
2009-03-19 02:22:04 +01:00
hand [ i ] = False
2009-03-26 22:20:08 +01:00
elif hand [ i ] . endswith ( " was removed from the table for failing to post " ) :
2009-03-19 02:22:04 +01:00
hand [ i ] = False
2009-03-26 22:20:08 +01:00
elif " joins the table at seat " in hand [ i ] :
2009-03-19 02:22:04 +01:00
hand [ i ] = False
2008-12-13 18:52:25 +01:00
elif ( hand [ i ] . endswith ( " leaves the table " ) ) :
2009-03-19 02:22:04 +01:00
hand [ i ] = False
2009-03-27 16:54:13 +01:00
elif " is high with " in hand [ i ] :
2009-03-19 02:22:04 +01:00
hand [ i ] = False
2009-03-26 22:20:08 +01:00
elif hand [ i ] . endswith ( " doesn ' t show hand " ) :
2009-03-19 02:22:04 +01:00
hand [ i ] = False
2009-03-26 22:20:08 +01:00
elif hand [ i ] . endswith ( " is being treated as all-in " ) :
2009-03-19 02:22:04 +01:00
hand [ i ] = False
2009-03-26 22:20:08 +01:00
elif " adds $ " in hand [ i ] :
2009-03-19 02:22:04 +01:00
hand [ i ] = False
2009-03-26 22:20:08 +01:00
elif hand [ i ] == " Betting is capped " :
2009-03-19 02:22:04 +01:00
hand [ i ] = False
2008-12-13 18:52:25 +01:00
elif ( hand [ i ] . find ( " said, \" " ) != - 1 ) :
2009-03-19 02:22:04 +01:00
hand [ i ] = False
2009-03-21 13:23:51 +01:00
2009-03-21 18:17:48 +01:00
if isTourney and not hand [ i ] == False :
2008-12-13 18:52:25 +01:00
if ( hand [ i ] . endswith ( " is sitting out " ) and ( not hand [ i ] . startswith ( " Seat " ) ) ) :
2009-03-19 02:22:04 +01:00
hand [ i ] = False
elif hand [ i ] :
2008-12-13 18:52:25 +01:00
if ( hand [ i ] . endswith ( " : sits out " ) ) :
2009-03-19 02:22:04 +01:00
hand [ i ] = False
2008-12-13 18:52:25 +01:00
elif ( hand [ i ] . endswith ( " is sitting out " ) ) :
2009-03-19 02:22:04 +01:00
hand [ i ] = False
hand = [ line for line in hand if line ] # python docs say this is identical to filter(None, list)
2008-12-13 18:52:25 +01:00
#print "done with filterCrap, hand:", hand
return hand
#end filterCrap
#takes a poker float (including , for thousand seperator and converts it to an int
2009-03-26 22:20:08 +01:00
def float2int ( string ) :
pos = string . find ( " , " )
if pos != - 1 : #remove , the thousand seperator
2009-03-19 02:22:04 +01:00
string = " %s %s " % ( string [ 0 : pos ] , string [ pos + 1 : ] )
2009-03-26 22:20:08 +01:00
pos = string . find ( " . " )
if pos != - 1 : #remove decimal point
2009-03-19 02:22:04 +01:00
string = " %s %s " % ( string [ 0 : pos ] , string [ pos + 1 : ] )
2008-12-13 18:52:25 +01:00
result = int ( string )
2009-03-19 02:22:04 +01:00
if pos == - 1 : #no decimal point - was in full dollars - need to multiply with 100
2009-03-26 22:20:08 +01:00
result * = 100
2008-12-13 18:52:25 +01:00
return result
#end def float2int
2009-03-19 02:22:04 +01:00
ActionLines = ( " calls $ " , " : calls " , " brings in for " , " completes it to " , " posts small blind " ,
" posts the small blind " , " posts big blind " , " posts the big blind " ,
" posts small & big blinds " , " posts $ " , " posts a dead " , " bets $ " ,
2009-03-26 22:20:08 +01:00
" : bets " , " raises " )
2008-12-13 18:52:25 +01:00
#returns boolean whether the passed line is an action line
def isActionLine ( line ) :
if ( line . endswith ( " folds " ) ) :
return True
elif ( line . endswith ( " checks " ) ) :
return True
elif ( line . startswith ( " Uncalled bet " ) ) :
return True
2009-03-26 23:28:03 +01:00
return any ( x for x in ActionLines if x in line )
# return bool([ x for x in ActionLines if x in line])
2009-03-19 02:22:04 +01:00
# ret = any(True for searchstr in ActionLines if searchstr in line)
# ret = len( [ x for x in ActionLines if line.find(x) > -1] ) > 0
# ret = any(searchstr in line for searchstr in ActionLines)
2008-12-13 18:52:25 +01:00
#end def isActionLine
#returns whether this is a duplicate
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 ) )
result = cursor . fetchall ( )
if ( len ( result ) > = 1 ) :
raise DuplicateError ( " dupl " )
#end isAlreadyInDB
def isRebuyOrAddon ( topline ) :
""" isRebuyOrAddon not implemented yet """
return False
#end def isRebuyOrAddon
#returns whether the passed topline indicates a tournament or not
def isTourney ( topline ) :
2009-03-19 02:22:04 +01:00
return " Tournament " in topline
2008-12-13 18:52:25 +01:00
#end def isTourney
2009-03-19 02:22:04 +01:00
WinLines = ( " wins the pot " , " ties for the " , " wins side pot " , " wins the low main pot " , " wins the high main pot " ,
2009-03-24 16:23:33 +01:00
" wins the low " ,
2009-03-19 02:22:04 +01:00
" wins the high pot " , " wins the high side pot " , " wins the main pot " , " wins the side pot " , " collected " )
2008-12-13 18:52:25 +01:00
#returns boolean whether the passed line is a win line
def isWinLine ( line ) :
2009-03-26 23:28:03 +01:00
return any ( x for x in WinLines if x in line )
2008-12-13 18:52:25 +01:00
#end def isWinLine
#returns the amount of cash/chips put into the put in the given action line
2009-03-10 15:03:02 +01:00
def parseActionAmount ( line , atype , isTourney ) :
2008-12-13 18:52:25 +01:00
#if (line.endswith(" and is all-in")):
# line=line[:-14]
#elif (line.endswith(", and is all in")):
# line=line[:-15]
if line . endswith ( " , and is capped " ) : #ideally we should recognise this as an all-in if category is capXl
line = line [ : - 15 ]
if line . endswith ( " and is capped " ) :
line = line [ : - 14 ]
2009-03-19 02:22:04 +01:00
if atype == " fold " or atype == " check " :
amount = 0
elif atype == " unbet " :
2009-03-19 16:27:08 +01:00
pos1 = line . find ( " $ " ) + 1
if pos1 == 0 :
pos1 = line . find ( " ( " ) + 1
pos2 = line . find ( " ) " )
amount = float2int ( line [ pos1 : pos2 ] )
elif atype == " bet " and line . find ( " : raises $ " ) != - 1 and line . find ( " to $ " ) != - 1 :
2008-12-13 18:52:25 +01:00
pos = line . find ( " to $ " ) + 4
amount = float2int ( line [ pos : ] )
else :
if not isTourney :
2009-03-19 03:31:39 +01:00
pos = line . rfind ( " $ " ) + 1
2008-12-13 18:52:25 +01:00
#print "parseActionAmount, line:", line, "line[pos:]:", line[pos:]
2009-03-19 03:31:39 +01:00
amount = float2int ( line [ pos : ] )
2008-12-13 18:52:25 +01:00
else :
#print "line:"+line+"EOL"
2009-03-19 03:31:39 +01:00
pos = line . rfind ( " " ) + 1
2008-12-13 18:52:25 +01:00
#print "pos:",pos
#print "pos of 20:", line.find("20")
2009-03-19 03:31:39 +01:00
amount = int ( line [ pos : ] )
2008-12-13 18:52:25 +01:00
2009-03-19 03:31:39 +01:00
if atype == " unbet " :
amount * = - 1
2008-12-13 18:52:25 +01:00
return amount
#end def parseActionAmount
#doesnt return anything, simply changes the passed arrays action_types and
# action_amounts. For stud this expects numeric streets (3-7), for
# holdem/omaha it expects predeal, preflop, flop, turn or river
2009-03-10 15:03:02 +01:00
def parseActionLine ( base , isTourney , line , street , playerIDs , names , action_types , allIns , action_amounts , actionNos , actionTypeByNo ) :
2009-03-19 03:31:39 +01:00
if street == " predeal " or street == " preflop " :
street = 0
elif street == " flop " :
street = 1
elif street == " turn " :
street = 2
elif street == " river " :
street = 3
2008-12-13 18:52:25 +01:00
2009-03-19 03:31:39 +01:00
nextActionNo = 0
2009-03-09 11:41:02 +01:00
for player in xrange ( len ( actionNos [ street ] ) ) :
for count in xrange ( len ( actionNos [ street ] [ player ] ) ) :
2008-12-13 18:52:25 +01:00
if actionNos [ street ] [ player ] [ count ] > = nextActionNo :
nextActionNo = actionNos [ street ] [ player ] [ count ] + 1
2009-03-19 03:31:39 +01:00
( line , allIn ) = goesAllInOnThisLine ( line )
atype = parseActionType ( line )
playerno = recognisePlayerNo ( line , names , atype )
2009-03-27 16:54:13 +01:00
amount = parseActionAmount ( line , atype , isTourney )
2008-12-13 18:52:25 +01:00
action_types [ street ] [ playerno ] . append ( atype )
allIns [ street ] [ playerno ] . append ( allIn )
action_amounts [ street ] [ playerno ] . append ( amount )
actionNos [ street ] [ playerno ] . append ( nextActionNo )
tmp = ( playerIDs [ playerno ] , atype )
actionTypeByNo [ street ] . append ( tmp )
#end def parseActionLine
def goesAllInOnThisLine ( line ) :
""" returns whether the player went all-in on this line and removes the all-in text from the line. """
2009-03-19 03:31:39 +01:00
isAllIn = False
2008-12-13 18:52:25 +01:00
if ( line . endswith ( " and is all-in " ) ) :
2009-03-19 03:31:39 +01:00
line = line [ : - 14 ]
isAllIn = True
2008-12-13 18:52:25 +01:00
elif ( line . endswith ( " , and is all in " ) ) :
2009-03-19 03:31:39 +01:00
line = line [ : - 15 ]
isAllIn = True
2008-12-13 18:52:25 +01:00
return ( line , isAllIn )
#end def goesAllInOnThisLine
#returns the action type code (see table design) of the given action line
2009-04-09 15:21:52 +02:00
ActionTypes = { ' brings in for ' : " blind " ,
' posts $ ' : " blind " ,
' posts a dead ' : " blind " ,
' posts the small blind of $ ' : " blind " ,
' : posts big blind ' : " blind " ,
' : posts small blind ' : " blind " ,
' posts the big blind of $ ' : " blind " ,
' : posts small & big blinds $ ' : " blind " ,
' : posts small blind $ ' : " blind " ,
' calls ' : " call " ,
' completes it to ' : " bet " ,
' bets ' : " bet " ,
' raises ' : " bet "
2009-03-26 22:20:08 +01:00
}
2008-12-13 18:52:25 +01:00
def parseActionType ( line ) :
if ( line . startswith ( " Uncalled bet " ) ) :
return " unbet "
2009-03-26 22:27:52 +01:00
elif ( line . endswith ( " folds " ) ) :
2008-12-13 18:52:25 +01:00
return " fold "
2009-03-26 22:27:52 +01:00
elif ( line . endswith ( " checks " ) ) :
2008-12-13 18:52:25 +01:00
return " check "
else :
2009-03-26 22:20:08 +01:00
for x in ActionTypes :
if x in line :
return ActionTypes [ x ]
raise FpdbError ( " failed to recognise actiontype in parseActionLine in: " + line )
2008-12-13 18:52:25 +01:00
#end def parseActionType
#parses the ante out of the given line and checks which player paid it, updates antes accordingly.
2009-03-10 15:03:02 +01:00
def parseAnteLine ( line , isTourney , names , antes ) :
2009-03-19 03:31:39 +01:00
for i , name in enumerate ( names ) :
if line . startswith ( name . encode ( " latin-1 " ) ) :
pos = line . rfind ( " $ " ) + 1
2008-12-13 18:52:25 +01:00
if not isTourney :
2009-03-19 03:31:39 +01:00
antes [ i ] + = float2int ( line [ pos : ] )
2008-12-13 18:52:25 +01:00
else :
2009-03-19 03:31:39 +01:00
if " all-in " not in line :
pos = line . rfind ( " " ) + 1
antes [ i ] + = int ( line [ pos : ] )
2008-12-13 18:52:25 +01:00
else :
2009-03-19 03:31:39 +01:00
pos1 = line . rfind ( " ante " ) + 5
pos2 = line . find ( " " , pos1 )
antes [ i ] + = int ( line [ pos1 : pos2 ] )
2008-12-13 18:52:25 +01:00
#print "parseAnteLine line: ", line, "antes[i]", antes[i], "antes", antes
#end def parseAntes
#returns the buyin of a tourney in cents
def parseBuyin ( topline ) :
2009-03-19 03:31:39 +01:00
pos1 = topline . find ( " $ " ) + 1
pos2 = topline . find ( " + " )
2008-12-13 18:52:25 +01:00
return float2int ( topline [ pos1 : pos2 ] )
#end def parseBuyin
#parses a card line and changes the passed arrays accordingly
#todo: reorganise this messy method
2009-03-10 15:03:02 +01:00
def parseCardLine ( category , street , line , names , cardValues , cardSuits , boardValues , boardSuits ) :
2009-03-19 03:31:39 +01:00
if line . startswith ( " Dealt to " ) or " shows [ " in line or " mucked [ " in line :
playerNo = recognisePlayerNo ( line , names , " card " ) #anything but unbet will be ok for that string
2008-12-13 18:52:25 +01:00
2009-03-19 03:31:39 +01:00
pos = line . rfind ( " [ " ) + 1
if category == " holdem " :
2008-12-13 18:52:25 +01:00
for i in ( pos , pos + 3 ) :
cardValues [ playerNo ] . append ( line [ i : i + 1 ] )
cardSuits [ playerNo ] . append ( line [ i + 1 : i + 2 ] )
2009-03-19 03:31:39 +01:00
if len ( cardValues [ playerNo ] ) != 2 :
2008-12-13 18:52:25 +01:00
if cardValues [ playerNo ] [ 0 ] == cardValues [ playerNo ] [ 2 ] and cardSuits [ playerNo ] [ 1 ] == cardSuits [ playerNo ] [ 3 ] : #two tests will do
cardValues [ playerNo ] = cardValues [ playerNo ] [ 0 : 2 ]
cardSuits [ playerNo ] = cardSuits [ playerNo ] [ 0 : 2 ]
else :
print " line: " , line , " cardValues[playerNo]: " , cardValues [ playerNo ]
raise FpdbError ( " read too many/too few holecards in parseCardLine " )
2009-03-19 03:31:39 +01:00
elif category == " omahahi " or category == " omahahilo " :
2008-12-13 18:52:25 +01:00
for i in ( pos , pos + 3 , pos + 6 , pos + 9 ) :
cardValues [ playerNo ] . append ( line [ i : i + 1 ] )
cardSuits [ playerNo ] . append ( line [ i + 1 : i + 2 ] )
if ( len ( cardValues [ playerNo ] ) != 4 ) :
if cardValues [ playerNo ] [ 0 ] == cardValues [ playerNo ] [ 4 ] and cardSuits [ playerNo ] [ 3 ] == cardSuits [ playerNo ] [ 7 ] : #two tests will do
cardValues [ playerNo ] = cardValues [ playerNo ] [ 0 : 4 ]
cardSuits [ playerNo ] = cardSuits [ playerNo ] [ 0 : 4 ]
else :
print " line: " , line , " cardValues[playerNo]: " , cardValues [ playerNo ]
raise FpdbError ( " read too many/too few holecards in parseCardLine " )
2009-03-19 03:31:39 +01:00
elif category == " razz " or category == " studhi " or category == " studhilo " :
if " shows " not in line and " mucked " not in line :
2008-12-13 18:52:25 +01:00
#print "parseCardLine(in stud if), street:", street
if line [ pos + 2 ] == " ] " : #-> not (hero and 3rd street)
cardValues [ playerNo ] [ street + 2 ] = line [ pos : pos + 1 ]
cardSuits [ playerNo ] [ street + 2 ] = line [ pos + 1 : pos + 2 ]
else :
#print "hero card1:", line[pos:pos+2], "hero card2:", line[pos+3:pos+5], "hero card3:", line[pos+6:pos+8],
cardValues [ playerNo ] [ street ] = line [ pos : pos + 1 ]
cardSuits [ playerNo ] [ street ] = line [ pos + 1 : pos + 2 ]
cardValues [ playerNo ] [ street + 1 ] = line [ pos + 3 : pos + 4 ]
cardSuits [ playerNo ] [ street + 1 ] = line [ pos + 4 : pos + 5 ]
cardValues [ playerNo ] [ street + 2 ] = line [ pos + 6 : pos + 7 ]
cardSuits [ playerNo ] [ street + 2 ] = line [ pos + 7 : pos + 8 ]
else :
#print "parseCardLine(in stud else), street:", street
cardValues [ playerNo ] [ 0 ] = line [ pos : pos + 1 ]
cardSuits [ playerNo ] [ 0 ] = line [ pos + 1 : pos + 2 ]
pos + = 3
cardValues [ playerNo ] [ 1 ] = line [ pos : pos + 1 ]
cardSuits [ playerNo ] [ 1 ] = line [ pos + 1 : pos + 2 ]
if street == 4 :
pos = pos = line . rfind ( " ] " ) - 2
cardValues [ playerNo ] [ 6 ] = line [ pos : pos + 1 ]
cardSuits [ playerNo ] [ 6 ] = line [ pos + 1 : pos + 2 ]
#print "cardValues:", cardValues
#print "cardSuits:", cardSuits
else :
print " line: " , line , " street: " , street
raise FpdbError ( " invalid category " )
#print "end of parseCardLine/playercards, cardValues:",cardValues
elif ( line . startswith ( " *** FLOP *** " ) ) :
pos = line . find ( " [ " ) + 1
for i in ( pos , pos + 3 , pos + 6 ) :
boardValues . append ( line [ i : i + 1 ] )
boardSuits . append ( line [ i + 1 : i + 2 ] )
#print boardValues
elif ( line . startswith ( " *** TURN *** " ) or line . startswith ( " *** RIVER *** " ) ) :
pos = line . find ( " [ " ) + 1
pos = line . find ( " [ " , pos + 1 ) + 1
boardValues . append ( line [ pos : pos + 1 ] )
boardSuits . append ( line [ pos + 1 : pos + 2 ] )
#print boardValues
else :
raise FpdbError ( " unrecognised line: " + line )
#end def parseCardLine
2009-03-10 15:03:02 +01:00
def parseCashesAndSeatNos ( lines ) :
2008-12-13 18:52:25 +01:00
""" parses the startCashes and seatNos of each player out of the given lines and returns them as a dictionary of two arrays """
cashes = [ ]
seatNos = [ ]
2009-03-09 11:18:12 +01:00
for i in xrange ( len ( lines ) ) :
2008-12-13 18:52:25 +01:00
pos2 = lines [ i ] . find ( " : " )
seatNos . append ( int ( lines [ i ] [ 5 : pos2 ] ) )
pos1 = lines [ i ] . rfind ( " ($ " ) + 2
if pos1 == 1 : #for tourneys - it's 1 instead of -1 due to adding 2 above
pos1 = lines [ i ] . rfind ( " ( " ) + 1
2009-03-10 15:03:02 +01:00
pos2 = lines [ i ] . find ( " in chips " )
2008-12-13 18:52:25 +01:00
cashes . append ( float2int ( lines [ i ] [ pos1 : pos2 ] ) )
return { ' startCashes ' : cashes , ' seatNos ' : seatNos }
#end def parseCashesAndSeatNos
#returns the buyin of a tourney in cents
def parseFee ( topline ) :
pos1 = topline . find ( " $ " ) + 1
pos1 = topline . find ( " $ " , pos1 ) + 1
pos2 = topline . find ( " " , pos1 )
return float2int ( topline [ pos1 : pos2 ] )
#end def parsefee
#returns a datetime object with the starttime indicated in the given topline
2009-03-10 15:03:02 +01:00
def parseHandStartTime ( topline ) :
2008-12-13 18:52:25 +01:00
#convert x:13:35 to 0x:13:35
counter = 0
2009-03-26 22:20:08 +01:00
while counter < 10 :
pos = topline . find ( " %d : " % counter )
if pos != - 1 :
topline = " %s 0 %s " % ( topline [ 0 : pos + 1 ] , topline [ pos + 1 : ] )
break
counter + = 1
2008-12-13 18:52:25 +01:00
isUTC = False
2009-03-09 10:21:22 +01:00
if topline . find ( " UTC " ) != - 1 :
pos1 = topline . find ( " - " ) + 2
pos2 = topline . find ( " UTC " )
tmp = topline [ pos1 : pos2 ]
isUTC = True
2008-12-13 18:52:25 +01:00
else :
2009-03-09 10:21:22 +01:00
tmp = topline
#print "parsehandStartTime, tmp:", tmp
pos = tmp . find ( " - " ) + 2
tmp = tmp [ pos : ]
#Need to match either
# 2008/09/07 06:23:14 ET or
# 2008/08/17 - 01:14:43 (ET) or
# 2008/11/12 9:33:31 CET [2008/11/12 3:33:31 ET]
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 )
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 ' ) ) )
2008-12-13 18:52:25 +01:00
2009-03-09 10:21:22 +01:00
if not isUTC : #these use US ET
2008-12-13 18:52:25 +01:00
result + = datetime . timedelta ( hours = 5 )
return result
#end def parseHandStartTime
#parses the names out of the given lines and returns them as an array
2009-03-26 22:27:52 +01:00
def findName ( line ) :
pos1 = line . find ( " : " ) + 2
pos2 = line . rfind ( " ( " ) - 1
return unicode ( line [ pos1 : pos2 ] , " latin-1 " )
2008-12-13 18:52:25 +01:00
def parseNames ( lines ) :
2009-03-26 22:27:52 +01:00
return [ findName ( line ) for line in lines ]
2008-12-13 18:52:25 +01:00
#end def parseNames
2009-03-19 03:31:39 +01:00
def parsePositions ( hand , names ) :
2009-03-26 22:20:08 +01:00
positions = [ - 1 for i in names ]
sb , bb = - 1 , - 1
2009-03-19 03:31:39 +01:00
#find blinds
2009-03-26 22:20:08 +01:00
for line in hand :
if sb == - 1 and " small blind " in line and " dead small blind " not in line :
sb = line
if bb == - 1 and " big blind " in line and " dead big blind " not in line :
bb = line
2008-12-18 21:40:28 +01:00
2009-03-19 03:31:39 +01:00
#identify blinds
#print "parsePositions before recognising sb/bb. names:",names
2009-03-26 22:20:08 +01:00
sbExists = True
if sb != - 1 :
sb = recognisePlayerNo ( sb , names , " bet " )
2009-03-19 03:31:39 +01:00
else :
2009-03-26 22:20:08 +01:00
sbExists = False
if bb != - 1 :
bb = recognisePlayerNo ( bb , names , " bet " )
2009-03-19 03:31:39 +01:00
2009-05-17 01:06:53 +02:00
# print "sb = ", sb, "bb = ", bb
2009-03-26 22:20:08 +01:00
if bb == sb : # if big and small are same, then don't duplicate the small
2009-03-19 03:31:39 +01:00
sbExists = False
sb = - 1
#write blinds into array
2009-03-26 22:20:08 +01:00
if sbExists :
2009-03-19 03:31:39 +01:00
positions [ sb ] = " S "
positions [ bb ] = " B "
2008-12-18 21:40:28 +01:00
2009-03-19 03:31:39 +01:00
#fill up rest of array
2009-03-26 22:20:08 +01:00
if sbExists :
arraypos = sb - 1
2009-03-19 03:31:39 +01:00
else :
2009-03-26 22:20:08 +01:00
arraypos = bb - 1
2009-03-19 03:31:39 +01:00
distFromBtn = 0
2009-03-26 22:20:08 +01:00
while arraypos > = 0 and arraypos != bb :
2009-03-19 03:31:39 +01:00
#print "parsePositions first while, arraypos:",arraypos,"positions:",positions
2009-03-26 22:20:08 +01:00
positions [ arraypos ] = distFromBtn
arraypos - = 1
distFromBtn + = 1
2008-12-18 21:40:28 +01:00
2009-03-19 03:31:39 +01:00
# 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
2009-05-17 01:06:53 +02:00
### RHH - Changed to set the null seats before BB to "9"
2009-03-19 03:31:39 +01:00
if sbExists :
i = sb - 1
else :
i = bb - 1
while positions [ i ] < 0 :
positions [ i ] = 9
i - = 1
arraypos = len ( names ) - 1
if ( bb != 0 or ( bb == 0 and sbExists == False ) or ( bb == 1 and sb != arraypos ) ) :
while ( arraypos > bb and arraypos > sb ) :
positions [ arraypos ] = distFromBtn
arraypos - = 1
distFromBtn + = 1
2009-03-26 22:27:52 +01:00
if any ( p == - 1 for p in positions ) :
2009-03-26 22:20:08 +01:00
print " parsePositions names: " , names
print " result: " , positions
raise FpdbError ( " failed to read positions " )
2009-05-17 01:06:53 +02:00
# print str(positions), "\n"
2009-03-19 03:31:39 +01:00
return positions
2008-12-13 18:52:25 +01:00
#end def parsePositions
#simply parses the rake amount and returns it as an int
def parseRake ( line ) :
pos = line . find ( " Rake " ) + 6
rake = float2int ( line [ pos : ] )
return rake
#end def parseRake
def parseSiteHandNo ( topline ) :
""" returns the hand no assigned by the poker site """
pos1 = topline . find ( " # " ) + 1
pos2 = topline . find ( " : " )
return topline [ pos1 : pos2 ]
#end def parseSiteHandNo
2009-03-10 15:03:02 +01:00
def parseTableLine ( base , line ) :
2008-12-13 18:52:25 +01:00
""" returns a dictionary with maxSeats and tableName """
2009-03-09 10:21:22 +01:00
pos1 = line . find ( ' \' ' ) + 1
pos2 = line . find ( ' \' ' , pos1 )
#print "table:",line[pos1:pos2]
pos3 = pos2 + 2
pos4 = line . find ( " -max " )
#print "seats:",line[pos3:pos4]
return { ' maxSeats ' : int ( line [ pos3 : pos4 ] ) , ' tableName ' : line [ pos1 : pos2 ] }
2008-12-13 18:52:25 +01:00
#end def parseTableLine
#returns the hand no assigned by the poker site
def parseTourneyNo ( topline ) :
pos1 = topline . find ( " Tournament # " ) + 12
pos2 = topline . find ( " , " , pos1 )
#print "parseTourneyNo pos1:",pos1," pos2:",pos2, " result:",topline[pos1:pos2]
return topline [ pos1 : pos2 ]
#end def parseTourneyNo
#parses a win/collect line. manipulates the passed array winnings, no explicit return
2009-03-10 15:03:02 +01:00
def parseWinLine ( line , names , winnings , isTourney ) :
2008-12-13 18:52:25 +01:00
#print "parseWinLine: line:",line
2009-03-26 22:20:08 +01:00
for i , n in enumerate ( names ) :
n = n . encode ( " latin-1 " )
if line . startswith ( n ) :
2008-12-13 18:52:25 +01:00
if isTourney :
2009-03-26 22:20:08 +01:00
pos1 = line . rfind ( " collected " ) + 10
2009-03-27 16:54:13 +01:00
pos2 = line . find ( " " , pos1 )
2008-12-13 18:52:25 +01:00
winnings [ i ] + = int ( line [ pos1 : pos2 ] )
else :
2009-03-26 22:20:08 +01:00
pos1 = line . rfind ( " $ " ) + 1
2009-03-27 16:54:13 +01:00
pos2 = line . find ( " " , pos1 )
2009-03-26 22:20:08 +01:00
winnings [ i ] + = float2int ( line [ pos1 : pos2 ] )
2008-12-13 18:52:25 +01:00
#end def parseWinLine
#returns the category (as per database) string for the given line
def recogniseCategory ( line ) :
2009-03-19 03:31:39 +01:00
if " Razz " in line :
2008-12-13 18:52:25 +01:00
return " razz "
2009-03-19 03:31:39 +01:00
elif " Hold ' em " in line :
2008-12-13 18:52:25 +01:00
return " holdem "
2009-03-19 03:31:39 +01:00
elif " Omaha " in line :
if " Hi/Lo " not in line and " H/L " not in line :
return " omahahi "
else :
return " omahahilo "
elif " Stud " in line :
if " Hi/Lo " not in line and " H/L " not in line :
return " studhi "
else :
return " studhilo "
2008-12-13 18:52:25 +01:00
else :
raise FpdbError ( " failed to recognise category, line: " + line )
#end def recogniseCategory
#returns the int for the gametype_id for the given line
def recogniseGametypeID ( backend , db , cursor , topline , smallBlindLine , site_id , category , isTourney ) : #todo: this method is messy
#if (topline.find("HORSE")!=-1):
# raise FpdbError("recogniseGametypeID: HORSE is not yet supported.")
#note: the below variable names small_bet and big_bet are misleading, in NL/PL they mean small/big blind
if isTourney :
type = " tour "
pos1 = topline . find ( " ( " ) + 1
if ( topline [ pos1 ] == " H " or topline [ pos1 ] == " O " or topline [ pos1 ] == " R " or topline [ pos1 ] == " S " or topline [ pos1 + 2 ] == " C " ) :
pos1 = topline . find ( " ( " , pos1 ) + 1
pos2 = topline . find ( " / " , pos1 )
small_bet = int ( topline [ pos1 : pos2 ] )
else :
type = " ring "
pos1 = topline . find ( " $ " ) + 1
pos2 = topline . find ( " /$ " )
small_bet = float2int ( topline [ pos1 : pos2 ] )
pos1 = pos2 + 2
if isTourney :
pos1 - = 1
2009-03-09 10:21:22 +01:00
pos2 = topline . find ( " ) " )
2008-12-13 18:52:25 +01:00
if pos2 < = pos1 :
pos2 = topline . find ( " ) " , pos1 )
if isTourney :
big_bet = int ( topline [ pos1 : pos2 ] )
else :
big_bet = float2int ( topline [ pos1 : pos2 ] )
if ( topline . find ( " No Limit " ) != - 1 ) :
limit_type = " nl "
if ( topline . find ( " Cap No " ) != - 1 ) :
limit_type = " cn "
elif ( topline . find ( " Pot Limit " ) != - 1 ) :
limit_type = " pl "
if ( topline . find ( " Cap Pot " ) != - 1 ) :
limit_type = " cp "
else :
limit_type = " fl "
#print "recogniseGametypeID small_bet/blind:",small_bet,"big bet/blind:", big_bet,"limit type:",limit_type
if ( limit_type == " fl " ) :
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 :
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 ( )
#print "recgt1 result=",result
#ret=result[0]
#print "recgt1 ret=",ret
#print "tried SELECTing gametypes.id, result:",result
try :
len ( result )
except TypeError :
if category == " holdem " or category == " omahahi " or category == " omahahilo " :
base = " hold "
else :
base = " stud "
if category == " holdem " or category == " omahahi " or category == " studhi " :
hiLo = ' h '
elif category == " razz " :
hiLo = ' l '
else :
hiLo = ' s '
if ( limit_type == " fl " ) :
big_blind = small_bet
if base == " hold " :
if smallBlindLine == topline :
raise FpdbError ( " invalid small blind line " )
elif isTourney :
pos = smallBlindLine . rfind ( " " ) + 1
small_blind = int ( smallBlindLine [ pos : ] )
else :
pos = smallBlindLine . rfind ( " $ " ) + 1
small_blind = float2int ( smallBlindLine [ pos : ] )
else :
small_blind = 0
cursor . execute ( """ INSERT INTO Gametypes(siteId, type, base, category, limitType
, 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 ) )
#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 :
cursor . execute ( """ INSERT INTO Gametypes(siteId, type, base, category, limitType
, 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
#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=(db.insert_id(),)
result = ( getLastInsertId ( backend , db , cursor ) , )
return result [ 0 ]
#end def recogniseGametypeID
def recogniseTourneyTypeId ( cursor , siteId , buyin , fee , knockout , rebuyOrAddon ) :
cursor . execute ( " SELECT id FROM TourneyTypes WHERE siteId= %s AND buyin= %s AND fee= %s AND knockout= %s AND rebuyOrAddon= %s " , ( siteId , buyin , fee , knockout , rebuyOrAddon ) )
result = cursor . fetchone ( )
#print "tried SELECTing gametypes.id, result:",result
try :
len ( result )
except TypeError : #this means we need to create a new entry
cursor . execute ( """ INSERT INTO TourneyTypes (siteId, buyin, fee, knockout, rebuyOrAddon) VALUES ( %s , %s , %s , %s , %s ) """ , ( siteId , buyin , fee , knockout , rebuyOrAddon ) )
cursor . execute ( " SELECT id FROM TourneyTypes WHERE siteId= %s AND buyin= %s AND fee= %s AND knockout= %s AND rebuyOrAddon= %s " , ( siteId , buyin , fee , knockout , rebuyOrAddon ) )
result = cursor . fetchone ( )
return result [ 0 ]
#end def recogniseTourneyTypeId
#returns the SQL ids of the names given in an array
2009-03-27 06:19:04 +01:00
# TODO: if someone gets industrious, they should make the parts that use the output of this function deal with a dict
# { playername: id } instead of depending on it's relation to the positions list
# then this can be reduced in complexity a bit
2009-05-06 00:57:20 +02:00
#def recognisePlayerIDs(cursor, names, site_id):
2009-05-07 22:17:14 +02:00
# result = []
# for i in xrange(len(names)):
# cursor.execute ("SELECT id FROM Players WHERE name=%s", (names[i],))
# tmp=cursor.fetchall()
# if (len(tmp)==0): #new player
# cursor.execute ("INSERT INTO Players (name, siteId) VALUES (%s, %s)", (names[i], site_id))
# #print "Number of players rows inserted: %d" % cursor.rowcount
# cursor.execute ("SELECT id FROM Players WHERE name=%s", (names[i],))
# tmp=cursor.fetchall()
# #print "recognisePlayerIDs, names[i]:",names[i],"tmp:",tmp
# result.append(tmp[0][0])
# return result
def recognisePlayerIDs ( cursor , names , site_id ) :
q = " SELECT name,id FROM Players WHERE name= %s " % " OR name= " . join ( [ " %s " for n in names ] )
cursor . execute ( q , names ) # get all playerids by the names passed in
ids = dict ( cursor . fetchall ( ) ) # convert to dict
if len ( ids ) != len ( names ) :
notfound = [ n for n in names if n not in ids ] # make list of names not in database
if notfound : # insert them into database
cursor . executemany ( " INSERT INTO Players (name, siteId) VALUES ( %s , " + str ( site_id ) + " ) " , [ ( n , ) for n in notfound ] )
q2 = " SELECT name,id FROM Players WHERE name= %s " % " OR name= " . join ( [ " %s " for n in notfound ] )
cursor . execute ( q2 , notfound ) # get their new ids
tmp = cursor . fetchall ( )
for n , id in tmp : # put them all into the same dict
ids [ n ] = id
# return them in the SAME ORDER that they came in in the names argument, rather than the order they came out of the DB
return [ ids [ n ] for n in names ]
2008-12-13 18:52:25 +01:00
#end def recognisePlayerIDs
2009-03-27 06:19:04 +01:00
2009-06-07 21:07:18 +02:00
# Here's a version that would work if it wasn't for the fact that it needs to have the output in the same order as input
# this version could also be improved upon using list comprehensions, etc
#def recognisePlayerIDs(cursor, names, site_id):
# result = []
# notfound = []
# cursor.execute("SELECT name,id FROM Players WHERE name='%s'" % "' OR name='".join(names))
# tmp = dict(cursor.fetchall())
# for n in names:
# if n not in tmp:
# notfound.append(n)
# else:
# result.append(tmp[n])
# if notfound:
# cursor.executemany("INSERT INTO Players (name, siteId) VALUES (%s, "+str(site_id)+")", (notfound))
# cursor.execute("SELECT id FROM Players WHERE name='%s'" % "' OR name='".join(notfound))
# tmp = cursor.fetchall()
# for n in tmp:
# result.append(n[0])
#
# return result
2008-12-13 18:52:25 +01:00
#recognises the name in the given line and returns its array position in the given array
def recognisePlayerNo ( line , names , atype ) :
#print "recogniseplayerno, names:",names
2009-03-10 21:01:35 +01:00
for i in xrange ( len ( names ) ) :
2008-12-13 18:52:25 +01:00
if ( atype == " unbet " ) :
if ( line . endswith ( names [ i ] . encode ( " latin-1 " ) ) ) :
return ( i )
elif ( line . startswith ( " Dealt to " ) ) :
#print "recognisePlayerNo, card precut, line:",line
tmp = line [ 9 : ]
#print "recognisePlayerNo, card postcut, tmp:",tmp
if ( tmp . startswith ( names [ i ] . encode ( " latin-1 " ) ) ) :
return ( i )
elif ( line . startswith ( " Seat " ) ) :
if ( line . startswith ( " Seat 10 " ) ) :
tmp = line [ 9 : ]
else :
tmp = line [ 8 : ]
if ( tmp . startswith ( names [ i ] . encode ( " latin-1 " ) ) ) :
return ( i )
else :
if ( line . startswith ( names [ i ] . encode ( " latin-1 " ) ) ) :
return ( i )
#if we're here we mustve failed
raise FpdbError ( " failed to recognise player in: " + line + " atype: " + atype )
#end def recognisePlayerNo
#removes trailing \n from the given array
def removeTrailingEOL ( arr ) :
2009-03-09 11:41:02 +01:00
for i in xrange ( len ( arr ) ) :
2008-12-13 18:52:25 +01:00
if ( arr [ i ] . endswith ( " \n " ) ) :
#print "arr[i] before removetrailingEOL:", arr[i]
arr [ i ] = arr [ i ] [ : - 1 ]
#print "arr[i] after removetrailingEOL:", arr[i]
return arr
#end def removeTrailingEOL
#splits the rake according to the proportion of pot won. manipulates the second passed array.
def splitRake ( winnings , rakes , totalRake ) :
winnercnt = 0
totalWin = 0
2009-03-09 11:41:02 +01:00
for i in xrange ( len ( winnings ) ) :
2008-12-13 18:52:25 +01:00
if winnings [ i ] != 0 :
winnercnt + = 1
totalWin + = winnings [ i ]
firstWinner = i
if winnercnt == 1 :
rakes [ firstWinner ] = totalRake
else :
totalWin = float ( totalWin )
2009-03-09 11:41:02 +01:00
for i in xrange ( len ( winnings ) ) :
2008-12-13 18:52:25 +01:00
if winnings [ i ] != 0 :
winPortion = winnings [ i ] / totalWin
rakes [ i ] = totalRake * winPortion
#end def splitRake
def storeActions ( cursor , handsPlayersIds , actionTypes , allIns , actionAmounts , actionNos ) :
#stores into table hands_actions
#print "start of storeActions, actionNos:",actionNos
#print " action_amounts:",action_amounts
2009-03-21 18:59:47 +01:00
inserts = [ ]
2009-03-10 21:01:35 +01:00
for i in xrange ( len ( actionTypes ) ) : #iterate through streets
for j in xrange ( len ( actionTypes [ i ] ) ) : #iterate through names
for k in xrange ( len ( actionTypes [ i ] [ j ] ) ) : #iterate through individual actions of that player on that street
2009-03-21 20:07:08 +01:00
# Add inserts into a list and let
inserts = inserts + [ ( handsPlayersIds [ j ] , i , actionNos [ i ] [ j ] [ k ] , actionTypes [ i ] [ j ] [ k ] , allIns [ i ] [ j ] [ k ] , actionAmounts [ i ] [ j ] [ k ] ) ]
2009-03-21 18:59:47 +01:00
2009-05-17 18:26:05 +02:00
cursor . executemany ( " INSERT INTO HandsActions (handsPlayerId, street, actionNo, action, allIn, amount) VALUES ( %s , %s , %s , %s , %s , %s ) " , inserts )
2008-12-13 18:52:25 +01:00
#end def storeActions
def store_board_cards ( cursor , hands_id , board_values , board_suits ) :
#stores into table board_cards
cursor . execute ( """ INSERT INTO BoardCards (handId, card1Value, card1Suit,
card2Value , card2Suit , card3Value , card3Suit , card4Value , card4Suit ,
card5Value , card5Suit ) VALUES ( % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s ) """ ,
( hands_id , board_values [ 0 ] , board_suits [ 0 ] , board_values [ 1 ] , board_suits [ 1 ] ,
board_values [ 2 ] , board_suits [ 2 ] , board_values [ 3 ] , board_suits [ 3 ] ,
board_values [ 4 ] , board_suits [ 4 ] ) )
#end def store_board_cards
def storeHands ( backend , conn , cursor , site_hand_no , gametype_id
2009-05-21 05:26:00 +02:00
, hand_start_time , names , tableName , maxSeats , hudCache ) :
#stores into table hands:
cursor . execute ( """ INSERT INTO Hands
( siteHandNo , gametypeId , handStart , seats , tableName , importTime , maxSeats
, playersVpi , playersAtStreet1 , playersAtStreet2
, playersAtStreet3 , playersAtStreet4 , playersAtShowdown
, street0Raises , street1Raises , street2Raises
, street3Raises , street4Raises , street1Pot
, street2Pot , street3Pot , street4Pot
, showdownPot
)
VALUES
( % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s )
"""
, ( site_hand_no , gametype_id , hand_start_time , len ( names ) , tableName , datetime . datetime . today ( ) , maxSeats
, hudCache [ ' playersVpi ' ] , hudCache [ ' playersAtStreet1 ' ] , hudCache [ ' playersAtStreet2 ' ]
, hudCache [ ' playersAtStreet3 ' ] , hudCache [ ' playersAtStreet4 ' ] , hudCache [ ' playersAtShowdown ' ]
, hudCache [ ' street0Raises ' ] , hudCache [ ' street1Raises ' ] , hudCache [ ' street2Raises ' ]
, hudCache [ ' street3Raises ' ] , hudCache [ ' street4Raises ' ] , hudCache [ ' street1Pot ' ]
, hudCache [ ' street2Pot ' ] , hudCache [ ' street3Pot ' ] , hudCache [ ' street4Pot ' ]
, hudCache [ ' showdownPot ' ]
) )
2008-12-13 18:52:25 +01:00
return getLastInsertId ( backend , conn , cursor )
#end def storeHands
def store_hands_players_holdem_omaha ( backend , conn , cursor , category , hands_id , player_ids , start_cashes
2009-05-17 01:06:53 +02:00
, positions , card_values , card_suits , winnings , rakes , seatNos , hudCache ) :
2008-12-13 18:52:25 +01:00
result = [ ]
2009-05-17 01:06:53 +02:00
# postgres (and others?) needs the booleans converted to ints before saving:
# (or we could just save them as boolean ... but then we can't sum them so easily in sql ???)
# NO - storing booleans for now so don't need this
#hudCacheInt = {}
#for k,v in hudCache.iteritems():
# if k in ('wonWhenSeenStreet1', 'wonAtSD', 'totalProfit'):
# hudCacheInt[k] = v
# else:
# hudCacheInt[k] = map(lambda x: 1 if x else 0, v)
2008-12-13 18:52:25 +01:00
if ( category == " holdem " ) :
2009-03-10 21:01:35 +01:00
for i in xrange ( len ( player_ids ) ) :
2009-05-21 05:26:00 +02:00
startCards = Card . twoStartCards ( card_values [ i ] [ 0 ] , card_suits [ i ] [ 0 ] , card_values [ i ] [ 1 ] , card_suits [ i ] [ 1 ] )
card1 = Card . cardFromValueSuit ( card_values [ i ] [ 0 ] , card_suits [ i ] [ 0 ] )
card2 = Card . cardFromValueSuit ( card_values [ i ] [ 1 ] , card_suits [ i ] [ 1 ] )
2008-12-13 18:52:25 +01:00
cursor . execute ( """
INSERT INTO HandsPlayers
2009-05-21 05:26:00 +02:00
( handId , playerId , startCash , position , tourneyTypeId ,
card1 , card2 , startCards , winnings , rake , seatNo , totalProfit ,
2009-05-17 18:26:05 +02:00
street0VPI , street0Aggr , street0_3BChance , street0_3BDone ,
2009-05-17 01:06:53 +02:00
street1Seen , street2Seen , street3Seen , street4Seen , sawShowdown ,
street1Aggr , street2Aggr , street3Aggr , street4Aggr ,
otherRaisedStreet1 , otherRaisedStreet2 , otherRaisedStreet3 , otherRaisedStreet4 ,
foldToOtherRaisedStreet1 , foldToOtherRaisedStreet2 , foldToOtherRaisedStreet3 , foldToOtherRaisedStreet4 ,
wonWhenSeenStreet1 , wonAtSD ,
stealAttemptChance , stealAttempted , foldBbToStealChance , foldedBbToSteal , foldSbToStealChance , foldedSbToSteal ,
street1CBChance , street1CBDone , street2CBChance , street2CBDone ,
street3CBChance , street3CBDone , street4CBChance , street4CBDone ,
foldToStreet1CBChance , foldToStreet1CBDone , foldToStreet2CBChance , foldToStreet2CBDone ,
foldToStreet3CBChance , foldToStreet3CBDone , foldToStreet4CBChance , foldToStreet4CBDone ,
street1CheckCallRaiseChance , street1CheckCallRaiseDone , street2CheckCallRaiseChance , street2CheckCallRaiseDone ,
2009-05-21 05:26:00 +02:00
street3CheckCallRaiseChance , street3CheckCallRaiseDone , street4CheckCallRaiseChance , street4CheckCallRaiseDone ,
street0Calls , street1Calls , street2Calls , street3Calls , street4Calls ,
street0Bets , street1Bets , street2Bets , street3Bets , street4Bets
2009-05-17 01:06:53 +02:00
)
2009-05-21 05:26:00 +02:00
VALUES ( % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s ,
2009-05-17 01:06:53 +02:00
% s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s ,
2009-05-21 05:26:00 +02:00
% s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s ,
% s , % s , % s , % s , % s , % s , % s , % s ) """ ,
( hands_id , player_ids [ i ] , start_cashes [ i ] , positions [ i ] , 1 , # tourneytypeid
card1 , card2 , startCards ,
2009-05-17 01:06:53 +02:00
winnings [ i ] , rakes [ i ] , seatNos [ i ] , hudCache [ ' totalProfit ' ] [ i ] ,
hudCache [ ' street0VPI ' ] [ i ] , hudCache [ ' street0Aggr ' ] [ i ] ,
2009-05-17 18:26:05 +02:00
hudCache [ ' street0_3BChance ' ] [ i ] , hudCache [ ' street0_3BDone ' ] [ i ] ,
2009-05-17 01:06:53 +02:00
hudCache [ ' street1Seen ' ] [ i ] , hudCache [ ' street2Seen ' ] [ i ] , hudCache [ ' street3Seen ' ] [ i ] ,
hudCache [ ' street4Seen ' ] [ i ] , hudCache [ ' sawShowdown ' ] [ i ] ,
hudCache [ ' street1Aggr ' ] [ i ] , hudCache [ ' street2Aggr ' ] [ i ] , hudCache [ ' street3Aggr ' ] [ i ] , hudCache [ ' street4Aggr ' ] [ i ] ,
hudCache [ ' otherRaisedStreet1 ' ] [ i ] , hudCache [ ' otherRaisedStreet2 ' ] [ i ] ,
hudCache [ ' otherRaisedStreet3 ' ] [ i ] , hudCache [ ' otherRaisedStreet4 ' ] [ i ] ,
hudCache [ ' foldToOtherRaisedStreet1 ' ] [ i ] , hudCache [ ' foldToOtherRaisedStreet2 ' ] [ i ] ,
hudCache [ ' foldToOtherRaisedStreet3 ' ] [ i ] , hudCache [ ' foldToOtherRaisedStreet4 ' ] [ i ] ,
hudCache [ ' wonWhenSeenStreet1 ' ] [ i ] , hudCache [ ' wonAtSD ' ] [ i ] ,
hudCache [ ' stealAttemptChance ' ] [ i ] , hudCache [ ' stealAttempted ' ] [ i ] , hudCache [ ' foldBbToStealChance ' ] [ i ] ,
hudCache [ ' foldedBbToSteal ' ] [ i ] , hudCache [ ' foldSbToStealChance ' ] [ i ] , hudCache [ ' foldedSbToSteal ' ] [ i ] ,
hudCache [ ' street1CBChance ' ] [ i ] , hudCache [ ' street1CBDone ' ] [ i ] , hudCache [ ' street2CBChance ' ] [ i ] , hudCache [ ' street2CBDone ' ] [ i ] ,
hudCache [ ' street3CBChance ' ] [ i ] , hudCache [ ' street3CBDone ' ] [ i ] , hudCache [ ' street4CBChance ' ] [ i ] , hudCache [ ' street4CBDone ' ] [ i ] ,
hudCache [ ' foldToStreet1CBChance ' ] [ i ] , hudCache [ ' foldToStreet1CBDone ' ] [ i ] ,
hudCache [ ' foldToStreet2CBChance ' ] [ i ] , hudCache [ ' foldToStreet2CBDone ' ] [ i ] ,
hudCache [ ' foldToStreet3CBChance ' ] [ i ] , hudCache [ ' foldToStreet3CBDone ' ] [ i ] ,
hudCache [ ' foldToStreet4CBChance ' ] [ i ] , hudCache [ ' foldToStreet4CBDone ' ] [ i ] ,
hudCache [ ' street1CheckCallRaiseChance ' ] [ i ] , hudCache [ ' street1CheckCallRaiseDone ' ] [ i ] ,
hudCache [ ' street2CheckCallRaiseChance ' ] [ i ] , hudCache [ ' street2CheckCallRaiseDone ' ] [ i ] ,
hudCache [ ' street3CheckCallRaiseChance ' ] [ i ] , hudCache [ ' street3CheckCallRaiseDone ' ] [ i ] ,
2009-05-21 05:26:00 +02:00
hudCache [ ' street4CheckCallRaiseChance ' ] [ i ] , hudCache [ ' street4CheckCallRaiseDone ' ] [ i ] ,
hudCache [ ' street0Calls ' ] [ i ] , hudCache [ ' street1Calls ' ] [ i ] , hudCache [ ' street2Calls ' ] [ i ] , hudCache [ ' street3Calls ' ] [ i ] , hudCache [ ' street4Calls ' ] [ i ] ,
hudCache [ ' street0Bets ' ] [ i ] , hudCache [ ' street1Bets ' ] [ i ] , hudCache [ ' street2Bets ' ] [ i ] , hudCache [ ' street3Bets ' ] [ i ] , hudCache [ ' street4Bets ' ] [ i ]
2009-05-17 01:06:53 +02:00
) )
2008-12-13 18:52:25 +01:00
#cursor.execute("SELECT id FROM HandsPlayers WHERE handId=%s AND playerId=%s", (hands_id, player_ids[i]))
#result.append(cursor.fetchall()[0][0])
2009-05-17 01:06:53 +02:00
result . append ( getLastInsertId ( backend , conn , cursor ) )
2008-12-13 18:52:25 +01:00
elif ( category == " omahahi " or category == " omahahilo " ) :
2009-03-10 21:01:35 +01:00
for i in xrange ( len ( player_ids ) ) :
2009-05-21 16:14:49 +02:00
startCards = Card . fourStartCards ( 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 ] )
card1 = Card . cardFromValueSuit ( card_values [ i ] [ 0 ] , card_suits [ i ] [ 0 ] )
card2 = Card . cardFromValueSuit ( card_values [ i ] [ 1 ] , card_suits [ i ] [ 1 ] )
card3 = Card . cardFromValueSuit ( card_values [ i ] [ 2 ] , card_suits [ i ] [ 2 ] )
card4 = Card . cardFromValueSuit ( card_values [ i ] [ 3 ] , card_suits [ i ] [ 3 ] )
2008-12-13 18:52:25 +01:00
cursor . execute ( """ INSERT INTO HandsPlayers
2009-05-21 05:26:00 +02:00
( handId , playerId , startCash , position , tourneyTypeId ,
2009-05-21 16:14:49 +02:00
card1 , card2 , card3 , card4 , winnings , rake , seatNo , totalProfit ,
2009-05-17 18:26:05 +02:00
street0VPI , street0Aggr , street0_3BChance , street0_3BDone ,
2009-05-17 01:06:53 +02:00
street1Seen , street2Seen , street3Seen , street4Seen , sawShowdown ,
street1Aggr , street2Aggr , street3Aggr , street4Aggr ,
otherRaisedStreet1 , otherRaisedStreet2 , otherRaisedStreet3 , otherRaisedStreet4 ,
foldToOtherRaisedStreet1 , foldToOtherRaisedStreet2 , foldToOtherRaisedStreet3 , foldToOtherRaisedStreet4 ,
wonWhenSeenStreet1 , wonAtSD ,
stealAttemptChance , stealAttempted , foldBbToStealChance , foldedBbToSteal , foldSbToStealChance , foldedSbToSteal ,
street1CBChance , street1CBDone , street2CBChance , street2CBDone ,
street3CBChance , street3CBDone , street4CBChance , street4CBDone ,
foldToStreet1CBChance , foldToStreet1CBDone , foldToStreet2CBChance , foldToStreet2CBDone ,
foldToStreet3CBChance , foldToStreet3CBDone , foldToStreet4CBChance , foldToStreet4CBDone ,
street1CheckCallRaiseChance , street1CheckCallRaiseDone , street2CheckCallRaiseChance , street2CheckCallRaiseDone ,
2009-05-21 05:26:00 +02:00
street3CheckCallRaiseChance , street3CheckCallRaiseDone , street4CheckCallRaiseChance , street4CheckCallRaiseDone ,
street0Calls , street1Calls , street2Calls , street3Calls , street4Calls ,
street0Bets , street1Bets , street2Bets , street3Bets , street4Bets
2009-05-17 01:06:53 +02:00
)
2009-05-21 05:26:00 +02:00
VALUES ( % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s ,
2009-05-17 01:06:53 +02:00
% s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s ,
2009-05-21 05:26:00 +02:00
% s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s ,
% s , % s , % s , % s , % s , % s , % s , % s ) """ ,
( hands_id , player_ids [ i ] , start_cashes [ i ] , positions [ i ] , 1 , # tourneytypeid
2009-05-21 16:14:49 +02:00
card1 , card2 , card3 , card4 ,
2009-05-17 01:06:53 +02:00
winnings [ i ] , rakes [ i ] , seatNos [ i ] , hudCache [ ' totalProfit ' ] [ i ] ,
hudCache [ ' street0VPI ' ] [ i ] , hudCache [ ' street0Aggr ' ] [ i ] ,
2009-05-17 18:26:05 +02:00
hudCache [ ' street0_3BChance ' ] [ i ] , hudCache [ ' street0_3BDone ' ] [ i ] ,
2009-05-17 01:06:53 +02:00
hudCache [ ' street1Seen ' ] [ i ] , hudCache [ ' street2Seen ' ] [ i ] , hudCache [ ' street3Seen ' ] [ i ] ,
hudCache [ ' street4Seen ' ] [ i ] , hudCache [ ' sawShowdown ' ] [ i ] ,
hudCache [ ' street1Aggr ' ] [ i ] , hudCache [ ' street2Aggr ' ] [ i ] , hudCache [ ' street3Aggr ' ] [ i ] , hudCache [ ' street4Aggr ' ] [ i ] ,
hudCache [ ' otherRaisedStreet1 ' ] [ i ] , hudCache [ ' otherRaisedStreet2 ' ] [ i ] ,
hudCache [ ' otherRaisedStreet3 ' ] [ i ] , hudCache [ ' otherRaisedStreet4 ' ] [ i ] ,
hudCache [ ' foldToOtherRaisedStreet1 ' ] [ i ] , hudCache [ ' foldToOtherRaisedStreet2 ' ] [ i ] ,
hudCache [ ' foldToOtherRaisedStreet3 ' ] [ i ] , hudCache [ ' foldToOtherRaisedStreet4 ' ] [ i ] ,
hudCache [ ' wonWhenSeenStreet1 ' ] [ i ] , hudCache [ ' wonAtSD ' ] [ i ] ,
hudCache [ ' stealAttemptChance ' ] [ i ] , hudCache [ ' stealAttempted ' ] [ i ] , hudCache [ ' foldBbToStealChance ' ] [ i ] ,
hudCache [ ' foldedBbToSteal ' ] [ i ] , hudCache [ ' foldSbToStealChance ' ] [ i ] , hudCache [ ' foldedSbToSteal ' ] [ i ] ,
hudCache [ ' street1CBChance ' ] [ i ] , hudCache [ ' street1CBDone ' ] [ i ] , hudCache [ ' street2CBChance ' ] [ i ] , hudCache [ ' street2CBDone ' ] [ i ] ,
hudCache [ ' street3CBChance ' ] [ i ] , hudCache [ ' street3CBDone ' ] [ i ] , hudCache [ ' street4CBChance ' ] [ i ] , hudCache [ ' street4CBDone ' ] [ i ] ,
hudCache [ ' foldToStreet1CBChance ' ] [ i ] , hudCache [ ' foldToStreet1CBDone ' ] [ i ] ,
hudCache [ ' foldToStreet2CBChance ' ] [ i ] , hudCache [ ' foldToStreet2CBDone ' ] [ i ] ,
hudCache [ ' foldToStreet3CBChance ' ] [ i ] , hudCache [ ' foldToStreet3CBDone ' ] [ i ] ,
hudCache [ ' foldToStreet4CBChance ' ] [ i ] , hudCache [ ' foldToStreet4CBDone ' ] [ i ] ,
hudCache [ ' street1CheckCallRaiseChance ' ] [ i ] , hudCache [ ' street1CheckCallRaiseDone ' ] [ i ] ,
hudCache [ ' street2CheckCallRaiseChance ' ] [ i ] , hudCache [ ' street2CheckCallRaiseDone ' ] [ i ] ,
hudCache [ ' street3CheckCallRaiseChance ' ] [ i ] , hudCache [ ' street3CheckCallRaiseDone ' ] [ i ] ,
2009-05-21 05:26:00 +02:00
hudCache [ ' street4CheckCallRaiseChance ' ] [ i ] , hudCache [ ' street4CheckCallRaiseDone ' ] [ i ] ,
hudCache [ ' street0Calls ' ] [ i ] , hudCache [ ' street1Calls ' ] [ i ] , hudCache [ ' street2Calls ' ] [ i ] , hudCache [ ' street3Calls ' ] [ i ] , hudCache [ ' street4Calls ' ] [ i ] ,
hudCache [ ' street0Bets ' ] [ i ] , hudCache [ ' street1Bets ' ] [ i ] , hudCache [ ' street2Bets ' ] [ i ] , hudCache [ ' street3Bets ' ] [ i ] , hudCache [ ' street4Bets ' ] [ i ]
2009-05-17 01:06:53 +02:00
) )
2008-12-13 18:52:25 +01:00
#cursor.execute("SELECT id FROM HandsPlayers WHERE handId=%s AND playerId+0=%s", (hands_id, player_ids[i]))
#result.append(cursor.fetchall()[0][0])
2009-05-17 01:06:53 +02:00
result . append ( getLastInsertId ( backend , conn , cursor ) )
2008-12-13 18:52:25 +01:00
else :
raise FpdbError ( " invalid category " )
return result
#end def store_hands_players_holdem_omaha
def store_hands_players_stud ( backend , conn , cursor , hands_id , player_ids , start_cashes , antes ,
card_values , card_suits , winnings , rakes , seatNos ) :
#stores hands_players rows for stud/razz games. returns an array of the resulting IDs
result = [ ]
#print "before inserts in store_hands_players_stud, antes:", antes
2009-03-10 21:01:35 +01:00
for i in xrange ( len ( player_ids ) ) :
2009-06-10 01:06:20 +02:00
card1 = Card . cardFromValueSuit ( card_values [ i ] [ 0 ] , card_suits [ i ] [ 0 ] )
card2 = Card . cardFromValueSuit ( card_values [ i ] [ 1 ] , card_suits [ i ] [ 1 ] )
card3 = Card . cardFromValueSuit ( card_values [ i ] [ 2 ] , card_suits [ i ] [ 2 ] )
card4 = Card . cardFromValueSuit ( card_values [ i ] [ 3 ] , card_suits [ i ] [ 3 ] )
card5 = Card . cardFromValueSuit ( card_values [ i ] [ 4 ] , card_suits [ i ] [ 4 ] )
card6 = Card . cardFromValueSuit ( card_values [ i ] [ 5 ] , card_suits [ i ] [ 5 ] )
card7 = Card . cardFromValueSuit ( card_values [ i ] [ 6 ] , card_suits [ i ] [ 6 ] )
2008-12-13 18:52:25 +01:00
cursor . execute ( """ INSERT INTO HandsPlayers
2009-06-10 01:06:20 +02:00
( handId , playerId , startCash , ante , tourneyTypeId ,
card1 , card2 ,
card3 , card4 ,
card5 , card6 ,
card7 , winnings , rake , seatNo )
VALUES ( % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s ) """ ,
( hands_id , player_ids [ i ] , start_cashes [ i ] , antes [ i ] , 1 ,
card1 , card2 ,
card3 , card4 ,
card5 , card6 ,
card7 , winnings [ i ] , rakes [ i ] , seatNos [ i ] ) )
2008-12-13 18:52:25 +01:00
#cursor.execute("SELECT id FROM HandsPlayers WHERE handId=%s AND playerId+0=%s", (hands_id, player_ids[i]))
#result.append(cursor.fetchall()[0][0])
2009-05-17 01:06:53 +02:00
result . append ( getLastInsertId ( backend , conn , cursor ) )
2008-12-13 18:52:25 +01:00
return result
#end def store_hands_players_stud
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
result = [ ]
2009-03-10 21:01:35 +01:00
for i in xrange ( len ( player_ids ) ) :
2008-12-13 18:52:25 +01:00
if len ( card_values [ 0 ] ) == 2 :
cursor . execute ( """ INSERT INTO HandsPlayers
( handId , playerId , startCash , position ,
card1Value , card1Suit , card2Value , card2Suit ,
winnings , rake , tourneysPlayersId , seatNo )
VALUES ( % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s ) """ ,
( 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 ] ,
winnings [ i ] , rakes [ i ] , tourneys_players_ids [ i ] , seatNos [ i ] ) )
elif len ( card_values [ 0 ] ) == 4 :
cursor . execute ( """ INSERT INTO HandsPlayers
( handId , playerId , startCash , position ,
card1Value , card1Suit , card2Value , card2Suit ,
card3Value , card3Suit , card4Value , card4Suit ,
winnings , rake , tourneysPlayersId , seatNo )
VALUES ( % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s ) """ ,
( 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 ] [ 2 ] , card_suits [ i ] [ 2 ] , card_values [ i ] [ 3 ] , card_suits [ i ] [ 3 ] ,
winnings [ i ] , rakes [ i ] , tourneys_players_ids [ i ] , seatNos [ i ] ) )
else :
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]))
#result.append(cursor.fetchall()[0][0])
2009-05-17 01:06:53 +02:00
result . append ( getLastInsertId ( backend , conn , cursor ) )
2008-12-13 18:52:25 +01:00
return result
#end def store_hands_players_holdem_omaha_tourney
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 ) :
#stores hands_players for tourney stud/razz hands
result = [ ]
2009-03-10 21:01:35 +01:00
for i in xrange ( len ( player_ids ) ) :
2008-12-13 18:52:25 +01:00
cursor . execute ( """ INSERT INTO HandsPlayers
( handId , playerId , startCash , ante ,
card1Value , card1Suit , card2Value , card2Suit ,
card3Value , card3Suit , card4Value , card4Suit ,
card5Value , card5Suit , card6Value , card6Suit ,
card7Value , card7Suit , winnings , rake , tourneysPlayersId , seatNo )
VALUES ( % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s , % s ,
% s , % s , % s , % s , % s , % s ) """ ,
( hands_id , player_ids [ i ] , start_cashes [ i ] , antes [ i ] ,
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 ] [ 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 ] ) )
#cursor.execute("SELECT id FROM HandsPlayers WHERE handId=%s AND playerId+0=%s", (hands_id, player_ids[i]))
#result.append(cursor.fetchall()[0][0])
2009-05-17 01:06:53 +02:00
result . append ( getLastInsertId ( backend , conn , cursor ) )
2008-12-13 18:52:25 +01:00
return result
#end def store_hands_players_stud_tourney
def generateHudCacheData ( player_ids , base , category , action_types , allIns , actionTypeByNo
2008-12-13 18:54:32 +01:00
, winnings , totalWinnings , positions , actionTypes , actionAmounts , antes ) :
2008-12-13 18:52:25 +01:00
""" 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.
street0VPI = [ ]
street0Aggr = [ ]
2009-05-17 18:26:05 +02:00
street0_3BChance = [ ]
street0_3BDone = [ ]
2008-12-13 18:52:25 +01:00
street1Seen = [ ]
street2Seen = [ ]
street3Seen = [ ]
street4Seen = [ ]
sawShowdown = [ ]
street1Aggr = [ ]
street2Aggr = [ ]
street3Aggr = [ ]
street4Aggr = [ ]
otherRaisedStreet1 = [ ]
otherRaisedStreet2 = [ ]
otherRaisedStreet3 = [ ]
otherRaisedStreet4 = [ ]
foldToOtherRaisedStreet1 = [ ]
foldToOtherRaisedStreet2 = [ ]
foldToOtherRaisedStreet3 = [ ]
foldToOtherRaisedStreet4 = [ ]
wonWhenSeenStreet1 = [ ]
wonAtSD = [ ]
stealAttemptChance = [ ]
stealAttempted = [ ]
hudDataPositions = [ ]
2009-05-21 05:26:00 +02:00
street0Calls = [ ]
street1Calls = [ ]
street2Calls = [ ]
street3Calls = [ ]
street4Calls = [ ]
street0Bets = [ ]
street1Bets = [ ]
street2Bets = [ ]
street3Bets = [ ]
street4Bets = [ ]
#street0Raises=[]
#street1Raises=[]
#street2Raises=[]
#street3Raises=[]
#street4Raises=[]
# Summary figures for hand table:
result = { }
result [ ' playersVpi ' ] = 0
result [ ' playersAtStreet1 ' ] = 0
result [ ' playersAtStreet2 ' ] = 0
result [ ' playersAtStreet3 ' ] = 0
result [ ' playersAtStreet4 ' ] = 0
result [ ' playersAtShowdown ' ] = 0
result [ ' street0Raises ' ] = 0
result [ ' street1Raises ' ] = 0
result [ ' street2Raises ' ] = 0
result [ ' street3Raises ' ] = 0
result [ ' street4Raises ' ] = 0
result [ ' street1Pot ' ] = 0
result [ ' street2Pot ' ] = 0
result [ ' street3Pot ' ] = 0
result [ ' street4Pot ' ] = 0
result [ ' showdownPot ' ] = 0
2008-12-13 18:52:25 +01:00
firstPfRaiseByNo = - 1
firstPfRaiserId = - 1
firstPfRaiserNo = - 1
firstPfCallByNo = - 1
firstPfCallerId = - 1
2009-03-19 04:27:15 +01:00
for i , action in enumerate ( actionTypeByNo [ 0 ] ) :
if action [ 1 ] == " bet " :
firstPfRaiseByNo = i
firstPfRaiserId = action [ 0 ]
for j , pid in enumerate ( player_ids ) :
if pid == firstPfRaiserId :
firstPfRaiserNo = j
2008-12-13 18:52:25 +01:00
break
break
2009-03-19 04:27:15 +01:00
for i , action in enumerate ( actionTypeByNo [ 0 ] ) :
if action [ 1 ] == " call " :
firstPfCallByNo = i
firstPfCallerId = action [ 0 ]
2008-12-13 18:52:25 +01:00
break
2009-04-26 23:20:24 +02:00
firstPlayId = firstPfCallerId
if firstPfRaiseByNo < > - 1 :
if firstPfRaiseByNo < firstPfCallByNo or firstPfCallByNo == - 1 :
firstPlayId = firstPfRaiserId
2008-12-13 18:52:25 +01:00
cutoffId = - 1
buttonId = - 1
sbId = - 1
bbId = - 1
if base == " hold " :
2009-03-19 04:27:15 +01:00
for player , pos in enumerate ( positions ) :
if pos == 1 :
cutoffId = player_ids [ player ]
if pos == 0 :
buttonId = player_ids [ player ]
if pos == ' S ' :
sbId = player_ids [ player ]
if pos == ' B ' :
bbId = player_ids [ player ]
2008-12-13 18:52:25 +01:00
someoneStole = False
#run a loop for each player preparing the actual values that will be commited to SQL
2009-03-10 21:01:35 +01:00
for player in xrange ( len ( player_ids ) ) :
2008-12-13 18:52:25 +01:00
#set default values
myStreet0VPI = False
myStreet0Aggr = False
2009-05-17 18:26:05 +02:00
myStreet0_3BChance = False
myStreet0_3BDone = False
2008-12-13 18:52:25 +01:00
myStreet1Seen = False
myStreet2Seen = False
myStreet3Seen = False
myStreet4Seen = False
mySawShowdown = False
myStreet1Aggr = False
myStreet2Aggr = False
myStreet3Aggr = False
myStreet4Aggr = False
myOtherRaisedStreet1 = False
myOtherRaisedStreet2 = False
myOtherRaisedStreet3 = False
myOtherRaisedStreet4 = False
myFoldToOtherRaisedStreet1 = False
myFoldToOtherRaisedStreet2 = False
myFoldToOtherRaisedStreet3 = False
myFoldToOtherRaisedStreet4 = False
myWonWhenSeenStreet1 = 0.0
myWonAtSD = 0.0
myStealAttemptChance = False
myStealAttempted = False
2009-05-21 05:26:00 +02:00
myStreet0Calls = 0
myStreet1Calls = 0
myStreet2Calls = 0
myStreet3Calls = 0
myStreet4Calls = 0
myStreet0Bets = 0
myStreet1Bets = 0
myStreet2Bets = 0
myStreet3Bets = 0
myStreet4Bets = 0
#myStreet0Raises=0
#myStreet1Raises=0
#myStreet2Raises=0
#myStreet3Raises=0
#myStreet4Raises=0
2008-12-13 18:52:25 +01:00
#calculate VPIP and PFR
street = 0
heroPfRaiseCount = 0
2009-03-19 04:48:23 +01:00
for currentAction in action_types [ street ] [ player ] : # finally individual actions
if currentAction == " bet " :
myStreet0Aggr = True
if currentAction == " bet " or currentAction == " call " :
myStreet0VPI = True
2009-05-21 05:26:00 +02:00
if myStreet0VPI :
result [ ' playersVpi ' ] + = 1
myStreet0Calls = action_types [ street ] [ player ] . count ( ' call ' )
myStreet0Bets = action_types [ street ] [ player ] . count ( ' bet ' )
# street0Raises = action_types[street][player].count('raise') bet count includes raises for now
result [ ' street0Raises ' ] + = myStreet0Bets
2008-12-13 18:52:25 +01:00
2009-05-17 18:26:05 +02:00
#PF3BChance and PF3B
2008-12-13 18:52:25 +01:00
pfFold = - 1
pfRaise = - 1
2009-03-19 04:48:23 +01:00
if firstPfRaiseByNo != - 1 :
for i , actionType in enumerate ( actionTypeByNo [ 0 ] ) :
if actionType [ 0 ] == player_ids [ player ] :
if actionType [ 1 ] == " bet " and pfRaise == - 1 and i > firstPfRaiseByNo :
pfRaise = i
if actionType [ 1 ] == " fold " and pfFold == - 1 :
pfFold = i
if pfFold == - 1 or pfFold > firstPfRaiseByNo :
2009-05-17 18:26:05 +02:00
myStreet0_3BChance = True
2009-03-19 04:48:23 +01:00
if pfRaise > firstPfRaiseByNo :
2009-05-17 18:26:05 +02:00
myStreet0_3BDone = True
2008-12-13 18:52:25 +01:00
#steal calculations
2009-04-26 23:20:24 +02:00
if base == " hold " :
2009-04-26 23:20:24 +02:00
if len ( player_ids ) > = 3 : # no point otherwise # was 5, use 3 to match pokertracker definition
2008-12-13 18:52:25 +01:00
if positions [ player ] == 1 :
2009-04-26 23:20:24 +02:00
if firstPfRaiserId == player_ids [ player ] \
and ( firstPfCallByNo == - 1 or firstPfCallByNo > firstPfRaiseByNo ) :
2008-12-13 18:52:25 +01:00
myStealAttempted = True
myStealAttemptChance = True
2009-04-26 23:20:24 +02:00
if firstPlayId == cutoffId or firstPlayId == buttonId or firstPlayId == sbId or firstPlayId == bbId or firstPlayId == - 1 :
2008-12-13 18:52:25 +01:00
myStealAttemptChance = True
2009-04-26 23:20:24 +02:00
if positions [ player ] == 0 :
if firstPfRaiserId == player_ids [ player ] \
and ( firstPfCallByNo == - 1 or firstPfCallByNo > firstPfRaiseByNo ) :
2008-12-13 18:52:25 +01:00
myStealAttempted = True
myStealAttemptChance = True
2009-04-26 23:20:24 +02:00
if firstPlayId == buttonId or firstPlayId == sbId or firstPlayId == bbId or firstPlayId == - 1 :
2008-12-13 18:52:25 +01:00
myStealAttemptChance = True
2009-04-26 23:20:24 +02:00
if positions [ player ] == ' S ' :
if firstPfRaiserId == player_ids [ player ] \
and ( firstPfCallByNo == - 1 or firstPfCallByNo > firstPfRaiseByNo ) :
2008-12-13 18:52:25 +01:00
myStealAttempted = True
2009-04-26 23:20:24 +02:00
myStealAttemptChance = True
if firstPlayId == sbId or firstPlayId == bbId or firstPlayId == - 1 :
2008-12-13 18:52:25 +01:00
myStealAttemptChance = True
if positions [ player ] == ' B ' :
pass
if myStealAttempted :
someoneStole = True
#calculate saw* values
2009-03-19 04:48:23 +01:00
isAllIn = False
if any ( i for i in allIns [ 0 ] [ player ] ) :
isAllIn = True
2008-12-13 18:52:25 +01:00
if ( len ( action_types [ 1 ] [ player ] ) > 0 or isAllIn ) :
2009-03-19 04:48:23 +01:00
myStreet1Seen = True
if any ( i for i in allIns [ 1 ] [ player ] ) :
isAllIn = True
2008-12-13 18:52:25 +01:00
if ( len ( action_types [ 2 ] [ player ] ) > 0 or isAllIn ) :
2009-03-19 04:48:23 +01:00
myStreet2Seen = True
2008-12-13 18:52:25 +01:00
2009-03-19 04:48:23 +01:00
if any ( i for i in allIns [ 2 ] [ player ] ) :
isAllIn = True
2008-12-13 18:52:25 +01:00
if ( len ( action_types [ 3 ] [ player ] ) > 0 or isAllIn ) :
2009-03-19 04:48:23 +01:00
myStreet3Seen = True
2008-12-13 18:52:25 +01:00
#print "base:", base
if base == " hold " :
2009-03-19 04:48:23 +01:00
mySawShowdown = True
if any ( actiontype == " fold " for actiontype in action_types [ 3 ] [ player ] ) :
mySawShowdown = False
2008-12-13 18:52:25 +01:00
else :
#print "in else"
2009-03-19 04:48:23 +01:00
if any ( i for i in allIns [ 3 ] [ player ] ) :
isAllIn = True
2008-12-13 18:52:25 +01:00
if ( len ( action_types [ 4 ] [ player ] ) > 0 or isAllIn ) :
#print "in if"
2009-03-19 04:48:23 +01:00
myStreet4Seen = True
2008-12-13 18:52:25 +01:00
2009-03-19 04:48:23 +01:00
mySawShowdown = True
if any ( actiontype == " fold " for actiontype in action_types [ 4 ] [ player ] ) :
mySawShowdown = False
2009-05-21 05:26:00 +02:00
if myStreet1Seen :
result [ ' playersAtStreet1 ' ] + = 1
if myStreet2Seen :
result [ ' playersAtStreet2 ' ] + = 1
if myStreet3Seen :
result [ ' playersAtStreet3 ' ] + = 1
if myStreet4Seen :
result [ ' playersAtStreet4 ' ] + = 1
if mySawShowdown :
result [ ' playersAtShowdown ' ] + = 1
2008-12-13 18:52:25 +01:00
#flop stuff
street = 1
if myStreet1Seen :
2009-03-19 08:30:44 +01:00
if any ( actiontype == " bet " for actiontype in action_types [ street ] [ player ] ) :
myStreet1Aggr = True
2008-12-13 18:52:25 +01:00
2009-05-21 05:26:00 +02:00
myStreet1Calls = action_types [ street ] [ player ] . count ( ' call ' )
myStreet1Bets = action_types [ street ] [ player ] . count ( ' bet ' )
# street1Raises = action_types[street][player].count('raise') bet count includes raises for now
result [ ' street1Raises ' ] + = myStreet1Bets
2009-03-10 21:01:35 +01:00
for otherPlayer in xrange ( len ( player_ids ) ) :
2008-12-13 18:52:25 +01:00
if player == otherPlayer :
pass
else :
2009-03-10 21:01:35 +01:00
for countOther in xrange ( len ( action_types [ street ] [ otherPlayer ] ) ) :
2008-12-13 18:52:25 +01:00
if action_types [ street ] [ otherPlayer ] [ countOther ] == " bet " :
myOtherRaisedStreet1 = True
2009-03-10 21:01:35 +01:00
for countOtherFold in xrange ( len ( action_types [ street ] [ player ] ) ) :
2008-12-13 18:52:25 +01:00
if action_types [ street ] [ player ] [ countOtherFold ] == " fold " :
myFoldToOtherRaisedStreet1 = True
#turn stuff - copy of flop with different vars
street = 2
if myStreet2Seen :
2009-03-19 08:30:44 +01:00
if any ( actiontype == " bet " for actiontype in action_types [ street ] [ player ] ) :
myStreet2Aggr = True
2008-12-13 18:52:25 +01:00
2009-05-21 05:26:00 +02:00
myStreet2Calls = action_types [ street ] [ player ] . count ( ' call ' )
myStreet2Bets = action_types [ street ] [ player ] . count ( ' bet ' )
# street2Raises = action_types[street][player].count('raise') bet count includes raises for now
result [ ' street2Raises ' ] + = myStreet2Bets
2009-03-10 21:01:35 +01:00
for otherPlayer in xrange ( len ( player_ids ) ) :
2008-12-13 18:52:25 +01:00
if player == otherPlayer :
pass
else :
2009-03-10 21:01:35 +01:00
for countOther in xrange ( len ( action_types [ street ] [ otherPlayer ] ) ) :
2008-12-13 18:52:25 +01:00
if action_types [ street ] [ otherPlayer ] [ countOther ] == " bet " :
myOtherRaisedStreet2 = True
2009-03-10 21:01:35 +01:00
for countOtherFold in xrange ( len ( action_types [ street ] [ player ] ) ) :
2008-12-13 18:52:25 +01:00
if action_types [ street ] [ player ] [ countOtherFold ] == " fold " :
myFoldToOtherRaisedStreet2 = True
#river stuff - copy of flop with different vars
street = 3
if myStreet3Seen :
2009-03-19 08:30:44 +01:00
if any ( actiontype == " bet " for actiontype in action_types [ street ] [ player ] ) :
myStreet3Aggr = True
2008-12-13 18:52:25 +01:00
2009-05-21 05:26:00 +02:00
myStreet3Calls = action_types [ street ] [ player ] . count ( ' call ' )
myStreet3Bets = action_types [ street ] [ player ] . count ( ' bet ' )
# street3Raises = action_types[street][player].count('raise') bet count includes raises for now
result [ ' street3Raises ' ] + = myStreet3Bets
2009-03-10 21:01:35 +01:00
for otherPlayer in xrange ( len ( player_ids ) ) :
2008-12-13 18:52:25 +01:00
if player == otherPlayer :
pass
else :
2009-03-10 21:01:35 +01:00
for countOther in xrange ( len ( action_types [ street ] [ otherPlayer ] ) ) :
2008-12-13 18:52:25 +01:00
if action_types [ street ] [ otherPlayer ] [ countOther ] == " bet " :
myOtherRaisedStreet3 = True
2009-03-10 21:01:35 +01:00
for countOtherFold in xrange ( len ( action_types [ street ] [ player ] ) ) :
2008-12-13 18:52:25 +01:00
if action_types [ street ] [ player ] [ countOtherFold ] == " fold " :
myFoldToOtherRaisedStreet3 = True
#stud river stuff - copy of flop with different vars
street = 4
if myStreet4Seen :
2009-03-19 08:30:44 +01:00
if any ( actiontype == " bet " for actiontype in action_types [ street ] [ player ] ) :
myStreet4Aggr = True
2008-12-13 18:52:25 +01:00
2009-05-21 05:26:00 +02:00
myStreet4Calls = action_types [ street ] [ player ] . count ( ' call ' )
myStreet4Bets = action_types [ street ] [ player ] . count ( ' bet ' )
# street4Raises = action_types[street][player].count('raise') bet count includes raises for now
result [ ' street4Raises ' ] + = myStreet4Bets
2009-03-10 21:01:35 +01:00
for otherPlayer in xrange ( len ( player_ids ) ) :
2008-12-13 18:52:25 +01:00
if player == otherPlayer :
pass
else :
2009-03-10 21:01:35 +01:00
for countOther in xrange ( len ( action_types [ street ] [ otherPlayer ] ) ) :
2008-12-13 18:52:25 +01:00
if action_types [ street ] [ otherPlayer ] [ countOther ] == " bet " :
myOtherRaisedStreet4 = True
2009-03-10 21:01:35 +01:00
for countOtherFold in xrange ( len ( action_types [ street ] [ player ] ) ) :
2008-12-13 18:52:25 +01:00
if action_types [ street ] [ player ] [ countOtherFold ] == " fold " :
myFoldToOtherRaisedStreet4 = True
2009-03-19 08:30:44 +01:00
if winnings [ player ] != 0 :
2008-12-13 18:52:25 +01:00
if myStreet1Seen :
2009-03-19 08:30:44 +01:00
myWonWhenSeenStreet1 = winnings [ player ] / float ( totalWinnings )
2008-12-13 18:52:25 +01:00
if mySawShowdown :
myWonAtSD = myWonWhenSeenStreet1
#add each value to the appropriate array
street0VPI . append ( myStreet0VPI )
street0Aggr . append ( myStreet0Aggr )
2009-05-17 18:26:05 +02:00
street0_3BChance . append ( myStreet0_3BChance )
street0_3BDone . append ( myStreet0_3BDone )
2008-12-13 18:52:25 +01:00
street1Seen . append ( myStreet1Seen )
street2Seen . append ( myStreet2Seen )
street3Seen . append ( myStreet3Seen )
street4Seen . append ( myStreet4Seen )
sawShowdown . append ( mySawShowdown )
street1Aggr . append ( myStreet1Aggr )
street2Aggr . append ( myStreet2Aggr )
street3Aggr . append ( myStreet3Aggr )
street4Aggr . append ( myStreet4Aggr )
otherRaisedStreet1 . append ( myOtherRaisedStreet1 )
otherRaisedStreet2 . append ( myOtherRaisedStreet2 )
otherRaisedStreet3 . append ( myOtherRaisedStreet3 )
otherRaisedStreet4 . append ( myOtherRaisedStreet4 )
foldToOtherRaisedStreet1 . append ( myFoldToOtherRaisedStreet1 )
foldToOtherRaisedStreet2 . append ( myFoldToOtherRaisedStreet2 )
foldToOtherRaisedStreet3 . append ( myFoldToOtherRaisedStreet3 )
foldToOtherRaisedStreet4 . append ( myFoldToOtherRaisedStreet4 )
wonWhenSeenStreet1 . append ( myWonWhenSeenStreet1 )
wonAtSD . append ( myWonAtSD )
stealAttemptChance . append ( myStealAttemptChance )
stealAttempted . append ( myStealAttempted )
if base == " hold " :
pos = positions [ player ]
if pos == ' B ' :
hudDataPositions . append ( ' B ' )
elif pos == ' S ' :
hudDataPositions . append ( ' S ' )
elif pos == 0 :
hudDataPositions . append ( ' D ' )
elif pos == 1 :
hudDataPositions . append ( ' C ' )
elif pos > = 2 and pos < = 4 :
hudDataPositions . append ( ' M ' )
2008-12-19 02:38:43 +01:00
elif pos > = 5 and pos < = 8 :
2008-12-13 18:52:25 +01:00
hudDataPositions . append ( ' E ' )
### RHH Added this elif to handle being a dead hand before the BB (pos==9)
elif pos == 9 :
hudDataPositions . append ( ' X ' )
else :
raise FpdbError ( " invalid position " )
elif base == " stud " :
#todo: stud positions and steals
pass
2009-05-21 05:26:00 +02:00
street0Calls . append ( myStreet0Calls )
street1Calls . append ( myStreet1Calls )
street2Calls . append ( myStreet2Calls )
street3Calls . append ( myStreet3Calls )
street4Calls . append ( myStreet4Calls )
street0Bets . append ( myStreet0Bets )
street1Bets . append ( myStreet1Bets )
street2Bets . append ( myStreet2Bets )
street3Bets . append ( myStreet3Bets )
street4Bets . append ( myStreet4Bets )
#street0Raises.append(myStreet0Raises)
#street1Raises.append(myStreet1Raises)
#street2Raises.append(myStreet2Raises)
#street3Raises.append(myStreet3Raises)
#street4Raises.append(myStreet4Raises)
2008-12-13 18:52:25 +01:00
#add each array to the to-be-returned dictionary
2009-05-21 05:26:00 +02:00
result [ ' street0VPI ' ] = street0VPI
2008-12-13 18:52:25 +01:00
result [ ' street0Aggr ' ] = street0Aggr
2009-05-17 18:26:05 +02:00
result [ ' street0_3BChance ' ] = street0_3BChance
result [ ' street0_3BDone ' ] = street0_3BDone
2008-12-13 18:52:25 +01:00
result [ ' street1Seen ' ] = street1Seen
result [ ' street2Seen ' ] = street2Seen
result [ ' street3Seen ' ] = street3Seen
result [ ' street4Seen ' ] = street4Seen
result [ ' sawShowdown ' ] = sawShowdown
result [ ' street1Aggr ' ] = street1Aggr
result [ ' otherRaisedStreet1 ' ] = otherRaisedStreet1
result [ ' foldToOtherRaisedStreet1 ' ] = foldToOtherRaisedStreet1
result [ ' street2Aggr ' ] = street2Aggr
result [ ' otherRaisedStreet2 ' ] = otherRaisedStreet2
result [ ' foldToOtherRaisedStreet2 ' ] = foldToOtherRaisedStreet2
result [ ' street3Aggr ' ] = street3Aggr
result [ ' otherRaisedStreet3 ' ] = otherRaisedStreet3
result [ ' foldToOtherRaisedStreet3 ' ] = foldToOtherRaisedStreet3
result [ ' street4Aggr ' ] = street4Aggr
result [ ' otherRaisedStreet4 ' ] = otherRaisedStreet4
result [ ' foldToOtherRaisedStreet4 ' ] = foldToOtherRaisedStreet4
result [ ' wonWhenSeenStreet1 ' ] = wonWhenSeenStreet1
result [ ' wonAtSD ' ] = wonAtSD
result [ ' stealAttemptChance ' ] = stealAttemptChance
result [ ' stealAttempted ' ] = stealAttempted
2009-05-21 05:26:00 +02:00
result [ ' street0Calls ' ] = street0Calls
result [ ' street1Calls ' ] = street1Calls
result [ ' street2Calls ' ] = street2Calls
result [ ' street3Calls ' ] = street3Calls
result [ ' street4Calls ' ] = street4Calls
result [ ' street0Bets ' ] = street0Bets
result [ ' street1Bets ' ] = street1Bets
result [ ' street2Bets ' ] = street2Bets
result [ ' street3Bets ' ] = street3Bets
result [ ' street4Bets ' ] = street4Bets
#result['street0Raises']=street0Raises
#result['street1Raises']=street1Raises
#result['street2Raises']=street2Raises
#result['street3Raises']=street3Raises
#result['street4Raises']=street4Raises
2008-12-13 18:52:25 +01:00
#now the various steal values
foldBbToStealChance = [ ]
foldedBbToSteal = [ ]
foldSbToStealChance = [ ]
foldedSbToSteal = [ ]
2009-03-10 21:01:35 +01:00
for player in xrange ( len ( player_ids ) ) :
2008-12-13 18:52:25 +01:00
myFoldBbToStealChance = False
myFoldedBbToSteal = False
myFoldSbToStealChance = False
myFoldedSbToSteal = False
if base == " hold " :
if someoneStole and ( positions [ player ] == ' B ' or positions [ player ] == ' S ' ) and firstPfRaiserId != player_ids [ player ] :
street = 0
2009-03-10 21:01:35 +01:00
for count in xrange ( len ( action_types [ street ] [ player ] ) ) : #individual actions
2008-12-13 18:52:25 +01:00
if positions [ player ] == ' B ' :
myFoldBbToStealChance = True
if action_types [ street ] [ player ] [ count ] == " fold " :
myFoldedBbToSteal = True
if positions [ player ] == ' S ' :
myFoldSbToStealChance = True
if action_types [ street ] [ player ] [ count ] == " fold " :
myFoldedSbToSteal = True
foldBbToStealChance . append ( myFoldBbToStealChance )
foldedBbToSteal . append ( myFoldedBbToSteal )
foldSbToStealChance . append ( myFoldSbToStealChance )
foldedSbToSteal . append ( myFoldedSbToSteal )
result [ ' foldBbToStealChance ' ] = foldBbToStealChance
result [ ' foldedBbToSteal ' ] = foldedBbToSteal
result [ ' foldSbToStealChance ' ] = foldSbToStealChance
result [ ' foldedSbToSteal ' ] = foldedSbToSteal
#now CB
street1CBChance = [ ]
street1CBDone = [ ]
didStreet1CB = [ ]
2009-03-10 21:01:35 +01:00
for player in xrange ( len ( player_ids ) ) :
2008-12-13 18:52:25 +01:00
myStreet1CBChance = False
myStreet1CBDone = False
if street0VPI [ player ] :
myStreet1CBChance = True
if street1Aggr [ player ] :
myStreet1CBDone = True
didStreet1CB . append ( player_ids [ player ] )
street1CBChance . append ( myStreet1CBChance )
street1CBDone . append ( myStreet1CBDone )
result [ ' street1CBChance ' ] = street1CBChance
result [ ' street1CBDone ' ] = street1CBDone
#now 2B
street2CBChance = [ ]
street2CBDone = [ ]
didStreet2CB = [ ]
2009-03-10 21:01:35 +01:00
for player in xrange ( len ( player_ids ) ) :
2008-12-13 18:52:25 +01:00
myStreet2CBChance = False
myStreet2CBDone = False
if street1CBDone [ player ] :
myStreet2CBChance = True
if street2Aggr [ player ] :
myStreet2CBDone = True
didStreet2CB . append ( player_ids [ player ] )
street2CBChance . append ( myStreet2CBChance )
street2CBDone . append ( myStreet2CBDone )
result [ ' street2CBChance ' ] = street2CBChance
result [ ' street2CBDone ' ] = street2CBDone
#now 3B
street3CBChance = [ ]
street3CBDone = [ ]
didStreet3CB = [ ]
2009-03-10 21:01:35 +01:00
for player in xrange ( len ( player_ids ) ) :
2008-12-13 18:52:25 +01:00
myStreet3CBChance = False
myStreet3CBDone = False
if street2CBDone [ player ] :
myStreet3CBChance = True
if street3Aggr [ player ] :
myStreet3CBDone = True
didStreet3CB . append ( player_ids [ player ] )
street3CBChance . append ( myStreet3CBChance )
street3CBDone . append ( myStreet3CBDone )
result [ ' street3CBChance ' ] = street3CBChance
result [ ' street3CBDone ' ] = street3CBDone
#and 4B
street4CBChance = [ ]
street4CBDone = [ ]
didStreet4CB = [ ]
2009-03-10 21:01:35 +01:00
for player in xrange ( len ( player_ids ) ) :
2008-12-13 18:52:25 +01:00
myStreet4CBChance = False
myStreet4CBDone = False
if street3CBDone [ player ] :
myStreet4CBChance = True
if street4Aggr [ player ] :
myStreet4CBDone = True
didStreet4CB . append ( player_ids [ player ] )
street4CBChance . append ( myStreet4CBChance )
street4CBDone . append ( myStreet4CBDone )
result [ ' street4CBChance ' ] = street4CBChance
result [ ' street4CBDone ' ] = street4CBDone
result [ ' position ' ] = hudDataPositions
foldToStreet1CBChance = [ ]
foldToStreet1CBDone = [ ]
foldToStreet2CBChance = [ ]
foldToStreet2CBDone = [ ]
foldToStreet3CBChance = [ ]
foldToStreet3CBDone = [ ]
foldToStreet4CBChance = [ ]
foldToStreet4CBDone = [ ]
2009-03-10 21:01:35 +01:00
for player in xrange ( len ( player_ids ) ) :
2008-12-13 18:52:25 +01:00
myFoldToStreet1CBChance = False
myFoldToStreet1CBDone = False
foldToStreet1CBChance . append ( myFoldToStreet1CBChance )
foldToStreet1CBDone . append ( myFoldToStreet1CBDone )
myFoldToStreet2CBChance = False
myFoldToStreet2CBDone = False
foldToStreet2CBChance . append ( myFoldToStreet2CBChance )
foldToStreet2CBDone . append ( myFoldToStreet2CBDone )
myFoldToStreet3CBChance = False
myFoldToStreet3CBDone = False
foldToStreet3CBChance . append ( myFoldToStreet3CBChance )
foldToStreet3CBDone . append ( myFoldToStreet3CBDone )
myFoldToStreet4CBChance = False
myFoldToStreet4CBDone = False
foldToStreet4CBChance . append ( myFoldToStreet4CBChance )
foldToStreet4CBDone . append ( myFoldToStreet4CBDone )
if len ( didStreet1CB ) > = 1 :
generateFoldToCB ( 1 , player_ids , didStreet1CB , street1CBDone , foldToStreet1CBChance , foldToStreet1CBDone , actionTypeByNo )
if len ( didStreet2CB ) > = 1 :
generateFoldToCB ( 2 , player_ids , didStreet2CB , street2CBDone , foldToStreet2CBChance , foldToStreet2CBDone , actionTypeByNo )
if len ( didStreet3CB ) > = 1 :
generateFoldToCB ( 3 , player_ids , didStreet3CB , street3CBDone , foldToStreet3CBChance , foldToStreet3CBDone , actionTypeByNo )
if len ( didStreet4CB ) > = 1 :
generateFoldToCB ( 4 , player_ids , didStreet4CB , street4CBDone , foldToStreet4CBChance , foldToStreet4CBDone , actionTypeByNo )
result [ ' foldToStreet1CBChance ' ] = foldToStreet1CBChance
result [ ' foldToStreet1CBDone ' ] = foldToStreet1CBDone
result [ ' foldToStreet2CBChance ' ] = foldToStreet2CBChance
result [ ' foldToStreet2CBDone ' ] = foldToStreet2CBDone
result [ ' foldToStreet3CBChance ' ] = foldToStreet3CBChance
result [ ' foldToStreet3CBDone ' ] = foldToStreet3CBDone
result [ ' foldToStreet4CBChance ' ] = foldToStreet4CBChance
result [ ' foldToStreet4CBDone ' ] = foldToStreet4CBDone
totalProfit = [ ]
street1CheckCallRaiseChance = [ ]
street1CheckCallRaiseDone = [ ]
street2CheckCallRaiseChance = [ ]
street2CheckCallRaiseDone = [ ]
street3CheckCallRaiseChance = [ ]
street3CheckCallRaiseDone = [ ]
street4CheckCallRaiseChance = [ ]
street4CheckCallRaiseDone = [ ]
#print "b4 totprof calc, len(playerIds)=", len(player_ids)
2009-03-10 21:01:35 +01:00
for pl in xrange ( len ( player_ids ) ) :
2008-12-13 18:52:25 +01:00
#print "pl=", pl
2008-12-13 18:54:32 +01:00
myTotalProfit = winnings [ pl ] # still need to deduct other costs
if antes :
myTotalProfit = winnings [ pl ] - antes [ pl ]
2009-03-10 21:01:35 +01:00
for i in xrange ( len ( actionTypes ) ) : #iterate through streets
#for j in xrange(len(actionTypes[i])): #iterate through names (using pl loop above)
for k in xrange ( len ( actionTypes [ i ] [ pl ] ) ) : #iterate through individual actions of that player on that street
2008-12-13 18:52:25 +01:00
myTotalProfit - = actionAmounts [ i ] [ pl ] [ k ]
myStreet1CheckCallRaiseChance = False
myStreet1CheckCallRaiseDone = False
myStreet2CheckCallRaiseChance = False
myStreet2CheckCallRaiseDone = False
myStreet3CheckCallRaiseChance = False
myStreet3CheckCallRaiseDone = False
myStreet4CheckCallRaiseChance = False
myStreet4CheckCallRaiseDone = False
#print "myTotalProfit=", myTotalProfit
totalProfit . append ( myTotalProfit )
#print "totalProfit[]=", totalProfit
street1CheckCallRaiseChance . append ( myStreet1CheckCallRaiseChance )
street1CheckCallRaiseDone . append ( myStreet1CheckCallRaiseDone )
street2CheckCallRaiseChance . append ( myStreet2CheckCallRaiseChance )
street2CheckCallRaiseDone . append ( myStreet2CheckCallRaiseDone )
street3CheckCallRaiseChance . append ( myStreet3CheckCallRaiseChance )
street3CheckCallRaiseDone . append ( myStreet3CheckCallRaiseDone )
street4CheckCallRaiseChance . append ( myStreet4CheckCallRaiseChance )
street4CheckCallRaiseDone . append ( myStreet4CheckCallRaiseDone )
result [ ' totalProfit ' ] = totalProfit
#print "res[totalProfit]=", result['totalProfit']
result [ ' street1CheckCallRaiseChance ' ] = street1CheckCallRaiseChance
result [ ' street1CheckCallRaiseDone ' ] = street1CheckCallRaiseDone
result [ ' street2CheckCallRaiseChance ' ] = street2CheckCallRaiseChance
result [ ' street2CheckCallRaiseDone ' ] = street2CheckCallRaiseDone
result [ ' street3CheckCallRaiseChance ' ] = street3CheckCallRaiseChance
result [ ' street3CheckCallRaiseDone ' ] = street3CheckCallRaiseDone
result [ ' street4CheckCallRaiseChance ' ] = street4CheckCallRaiseChance
result [ ' street4CheckCallRaiseDone ' ] = street4CheckCallRaiseDone
return result
#end def generateHudCacheData
def generateFoldToCB ( street , playerIDs , didStreetCB , streetCBDone , foldToStreetCBChance , foldToStreetCBDone , actionTypeByNo ) :
""" fills the passed foldToStreetCB* arrays appropriately depending on the given street """
#print "beginning of generateFoldToCB, street:", street, "len(actionTypeByNo):", len(actionTypeByNo)
#print "len(actionTypeByNo[street]):",len(actionTypeByNo[street])
firstCBReaction = 0
2009-03-09 11:41:02 +01:00
for action in xrange ( len ( actionTypeByNo [ street ] ) ) :
2008-12-13 18:52:25 +01:00
if actionTypeByNo [ street ] [ action ] [ 1 ] == " bet " :
for player in didStreetCB :
if player == actionTypeByNo [ street ] [ action ] [ 0 ] and firstCBReaction == 0 :
firstCBReaction = action + 1
break
for action in actionTypeByNo [ street ] [ firstCBReaction : ] :
2009-03-09 11:41:02 +01:00
for player in xrange ( len ( playerIDs ) ) :
2008-12-13 18:52:25 +01:00
if playerIDs [ player ] == action [ 0 ] :
foldToStreetCBChance [ player ] = True
if action [ 1 ] == " fold " :
foldToStreetCBDone [ player ] = True
#end def generateFoldToCB
2009-05-28 00:34:10 +02:00
def storeHudCache ( backend , cursor , base , category , gametypeId , hand_start_time , playerIds , hudImportData ) :
2009-05-22 00:29:34 +02:00
""" Modified version aiming for more speed ... """
2008-12-13 18:52:25 +01:00
# if (category=="holdem" or category=="omahahi" or category=="omahahilo"):
2009-05-28 00:34:10 +02:00
if use_date_in_hudcache :
#print "key =", "d%02d%02d%02d " % (hand_start_time.year-2000, hand_start_time.month, hand_start_time.day)
styleKey = " d %02d %02d %02d " % ( hand_start_time . year - 2000 , hand_start_time . month , hand_start_time . day )
else :
# hard-code styleKey as 'A000000' (all-time cache, no key) for now
styleKey = ' A000000 '
2008-12-13 18:52:25 +01:00
#print "storeHudCache, len(playerIds)=", len(playerIds), " len(vpip)=" \
#, len(hudImportData['street0VPI']), " len(totprof)=", len(hudImportData['totalProfit'])
2009-03-10 21:01:35 +01:00
for player in xrange ( len ( playerIds ) ) :
2008-12-13 18:52:25 +01:00
2009-05-22 00:29:34 +02:00
# Set up a clean row
row = [ ]
row . append ( 0 ) #blank for id
row . append ( gametypeId )
row . append ( playerIds [ player ] )
row . append ( len ( playerIds ) ) #seats
for i in xrange ( len ( hudImportData ) + 2 ) :
row . append ( 0 )
2008-12-13 18:52:25 +01:00
if base == " hold " :
row [ 4 ] = hudImportData [ ' position ' ] [ player ]
else :
row [ 4 ] = 0
row [ 5 ] = 1 #tourneysGametypeId
row [ 6 ] + = 1 #HDs
if hudImportData [ ' street0VPI ' ] [ player ] : row [ 7 ] + = 1
if hudImportData [ ' street0Aggr ' ] [ player ] : row [ 8 ] + = 1
2009-05-17 18:26:05 +02:00
if hudImportData [ ' street0_3BChance ' ] [ player ] : row [ 9 ] + = 1
if hudImportData [ ' street0_3BDone ' ] [ player ] : row [ 10 ] + = 1
2008-12-13 18:52:25 +01:00
if hudImportData [ ' street1Seen ' ] [ player ] : row [ 11 ] + = 1
if hudImportData [ ' street2Seen ' ] [ player ] : row [ 12 ] + = 1
if hudImportData [ ' street3Seen ' ] [ player ] : row [ 13 ] + = 1
if hudImportData [ ' street4Seen ' ] [ player ] : row [ 14 ] + = 1
if hudImportData [ ' sawShowdown ' ] [ player ] : row [ 15 ] + = 1
if hudImportData [ ' street1Aggr ' ] [ player ] : row [ 16 ] + = 1
if hudImportData [ ' street2Aggr ' ] [ player ] : row [ 17 ] + = 1
if hudImportData [ ' street3Aggr ' ] [ player ] : row [ 18 ] + = 1
if hudImportData [ ' street4Aggr ' ] [ player ] : row [ 19 ] + = 1
if hudImportData [ ' otherRaisedStreet1 ' ] [ player ] : row [ 20 ] + = 1
if hudImportData [ ' otherRaisedStreet2 ' ] [ player ] : row [ 21 ] + = 1
if hudImportData [ ' otherRaisedStreet3 ' ] [ player ] : row [ 22 ] + = 1
if hudImportData [ ' otherRaisedStreet4 ' ] [ player ] : row [ 23 ] + = 1
if hudImportData [ ' foldToOtherRaisedStreet1 ' ] [ player ] : row [ 24 ] + = 1
if hudImportData [ ' foldToOtherRaisedStreet2 ' ] [ player ] : row [ 25 ] + = 1
if hudImportData [ ' foldToOtherRaisedStreet3 ' ] [ player ] : row [ 26 ] + = 1
if hudImportData [ ' foldToOtherRaisedStreet4 ' ] [ player ] : row [ 27 ] + = 1
if hudImportData [ ' wonWhenSeenStreet1 ' ] [ player ] != 0.0 : row [ 28 ] + = hudImportData [ ' wonWhenSeenStreet1 ' ] [ player ]
if hudImportData [ ' wonAtSD ' ] [ player ] != 0.0 : row [ 29 ] + = hudImportData [ ' wonAtSD ' ] [ player ]
if hudImportData [ ' stealAttemptChance ' ] [ player ] : row [ 30 ] + = 1
if hudImportData [ ' stealAttempted ' ] [ player ] : row [ 31 ] + = 1
if hudImportData [ ' foldBbToStealChance ' ] [ player ] : row [ 32 ] + = 1
if hudImportData [ ' foldedBbToSteal ' ] [ player ] : row [ 33 ] + = 1
if hudImportData [ ' foldSbToStealChance ' ] [ player ] : row [ 34 ] + = 1
if hudImportData [ ' foldedSbToSteal ' ] [ player ] : row [ 35 ] + = 1
if hudImportData [ ' street1CBChance ' ] [ player ] : row [ 36 ] + = 1
if hudImportData [ ' street1CBDone ' ] [ player ] : row [ 37 ] + = 1
if hudImportData [ ' street2CBChance ' ] [ player ] : row [ 38 ] + = 1
if hudImportData [ ' street2CBDone ' ] [ player ] : row [ 39 ] + = 1
if hudImportData [ ' street3CBChance ' ] [ player ] : row [ 40 ] + = 1
if hudImportData [ ' street3CBDone ' ] [ player ] : row [ 41 ] + = 1
if hudImportData [ ' street4CBChance ' ] [ player ] : row [ 42 ] + = 1
if hudImportData [ ' street4CBDone ' ] [ player ] : row [ 43 ] + = 1
if hudImportData [ ' foldToStreet1CBChance ' ] [ player ] : row [ 44 ] + = 1
if hudImportData [ ' foldToStreet1CBDone ' ] [ player ] : row [ 45 ] + = 1
if hudImportData [ ' foldToStreet2CBChance ' ] [ player ] : row [ 46 ] + = 1
if hudImportData [ ' foldToStreet2CBDone ' ] [ player ] : row [ 47 ] + = 1
if hudImportData [ ' foldToStreet3CBChance ' ] [ player ] : row [ 48 ] + = 1
if hudImportData [ ' foldToStreet3CBDone ' ] [ player ] : row [ 49 ] + = 1
if hudImportData [ ' foldToStreet4CBChance ' ] [ player ] : row [ 50 ] + = 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 ]
if hudImportData [ ' street1CheckCallRaiseChance ' ] [ player ] : row [ 53 ] + = 1
if hudImportData [ ' street1CheckCallRaiseDone ' ] [ player ] : row [ 54 ] + = 1
if hudImportData [ ' street2CheckCallRaiseChance ' ] [ player ] : row [ 55 ] + = 1
if hudImportData [ ' street2CheckCallRaiseDone ' ] [ player ] : row [ 56 ] + = 1
if hudImportData [ ' street3CheckCallRaiseChance ' ] [ player ] : row [ 57 ] + = 1
if hudImportData [ ' street3CheckCallRaiseDone ' ] [ player ] : row [ 58 ] + = 1
if hudImportData [ ' street4CheckCallRaiseChance ' ] [ player ] : row [ 59 ] + = 1
if hudImportData [ ' street4CheckCallRaiseDone ' ] [ player ] : row [ 60 ] + = 1
2009-05-22 00:29:34 +02:00
# Try to do the update first:
num = cursor . execute ( """ UPDATE HudCache
SET HDs = HDs + % s , street0VPI = street0VPI + % s , street0Aggr = street0Aggr + % s ,
street0_3BChance = street0_3BChance + % s , street0_3BDone = street0_3BDone + % s ,
street1Seen = street1Seen + % s , street2Seen = street2Seen + % s , street3Seen = street3Seen + % s ,
street4Seen = street4Seen + % s , sawShowdown = sawShowdown + % s ,
street1Aggr = street1Aggr + % s , street2Aggr = street2Aggr + % s , street3Aggr = street3Aggr + % s ,
street4Aggr = street4Aggr + % s , otherRaisedStreet1 = otherRaisedStreet1 + % s ,
otherRaisedStreet2 = otherRaisedStreet2 + % s , otherRaisedStreet3 = otherRaisedStreet3 + % s ,
otherRaisedStreet4 = otherRaisedStreet4 + % s ,
foldToOtherRaisedStreet1 = foldToOtherRaisedStreet1 + % s , foldToOtherRaisedStreet2 = foldToOtherRaisedStreet2 + % s ,
foldToOtherRaisedStreet3 = foldToOtherRaisedStreet3 + % s , foldToOtherRaisedStreet4 = foldToOtherRaisedStreet4 + % s ,
wonWhenSeenStreet1 = wonWhenSeenStreet1 + % s , wonAtSD = wonAtSD + % s , stealAttemptChance = stealAttemptChance + % s ,
stealAttempted = stealAttempted + % s , foldBbToStealChance = foldBbToStealChance + % s ,
foldedBbToSteal = foldedBbToSteal + % s ,
foldSbToStealChance = foldSbToStealChance + % s , foldedSbToSteal = foldedSbToSteal + % s ,
street1CBChance = street1CBChance + % s , street1CBDone = street1CBDone + % s , street2CBChance = street2CBChance + % s ,
street2CBDone = street2CBDone + % s , street3CBChance = street3CBChance + % s ,
street3CBDone = street3CBDone + % s , street4CBChance = street4CBChance + % s , street4CBDone = street4CBDone + % s ,
foldToStreet1CBChance = foldToStreet1CBChance + % s , foldToStreet1CBDone = foldToStreet1CBDone + % s ,
foldToStreet2CBChance = foldToStreet2CBChance + % s , foldToStreet2CBDone = foldToStreet2CBDone + % s ,
foldToStreet3CBChance = foldToStreet3CBChance + % s ,
foldToStreet3CBDone = foldToStreet3CBDone + % s , foldToStreet4CBChance = foldToStreet4CBChance + % s ,
foldToStreet4CBDone = foldToStreet4CBDone + % s , totalProfit = totalProfit + % s ,
street1CheckCallRaiseChance = street1CheckCallRaiseChance + % s ,
street1CheckCallRaiseDone = street1CheckCallRaiseDone + % s , street2CheckCallRaiseChance = street2CheckCallRaiseChance + % s ,
street2CheckCallRaiseDone = street2CheckCallRaiseDone + % s , street3CheckCallRaiseChance = street3CheckCallRaiseChance + % s ,
street3CheckCallRaiseDone = street3CheckCallRaiseDone + % s , street4CheckCallRaiseChance = street4CheckCallRaiseChance + % s ,
street4CheckCallRaiseDone = street4CheckCallRaiseDone + % s
WHERE gametypeId + 0 = % s
AND playerId = % s
AND activeSeats = % s
AND position = % s
2009-05-28 00:34:10 +02:00
AND tourneyTypeId + 0 = % s
AND styleKey = % s
""" , (row[6], row[7], row[8], row[9], row[10],
2009-05-22 00:29:34 +02:00
row [ 11 ] , row [ 12 ] , row [ 13 ] , row [ 14 ] , row [ 15 ] ,
row [ 16 ] , row [ 17 ] , row [ 18 ] , row [ 19 ] , row [ 20 ] ,
row [ 21 ] , row [ 22 ] , row [ 23 ] , row [ 24 ] , row [ 25 ] ,
row [ 26 ] , row [ 27 ] , row [ 28 ] , row [ 29 ] , row [ 30 ] ,
row [ 31 ] , row [ 32 ] , row [ 33 ] , row [ 34 ] , row [ 35 ] ,
row [ 36 ] , row [ 37 ] , row [ 38 ] , row [ 39 ] , row [ 40 ] ,
row [ 41 ] , row [ 42 ] , row [ 43 ] , row [ 44 ] , row [ 45 ] ,
row [ 46 ] , row [ 47 ] , row [ 48 ] , row [ 49 ] , row [ 50 ] ,
row [ 51 ] , row [ 52 ] , row [ 53 ] , row [ 54 ] , row [ 55 ] ,
row [ 56 ] , row [ 57 ] , row [ 58 ] , row [ 59 ] , row [ 60 ] ,
2009-05-28 00:34:10 +02:00
row [ 1 ] , row [ 2 ] , row [ 3 ] , str ( row [ 4 ] ) , row [ 5 ] , styleKey ) )
2009-05-22 00:29:34 +02:00
# Test statusmessage to see if update worked, do insert if not
#print "storehud2, upd num =", num
if ( ( backend == PGSQL and cursor . statusmessage != " UPDATE 1 " )
or ( backend == MYSQL_INNODB and num == 0 ) ) :
#print "playerid before insert:",row[2]," num = ", num
2008-12-13 18:52:25 +01:00
cursor . execute ( """ INSERT INTO HudCache
2009-05-21 19:43:32 +02:00
( gametypeId , playerId , activeSeats , position , tourneyTypeId , styleKey ,
2009-05-17 18:26:05 +02:00
HDs , street0VPI , street0Aggr , street0_3BChance , street0_3BDone ,
2008-12-13 18:52:25 +01:00
street1Seen , street2Seen , street3Seen , street4Seen , sawShowdown ,
street1Aggr , street2Aggr , street3Aggr , street4Aggr , otherRaisedStreet1 ,
otherRaisedStreet2 , otherRaisedStreet3 , otherRaisedStreet4 , foldToOtherRaisedStreet1 , foldToOtherRaisedStreet2 ,
foldToOtherRaisedStreet3 , foldToOtherRaisedStreet4 , wonWhenSeenStreet1 , wonAtSD , stealAttemptChance ,
stealAttempted , foldBbToStealChance , foldedBbToSteal , foldSbToStealChance , foldedSbToSteal ,
street1CBChance , street1CBDone , street2CBChance , street2CBDone , street3CBChance ,
street3CBDone , street4CBChance , street4CBDone , foldToStreet1CBChance , foldToStreet1CBDone ,
foldToStreet2CBChance , foldToStreet2CBDone , foldToStreet3CBChance , foldToStreet3CBDone , foldToStreet4CBChance ,
foldToStreet4CBDone , totalProfit , street1CheckCallRaiseChance , street1CheckCallRaiseDone , street2CheckCallRaiseChance ,
street2CheckCallRaiseDone , street3CheckCallRaiseChance , street3CheckCallRaiseDone , street4CheckCallRaiseChance , street4CheckCallRaiseDone )
2009-05-21 19:43:32 +02:00
VALUES ( % s , % s , % s , % s , % s , % s ,
2008-12-13 18:52:25 +01:00
% s , % s , % s , % s , % s ,
% s , % s , % s , % s , % s ,
% s , % s , % s , % s , % s ,
% s , % s , % s , % s , % s ,
% s , % s , % s , % s , % s ,
% s , % s , % s , % s , % s ,
% s , % s , % s , % s , % s ,
% s , % s , % s , % s , % s ,
% s , % s , % s , % s , % s ,
% s , % s , % s , % s , % s ,
2009-05-21 19:43:32 +02:00
% s , % s , % s , % s , % s ) """
2009-05-28 00:34:10 +02:00
, ( row [ 1 ] , row [ 2 ] , row [ 3 ] , row [ 4 ] , row [ 5 ] , styleKey , row [ 6 ] , row [ 7 ] , row [ 8 ] , row [ 9 ] , row [ 10 ]
2009-05-21 19:43:32 +02:00
, row [ 11 ] , row [ 12 ] , row [ 13 ] , row [ 14 ] , row [ 15 ] , row [ 16 ] , row [ 17 ] , row [ 18 ] , row [ 19 ] , row [ 20 ]
, row [ 21 ] , row [ 22 ] , row [ 23 ] , row [ 24 ] , row [ 25 ] , row [ 26 ] , row [ 27 ] , row [ 28 ] , row [ 29 ] , row [ 30 ]
, row [ 31 ] , row [ 32 ] , row [ 33 ] , row [ 34 ] , row [ 35 ] , row [ 36 ] , row [ 37 ] , row [ 38 ] , row [ 39 ] , row [ 40 ]
, row [ 41 ] , row [ 42 ] , row [ 43 ] , row [ 44 ] , row [ 45 ] , row [ 46 ] , row [ 47 ] , row [ 48 ] , row [ 49 ] , row [ 50 ]
2009-05-22 00:29:34 +02:00
, row [ 51 ] , row [ 52 ] , row [ 53 ] , row [ 54 ] , row [ 55 ] , row [ 56 ] , row [ 57 ] , row [ 58 ] , row [ 59 ] , row [ 60 ] ) )
#print "hopefully inserted hud data line: ", cursor.statusmessage
# message seems to be "INSERT 0 1"
2008-12-13 18:52:25 +01:00
else :
2009-05-22 00:29:34 +02:00
#print "updated(2) hud data line"
pass
2008-12-13 18:52:25 +01:00
# else:
# print "todo: implement storeHudCache for stud base"
#end def storeHudCache
2009-05-28 00:34:10 +02:00
def storeHudCache2 ( backend , cursor , base , category , gametypeId , hand_start_time , playerIds , hudImportData ) :
2009-01-03 20:55:54 +01:00
""" Modified version aiming for more speed ... """
# if (category=="holdem" or category=="omahahi" or category=="omahahilo"):
2009-05-28 00:34:10 +02:00
if use_date_in_hudcache :
#print "key =", "d%02d%02d%02d " % (hand_start_time.year-2000, hand_start_time.month, hand_start_time.day)
styleKey = " d %02d %02d %02d " % ( hand_start_time . year - 2000 , hand_start_time . month , hand_start_time . day )
else :
# hard-code styleKey as 'A000000' (all-time cache, no key) for now
styleKey = ' A000000 '
2009-01-03 20:55:54 +01:00
2009-05-28 00:34:10 +02:00
#print "storeHudCache2, len(playerIds)=", len(playerIds), " len(vpip)=" \
2009-01-03 20:55:54 +01:00
#, len(hudImportData['street0VPI']), " len(totprof)=", len(hudImportData['totalProfit'])
2009-03-10 21:01:35 +01:00
for player in xrange ( len ( playerIds ) ) :
2009-01-03 20:55:54 +01:00
# Set up a clean row
row = [ ]
row . append ( 0 ) #blank for id
row . append ( gametypeId )
row . append ( playerIds [ player ] )
row . append ( len ( playerIds ) ) #seats
2009-03-09 11:41:02 +01:00
for i in xrange ( len ( hudImportData ) + 2 ) :
2009-01-03 20:55:54 +01:00
row . append ( 0 )
if base == " hold " :
row [ 4 ] = hudImportData [ ' position ' ] [ player ]
else :
row [ 4 ] = 0
row [ 5 ] = 1 #tourneysGametypeId
row [ 6 ] + = 1 #HDs
if hudImportData [ ' street0VPI ' ] [ player ] : row [ 7 ] + = 1
if hudImportData [ ' street0Aggr ' ] [ player ] : row [ 8 ] + = 1
2009-05-17 18:26:05 +02:00
if hudImportData [ ' street0_3BChance ' ] [ player ] : row [ 9 ] + = 1
if hudImportData [ ' street0_3BDone ' ] [ player ] : row [ 10 ] + = 1
2009-01-03 20:55:54 +01:00
if hudImportData [ ' street1Seen ' ] [ player ] : row [ 11 ] + = 1
if hudImportData [ ' street2Seen ' ] [ player ] : row [ 12 ] + = 1
if hudImportData [ ' street3Seen ' ] [ player ] : row [ 13 ] + = 1
if hudImportData [ ' street4Seen ' ] [ player ] : row [ 14 ] + = 1
if hudImportData [ ' sawShowdown ' ] [ player ] : row [ 15 ] + = 1
if hudImportData [ ' street1Aggr ' ] [ player ] : row [ 16 ] + = 1
if hudImportData [ ' street2Aggr ' ] [ player ] : row [ 17 ] + = 1
if hudImportData [ ' street3Aggr ' ] [ player ] : row [ 18 ] + = 1
if hudImportData [ ' street4Aggr ' ] [ player ] : row [ 19 ] + = 1
if hudImportData [ ' otherRaisedStreet1 ' ] [ player ] : row [ 20 ] + = 1
if hudImportData [ ' otherRaisedStreet2 ' ] [ player ] : row [ 21 ] + = 1
if hudImportData [ ' otherRaisedStreet3 ' ] [ player ] : row [ 22 ] + = 1
if hudImportData [ ' otherRaisedStreet4 ' ] [ player ] : row [ 23 ] + = 1
if hudImportData [ ' foldToOtherRaisedStreet1 ' ] [ player ] : row [ 24 ] + = 1
if hudImportData [ ' foldToOtherRaisedStreet2 ' ] [ player ] : row [ 25 ] + = 1
if hudImportData [ ' foldToOtherRaisedStreet3 ' ] [ player ] : row [ 26 ] + = 1
if hudImportData [ ' foldToOtherRaisedStreet4 ' ] [ player ] : row [ 27 ] + = 1
if hudImportData [ ' wonWhenSeenStreet1 ' ] [ player ] != 0.0 : row [ 28 ] + = hudImportData [ ' wonWhenSeenStreet1 ' ] [ player ]
if hudImportData [ ' wonAtSD ' ] [ player ] != 0.0 : row [ 29 ] + = hudImportData [ ' wonAtSD ' ] [ player ]
if hudImportData [ ' stealAttemptChance ' ] [ player ] : row [ 30 ] + = 1
if hudImportData [ ' stealAttempted ' ] [ player ] : row [ 31 ] + = 1
if hudImportData [ ' foldBbToStealChance ' ] [ player ] : row [ 32 ] + = 1
if hudImportData [ ' foldedBbToSteal ' ] [ player ] : row [ 33 ] + = 1
if hudImportData [ ' foldSbToStealChance ' ] [ player ] : row [ 34 ] + = 1
if hudImportData [ ' foldedSbToSteal ' ] [ player ] : row [ 35 ] + = 1
if hudImportData [ ' street1CBChance ' ] [ player ] : row [ 36 ] + = 1
if hudImportData [ ' street1CBDone ' ] [ player ] : row [ 37 ] + = 1
if hudImportData [ ' street2CBChance ' ] [ player ] : row [ 38 ] + = 1
if hudImportData [ ' street2CBDone ' ] [ player ] : row [ 39 ] + = 1
if hudImportData [ ' street3CBChance ' ] [ player ] : row [ 40 ] + = 1
if hudImportData [ ' street3CBDone ' ] [ player ] : row [ 41 ] + = 1
if hudImportData [ ' street4CBChance ' ] [ player ] : row [ 42 ] + = 1
if hudImportData [ ' street4CBDone ' ] [ player ] : row [ 43 ] + = 1
if hudImportData [ ' foldToStreet1CBChance ' ] [ player ] : row [ 44 ] + = 1
if hudImportData [ ' foldToStreet1CBDone ' ] [ player ] : row [ 45 ] + = 1
if hudImportData [ ' foldToStreet2CBChance ' ] [ player ] : row [ 46 ] + = 1
if hudImportData [ ' foldToStreet2CBDone ' ] [ player ] : row [ 47 ] + = 1
if hudImportData [ ' foldToStreet3CBChance ' ] [ player ] : row [ 48 ] + = 1
if hudImportData [ ' foldToStreet3CBDone ' ] [ player ] : row [ 49 ] + = 1
if hudImportData [ ' foldToStreet4CBChance ' ] [ player ] : row [ 50 ] + = 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 ]
if hudImportData [ ' street1CheckCallRaiseChance ' ] [ player ] : row [ 53 ] + = 1
if hudImportData [ ' street1CheckCallRaiseDone ' ] [ player ] : row [ 54 ] + = 1
if hudImportData [ ' street2CheckCallRaiseChance ' ] [ player ] : row [ 55 ] + = 1
if hudImportData [ ' street2CheckCallRaiseDone ' ] [ player ] : row [ 56 ] + = 1
if hudImportData [ ' street3CheckCallRaiseChance ' ] [ player ] : row [ 57 ] + = 1
if hudImportData [ ' street3CheckCallRaiseDone ' ] [ player ] : row [ 58 ] + = 1
if hudImportData [ ' street4CheckCallRaiseChance ' ] [ player ] : row [ 59 ] + = 1
if hudImportData [ ' street4CheckCallRaiseDone ' ] [ player ] : row [ 60 ] + = 1
# Try to do the update first:
num = cursor . execute ( """ UPDATE HudCache
SET HDs = HDs + % s , street0VPI = street0VPI + % s , street0Aggr = street0Aggr + % s ,
2009-04-26 22:31:05 +02:00
street0_3B4BChance = street0_3B4BChance + % s , street0_3B4BDone = street0_3B4BDone + % s ,
2009-01-03 20:55:54 +01:00
street1Seen = street1Seen + % s , street2Seen = street2Seen + % s , street3Seen = street3Seen + % s ,
street4Seen = street4Seen + % s , sawShowdown = sawShowdown + % s ,
street1Aggr = street1Aggr + % s , street2Aggr = street2Aggr + % s , street3Aggr = street3Aggr + % s ,
street4Aggr = street4Aggr + % s , otherRaisedStreet1 = otherRaisedStreet1 + % s ,
otherRaisedStreet2 = otherRaisedStreet2 + % s , otherRaisedStreet3 = otherRaisedStreet3 + % s ,
otherRaisedStreet4 = otherRaisedStreet4 + % s ,
foldToOtherRaisedStreet1 = foldToOtherRaisedStreet1 + % s , foldToOtherRaisedStreet2 = foldToOtherRaisedStreet2 + % s ,
foldToOtherRaisedStreet3 = foldToOtherRaisedStreet3 + % s , foldToOtherRaisedStreet4 = foldToOtherRaisedStreet4 + % s ,
wonWhenSeenStreet1 = wonWhenSeenStreet1 + % s , wonAtSD = wonAtSD + % s , stealAttemptChance = stealAttemptChance + % s ,
stealAttempted = stealAttempted + % s , foldBbToStealChance = foldBbToStealChance + % s ,
foldedBbToSteal = foldedBbToSteal + % s ,
foldSbToStealChance = foldSbToStealChance + % s , foldedSbToSteal = foldedSbToSteal + % s ,
street1CBChance = street1CBChance + % s , street1CBDone = street1CBDone + % s , street2CBChance = street2CBChance + % s ,
street2CBDone = street2CBDone + % s , street3CBChance = street3CBChance + % s ,
street3CBDone = street3CBDone + % s , street4CBChance = street4CBChance + % s , street4CBDone = street4CBDone + % s ,
foldToStreet1CBChance = foldToStreet1CBChance + % s , foldToStreet1CBDone = foldToStreet1CBDone + % s ,
foldToStreet2CBChance = foldToStreet2CBChance + % s , foldToStreet2CBDone = foldToStreet2CBDone + % s ,
foldToStreet3CBChance = foldToStreet3CBChance + % s ,
foldToStreet3CBDone = foldToStreet3CBDone + % s , foldToStreet4CBChance = foldToStreet4CBChance + % s ,
foldToStreet4CBDone = foldToStreet4CBDone + % s , totalProfit = totalProfit + % s ,
street1CheckCallRaiseChance = street1CheckCallRaiseChance + % s ,
street1CheckCallRaiseDone = street1CheckCallRaiseDone + % s , street2CheckCallRaiseChance = street2CheckCallRaiseChance + % s ,
street2CheckCallRaiseDone = street2CheckCallRaiseDone + % s , street3CheckCallRaiseChance = street3CheckCallRaiseChance + % s ,
street3CheckCallRaiseDone = street3CheckCallRaiseDone + % s , street4CheckCallRaiseChance = street4CheckCallRaiseChance + % s ,
street4CheckCallRaiseDone = street4CheckCallRaiseDone + % s
WHERE gametypeId + 0 = % s
AND playerId = % s
AND activeSeats = % s
AND position = % s
2009-05-28 00:34:10 +02:00
AND tourneyTypeId + 0 = % s
AND styleKey = % s
""" , (row[6], row[7], row[8], row[9], row[10],
2009-01-03 20:55:54 +01:00
row [ 11 ] , row [ 12 ] , row [ 13 ] , row [ 14 ] , row [ 15 ] ,
row [ 16 ] , row [ 17 ] , row [ 18 ] , row [ 19 ] , row [ 20 ] ,
row [ 21 ] , row [ 22 ] , row [ 23 ] , row [ 24 ] , row [ 25 ] ,
row [ 26 ] , row [ 27 ] , row [ 28 ] , row [ 29 ] , row [ 30 ] ,
row [ 31 ] , row [ 32 ] , row [ 33 ] , row [ 34 ] , row [ 35 ] ,
row [ 36 ] , row [ 37 ] , row [ 38 ] , row [ 39 ] , row [ 40 ] ,
row [ 41 ] , row [ 42 ] , row [ 43 ] , row [ 44 ] , row [ 45 ] ,
row [ 46 ] , row [ 47 ] , row [ 48 ] , row [ 49 ] , row [ 50 ] ,
row [ 51 ] , row [ 52 ] , row [ 53 ] , row [ 54 ] , row [ 55 ] ,
row [ 56 ] , row [ 57 ] , row [ 58 ] , row [ 59 ] , row [ 60 ] ,
2009-05-28 00:34:10 +02:00
row [ 1 ] , row [ 2 ] , row [ 3 ] , str ( row [ 4 ] ) , row [ 5 ] , styleKey ) )
2009-01-03 20:55:54 +01:00
# Test statusmessage to see if update worked, do insert if not
#print "storehud2, upd num =", num
if ( ( backend == PGSQL and cursor . statusmessage != " UPDATE 1 " )
or ( backend == MYSQL_INNODB and num == 0 ) ) :
#print "playerid before insert:",row[2]," num = ", num
cursor . execute ( """ INSERT INTO HudCache
2009-05-21 19:43:32 +02:00
( gametypeId , playerId , activeSeats , position , tourneyTypeId , styleKey ,
2009-05-17 18:26:05 +02:00
HDs , street0VPI , street0Aggr , street0_3BChance , street0_3BDone ,
2009-01-03 20:55:54 +01:00
street1Seen , street2Seen , street3Seen , street4Seen , sawShowdown ,
street1Aggr , street2Aggr , street3Aggr , street4Aggr , otherRaisedStreet1 ,
otherRaisedStreet2 , otherRaisedStreet3 , otherRaisedStreet4 , foldToOtherRaisedStreet1 , foldToOtherRaisedStreet2 ,
foldToOtherRaisedStreet3 , foldToOtherRaisedStreet4 , wonWhenSeenStreet1 , wonAtSD , stealAttemptChance ,
stealAttempted , foldBbToStealChance , foldedBbToSteal , foldSbToStealChance , foldedSbToSteal ,
street1CBChance , street1CBDone , street2CBChance , street2CBDone , street3CBChance ,
street3CBDone , street4CBChance , street4CBDone , foldToStreet1CBChance , foldToStreet1CBDone ,
foldToStreet2CBChance , foldToStreet2CBDone , foldToStreet3CBChance , foldToStreet3CBDone , foldToStreet4CBChance ,
foldToStreet4CBDone , totalProfit , street1CheckCallRaiseChance , street1CheckCallRaiseDone , street2CheckCallRaiseChance ,
street2CheckCallRaiseDone , street3CheckCallRaiseChance , street3CheckCallRaiseDone , street4CheckCallRaiseChance , street4CheckCallRaiseDone )
2009-05-21 19:43:32 +02:00
VALUES ( % s , % s , % s , % s , % s , % s ,
2009-01-03 20:55:54 +01:00
% s , % s , % s , % s , % s ,
% s , % s , % s , % s , % s ,
% s , % s , % s , % s , % s ,
% s , % s , % s , % s , % s ,
% s , % s , % s , % s , % s ,
% s , % s , % s , % s , % s ,
% s , % s , % s , % s , % s ,
% s , % s , % s , % s , % s ,
% s , % s , % s , % s , % s ,
% s , % s , % s , % s , % s ,
2009-05-21 19:43:32 +02:00
% s , % s , % s , % s , % s ) """
2009-05-28 00:34:10 +02:00
, ( row [ 1 ] , row [ 2 ] , row [ 3 ] , row [ 4 ] , row [ 5 ] , styleKey , row [ 6 ] , row [ 7 ] , row [ 8 ] , row [ 9 ] , row [ 10 ]
2009-05-21 19:43:32 +02:00
, row [ 11 ] , row [ 12 ] , row [ 13 ] , row [ 14 ] , row [ 15 ] , row [ 16 ] , row [ 17 ] , row [ 18 ] , row [ 19 ] , row [ 20 ]
, row [ 21 ] , row [ 22 ] , row [ 23 ] , row [ 24 ] , row [ 25 ] , row [ 26 ] , row [ 27 ] , row [ 28 ] , row [ 29 ] , row [ 30 ]
, row [ 31 ] , row [ 32 ] , row [ 33 ] , row [ 34 ] , row [ 35 ] , row [ 36 ] , row [ 37 ] , row [ 38 ] , row [ 39 ] , row [ 40 ]
, row [ 41 ] , row [ 42 ] , row [ 43 ] , row [ 44 ] , row [ 45 ] , row [ 46 ] , row [ 47 ] , row [ 48 ] , row [ 49 ] , row [ 50 ]
, row [ 51 ] , row [ 52 ] , row [ 53 ] , row [ 54 ] , row [ 55 ] , row [ 56 ] , row [ 57 ] , row [ 58 ] , row [ 59 ] , row [ 60 ] ) )
2009-01-03 20:55:54 +01:00
#print "hopefully inserted hud data line: ", cursor.statusmessage
# message seems to be "INSERT 0 1"
else :
#print "updated(2) hud data line"
pass
# else:
# print "todo: implement storeHudCache for stud base"
#end def storeHudCache2
2008-12-13 18:52:25 +01:00
def store_tourneys ( cursor , tourneyTypeId , siteTourneyNo , entries , prizepool , startTime ) :
cursor . execute ( " SELECT id FROM Tourneys WHERE siteTourneyNo= %s AND tourneyTypeId+0= %s " , ( siteTourneyNo , tourneyTypeId ) )
tmp = cursor . fetchone ( )
#print "tried SELECTing tourneys.id, result:",tmp
try :
len ( tmp )
except TypeError : #means we have to create new one
cursor . execute ( """ INSERT INTO Tourneys
( tourneyTypeId , siteTourneyNo , entries , prizepool , startTime )
VALUES ( % s , % s , % s , % s , % s ) """ , (tourneyTypeId, siteTourneyNo, entries, prizepool, startTime))
cursor . execute ( " SELECT id FROM Tourneys WHERE siteTourneyNo= %s AND tourneyTypeId+0= %s " , ( siteTourneyNo , tourneyTypeId ) )
tmp = cursor . fetchone ( )
#print "created new tourneys.id:",tmp
return tmp [ 0 ]
#end def store_tourneys
def store_tourneys_players ( cursor , tourney_id , player_ids , payin_amounts , ranks , winnings ) :
result = [ ]
#print "in store_tourneys_players. tourney_id:",tourney_id
#print "player_ids:",player_ids
#print "payin_amounts:",payin_amounts
#print "ranks:",ranks
#print "winnings:",winnings
2009-03-10 21:01:35 +01:00
for i in xrange ( len ( player_ids ) ) :
2008-12-13 18:52:25 +01:00
cursor . execute ( " SELECT id FROM TourneysPlayers WHERE tourneyId= %s AND playerId+0= %s " , ( tourney_id , player_ids [ i ] ) )
tmp = cursor . fetchone ( )
#print "tried SELECTing tourneys_players.id:",tmp
try :
len ( tmp )
except TypeError :
cursor . execute ( """ INSERT INTO TourneysPlayers
( tourneyId , playerId , payinAmount , rank , winnings ) VALUES ( % s , % s , % s , % s , % s ) """ ,
( tourney_id , player_ids [ i ] , payin_amounts [ i ] , ranks [ i ] , winnings [ i ] ) )
cursor . execute ( " SELECT id FROM TourneysPlayers WHERE tourneyId= %s AND playerId+0= %s " ,
( tourney_id , player_ids [ i ] ) )
tmp = cursor . fetchone ( )
#print "created new tourneys_players.id:",tmp
result . append ( tmp [ 0 ] )
return result
#end def store_tourneys_players