Merge branch 'master' of git://git.assembla.com/fpdboz.git
This commit is contained in:
commit
57447aa6b6
|
@ -1694,11 +1694,15 @@ class Database:
|
||||||
|
|
||||||
def storeHand(self, p, printdata = False):
|
def storeHand(self, p, printdata = False):
|
||||||
if printdata:
|
if printdata:
|
||||||
print "######## Hands ##########"
|
print _("######## Hands ##########")
|
||||||
import pprint
|
import pprint
|
||||||
pp = pprint.PrettyPrinter(indent=4)
|
pp = pprint.PrettyPrinter(indent=4)
|
||||||
pp.pprint(p)
|
pp.pprint(p)
|
||||||
print "###### End Hands ########"
|
print _("###### End Hands ########")
|
||||||
|
|
||||||
|
# Tablename can have odd charachers
|
||||||
|
p['tableName'] = Charset.to_db_utf8(p['tableName'])
|
||||||
|
|
||||||
#stores into table hands:
|
#stores into table hands:
|
||||||
q = self.sql.query['store_hand']
|
q = self.sql.query['store_hand']
|
||||||
|
|
||||||
|
|
|
@ -37,7 +37,8 @@ class Fulltilt(HandHistoryConverter):
|
||||||
substitutions = {
|
substitutions = {
|
||||||
'LEGAL_ISO' : "USD|EUR|GBP|CAD|FPP", # legal ISO currency codes
|
'LEGAL_ISO' : "USD|EUR|GBP|CAD|FPP", # legal ISO currency codes
|
||||||
'LS' : u"\$|\u20AC|\xe2\x82\xac|", # legal currency symbols - Euro(cp1252, utf-8)
|
'LS' : u"\$|\u20AC|\xe2\x82\xac|", # legal currency symbols - Euro(cp1252, utf-8)
|
||||||
'TAB' : u"-\u2013\s\da-zA-Z"
|
'TAB' : u"-\u2013'\s\da-zA-Z", # legal characters for tablename
|
||||||
|
'NUM' : u".,\d", # legal characters in number format
|
||||||
}
|
}
|
||||||
|
|
||||||
# Static regexes
|
# Static regexes
|
||||||
|
@ -45,10 +46,10 @@ class Fulltilt(HandHistoryConverter):
|
||||||
(?:(?P<TOURNAMENT>.+)\s\((?P<TOURNO>\d+)\),\s)?
|
(?:(?P<TOURNAMENT>.+)\s\((?P<TOURNO>\d+)\),\s)?
|
||||||
.+
|
.+
|
||||||
-\s(?P<CURRENCY>[%(LS)s]|)?
|
-\s(?P<CURRENCY>[%(LS)s]|)?
|
||||||
(?P<SB>[.0-9]+)/
|
(?P<SB>[%(NUM)s]+)/
|
||||||
[%(LS)s]?(?P<BB>[.0-9]+)\s
|
[%(LS)s]?(?P<BB>[%(NUM)s]+)\s
|
||||||
(Ante\s\$?(?P<ANTE>[.0-9]+)\s)?-\s
|
(Ante\s\$?(?P<ANTE>[%(NUM)s]+)\s)?-\s
|
||||||
[%(LS)s]?(?P<CAP>[.0-9]+\sCap\s)?
|
[%(LS)s]?(?P<CAP>[%(NUM)s]+\sCap\s)?
|
||||||
(?P<LIMIT>(No\sLimit|Pot\sLimit|Limit))?\s
|
(?P<LIMIT>(No\sLimit|Pot\sLimit|Limit))?\s
|
||||||
(?P<GAME>(Hold\'em|Omaha\sHi|Omaha\sH/L|7\sCard\sStud|Stud\sH/L|Razz|Stud\sHi|2-7\sTriple\sDraw|5\sCard\sDraw|Badugi))
|
(?P<GAME>(Hold\'em|Omaha\sHi|Omaha\sH/L|7\sCard\sStud|Stud\sH/L|Razz|Stud\sHi|2-7\sTriple\sDraw|5\sCard\sDraw|Badugi))
|
||||||
''' % substitutions, re.VERBOSE)
|
''' % substitutions, re.VERBOSE)
|
||||||
|
@ -60,7 +61,7 @@ class Fulltilt(HandHistoryConverter):
|
||||||
(?P<PLAY>Play\sChip\s|PC)?
|
(?P<PLAY>Play\sChip\s|PC)?
|
||||||
(?P<TABLE>[%(TAB)s]+)\s
|
(?P<TABLE>[%(TAB)s]+)\s
|
||||||
(\((?P<TABLEATTRIBUTES>.+)\)\s)?-\s
|
(\((?P<TABLEATTRIBUTES>.+)\)\s)?-\s
|
||||||
[%(LS)s]?(?P<SB>[.0-9]+)/[%(LS)s]?(?P<BB>[.0-9]+)\s(Ante\s[%(LS)s]?(?P<ANTE>[.0-9]+)\s)?-\s
|
[%(LS)s]?(?P<SB>[%(NUM)s]+)/[%(LS)s]?(?P<BB>[%(NUM)s]+)\s(Ante\s[%(LS)s]?(?P<ANTE>[.0-9]+)\s)?-\s
|
||||||
[%(LS)s]?(?P<CAP>[.0-9]+\sCap\s)?
|
[%(LS)s]?(?P<CAP>[.0-9]+\sCap\s)?
|
||||||
(?P<GAMETYPE>[-\da-zA-Z\/\'\s]+)\s-\s
|
(?P<GAMETYPE>[-\da-zA-Z\/\'\s]+)\s-\s
|
||||||
(?P<DATETIME>.*$)
|
(?P<DATETIME>.*$)
|
||||||
|
@ -140,16 +141,16 @@ class Fulltilt(HandHistoryConverter):
|
||||||
self.substitutions['PLAYERS'] = player_re
|
self.substitutions['PLAYERS'] = player_re
|
||||||
|
|
||||||
logging.debug("player_re: " + player_re)
|
logging.debug("player_re: " + player_re)
|
||||||
self.re_PostSB = re.compile(r"^%(PLAYERS)s posts the small blind of [%(LS)s]?(?P<SB>[.0-9]+)" % self.substitutions, re.MULTILINE)
|
self.re_PostSB = re.compile(r"^%(PLAYERS)s posts the small blind of [%(LS)s]?(?P<SB>[%(NUM)s]+)" % self.substitutions, re.MULTILINE)
|
||||||
self.re_PostDead = re.compile(r"^%(PLAYERS)s posts a dead small blind of [%(LS)s]?(?P<SB>[.0-9]+)" % self.substitutions, re.MULTILINE)
|
self.re_PostDead = re.compile(r"^%(PLAYERS)s posts a dead small blind of [%(LS)s]?(?P<SB>[%(NUM)s]+)" % self.substitutions, re.MULTILINE)
|
||||||
self.re_PostBB = re.compile(r"^%(PLAYERS)s posts (the big blind of )?[%(LS)s]?(?P<BB>[.0-9]+)" % self.substitutions, re.MULTILINE)
|
self.re_PostBB = re.compile(r"^%(PLAYERS)s posts (the big blind of )?[%(LS)s]?(?P<BB>[%(NUM)s]+)" % self.substitutions, re.MULTILINE)
|
||||||
self.re_Antes = re.compile(r"^%(PLAYERS)s antes [%(LS)s]?(?P<ANTE>[.0-9]+)" % self.substitutions, re.MULTILINE)
|
self.re_Antes = re.compile(r"^%(PLAYERS)s antes [%(LS)s]?(?P<ANTE>[%(NUM)s]+)" % self.substitutions, re.MULTILINE)
|
||||||
self.re_BringIn = re.compile(r"^%(PLAYERS)s brings in for [%(LS)s]?(?P<BRINGIN>[.0-9]+)" % self.substitutions, re.MULTILINE)
|
self.re_BringIn = re.compile(r"^%(PLAYERS)s brings in for [%(LS)s]?(?P<BRINGIN>[%(NUM)s]+)" % self.substitutions, re.MULTILINE)
|
||||||
self.re_PostBoth = re.compile(r"^%(PLAYERS)s posts small \& big blinds \[[%(LS)s]? (?P<SBBB>[.0-9]+)" % self.substitutions, re.MULTILINE)
|
self.re_PostBoth = re.compile(r"^%(PLAYERS)s posts small \& big blinds \[[%(LS)s]? (?P<SBBB>[%(NUM)s]+)" % self.substitutions, re.MULTILINE)
|
||||||
self.re_HeroCards = re.compile(r"^Dealt to %s(?: \[(?P<OLDCARDS>.+?)\])?( \[(?P<NEWCARDS>.+?)\])" % player_re, re.MULTILINE)
|
self.re_HeroCards = re.compile(r"^Dealt to %s(?: \[(?P<OLDCARDS>.+?)\])?( \[(?P<NEWCARDS>.+?)\])" % player_re, re.MULTILINE)
|
||||||
self.re_Action = re.compile(r"^%(PLAYERS)s(?P<ATYPE> bets| checks| raises to| completes it to| calls| folds)( [%(LS)s]?(?P<BET>[.,\d]+))?" % self.substitutions, re.MULTILINE)
|
self.re_Action = re.compile(r"^%(PLAYERS)s(?P<ATYPE> bets| checks| raises to| completes it to| calls| folds)( [%(LS)s]?(?P<BET>[%(NUM)s]+))?" % self.substitutions, re.MULTILINE)
|
||||||
self.re_ShowdownAction = re.compile(r"^%s shows \[(?P<CARDS>.*)\]" % player_re, re.MULTILINE)
|
self.re_ShowdownAction = re.compile(r"^%s shows \[(?P<CARDS>.*)\]" % player_re, re.MULTILINE)
|
||||||
self.re_CollectPot = re.compile(r"^Seat (?P<SEAT>[0-9]+): %(PLAYERS)s (\(button\) |\(small blind\) |\(big blind\) )?(collected|showed \[.*\] and won) \([%(LS)s]?(?P<POT>[.,\d]+)\)(, mucked| with.*)" % self.substitutions, re.MULTILINE)
|
self.re_CollectPot = re.compile(r"^Seat (?P<SEAT>[0-9]+): %(PLAYERS)s (\(button\) |\(small blind\) |\(big blind\) )?(collected|showed \[.*\] and won) \([%(LS)s]?(?P<POT>[%(NUM)s]+)\)(, mucked| with.*)" % self.substitutions, re.MULTILINE)
|
||||||
self.re_SitsOut = re.compile(r"^%s sits out" % player_re, re.MULTILINE)
|
self.re_SitsOut = re.compile(r"^%s sits out" % player_re, re.MULTILINE)
|
||||||
self.re_ShownCards = re.compile(r"^Seat (?P<SEAT>[0-9]+): %s (\(button\) |\(small blind\) |\(big blind\) )?(?P<ACT>showed|mucked) \[(?P<CARDS>.*)\].*" % player_re, re.MULTILINE)
|
self.re_ShownCards = re.compile(r"^Seat (?P<SEAT>[0-9]+): %s (\(button\) |\(small blind\) |\(big blind\) )?(?P<ACT>showed|mucked) \[(?P<CARDS>.*)\].*" % player_re, re.MULTILINE)
|
||||||
|
|
||||||
|
@ -206,8 +207,8 @@ class Fulltilt(HandHistoryConverter):
|
||||||
info['limitType'] = 'cn'
|
info['limitType'] = 'cn'
|
||||||
else:
|
else:
|
||||||
info['limitType'] = limits[mg['LIMIT']]
|
info['limitType'] = limits[mg['LIMIT']]
|
||||||
info['sb'] = mg['SB']
|
info['sb'] = self.clearMoneyString(mg['SB'])
|
||||||
info['bb'] = mg['BB']
|
info['bb'] = self.clearMoneyString(mg['BB'])
|
||||||
if mg['GAME'] is not None:
|
if mg['GAME'] is not None:
|
||||||
(info['base'], info['category']) = games[mg['GAME']]
|
(info['base'], info['category']) = games[mg['GAME']]
|
||||||
if mg['CURRENCY'] is not None:
|
if mg['CURRENCY'] is not None:
|
||||||
|
@ -339,15 +340,15 @@ class Fulltilt(HandHistoryConverter):
|
||||||
def readBlinds(self, hand):
|
def readBlinds(self, hand):
|
||||||
try:
|
try:
|
||||||
m = self.re_PostSB.search(hand.handText)
|
m = self.re_PostSB.search(hand.handText)
|
||||||
hand.addBlind(m.group('PNAME'), 'small blind', m.group('SB'))
|
hand.addBlind(m.group('PNAME'), 'small blind', self.clearMoneyString(m.group('SB')))
|
||||||
except: # no small blind
|
except: # no small blind
|
||||||
hand.addBlind(None, None, None)
|
hand.addBlind(None, None, None)
|
||||||
for a in self.re_PostDead.finditer(hand.handText):
|
for a in self.re_PostDead.finditer(hand.handText):
|
||||||
hand.addBlind(a.group('PNAME'), 'secondsb', a.group('SB'))
|
hand.addBlind(a.group('PNAME'), 'secondsb', self.clearMoneyString(a.group('SB')))
|
||||||
for a in self.re_PostBB.finditer(hand.handText):
|
for a in self.re_PostBB.finditer(hand.handText):
|
||||||
hand.addBlind(a.group('PNAME'), 'big blind', a.group('BB'))
|
hand.addBlind(a.group('PNAME'), 'big blind', self.clearMoneyString(a.group('BB')))
|
||||||
for a in self.re_PostBoth.finditer(hand.handText):
|
for a in self.re_PostBoth.finditer(hand.handText):
|
||||||
hand.addBlind(a.group('PNAME'), 'small & big blinds', a.group('SBBB'))
|
hand.addBlind(a.group('PNAME'), 'small & big blinds', self.clearMoneyString(a.group('SBBB')))
|
||||||
|
|
||||||
def readAntes(self, hand):
|
def readAntes(self, hand):
|
||||||
logging.debug(_("reading antes"))
|
logging.debug(_("reading antes"))
|
||||||
|
@ -528,10 +529,10 @@ class Fulltilt(HandHistoryConverter):
|
||||||
|
|
||||||
# Additional info can be stored in the tourney object
|
# Additional info can be stored in the tourney object
|
||||||
if mg['BUYIN'] is not None:
|
if mg['BUYIN'] is not None:
|
||||||
tourney.buyin = 100*Decimal(re.sub(u',', u'', "%s" % mg['BUYIN']))
|
tourney.buyin = 100*Decimal(self.clearMoneyString(mg['BUYIN']))
|
||||||
tourney.fee = 0
|
tourney.fee = 0
|
||||||
if mg['FEE'] is not None:
|
if mg['FEE'] is not None:
|
||||||
tourney.fee = 100*Decimal(re.sub(u',', u'', "%s" % mg['FEE']))
|
tourney.fee = 100*Decimal(self.clearMoneyString(mg['FEE']))
|
||||||
if mg['TOURNAMENT_NAME'] is not None:
|
if mg['TOURNAMENT_NAME'] is not None:
|
||||||
# Tournament Name can have a trailing space at the end (depending on the tournament description)
|
# Tournament Name can have a trailing space at the end (depending on the tournament description)
|
||||||
tourney.tourneyName = mg['TOURNAMENT_NAME'].rstrip()
|
tourney.tourneyName = mg['TOURNAMENT_NAME'].rstrip()
|
||||||
|
@ -575,25 +576,25 @@ class Fulltilt(HandHistoryConverter):
|
||||||
mg = m.groupdict()
|
mg = m.groupdict()
|
||||||
if tourney.isMatrix :
|
if tourney.isMatrix :
|
||||||
if mg['BUYIN'] is not None:
|
if mg['BUYIN'] is not None:
|
||||||
tourney.subTourneyBuyin = 100*Decimal(re.sub(u',', u'', "%s" % mg['BUYIN']))
|
tourney.subTourneyBuyin = 100*Decimal(self.clearMoneyString(mg['BUYIN']))
|
||||||
tourney.subTourneyFee = 0
|
tourney.subTourneyFee = 0
|
||||||
if mg['FEE'] is not None:
|
if mg['FEE'] is not None:
|
||||||
tourney.subTourneyFee = 100*Decimal(re.sub(u',', u'', "%s" % mg['FEE']))
|
tourney.subTourneyFee = 100*Decimal(self.clearMoneyString(mg['FEE']))
|
||||||
else :
|
else :
|
||||||
if mg['BUYIN'] is not None:
|
if mg['BUYIN'] is not None:
|
||||||
if tourney.buyin is None:
|
if tourney.buyin is None:
|
||||||
tourney.buyin = 100*Decimal(re.sub(u',', u'', "%s" % mg['BUYIN']))
|
tourney.buyin = 100*Decimal(clearMoneyString(mg['BUYIN']))
|
||||||
else :
|
else :
|
||||||
if 100*Decimal(re.sub(u',', u'', "%s" % mg['BUYIN'])) != tourney.buyin:
|
if 100*Decimal(clearMoneyString(mg['BUYIN'])) != tourney.buyin:
|
||||||
log.error(_("Conflict between buyins read in topline (%s) and in BuyIn field (%s)") % (tourney.buyin, 100*Decimal(re.sub(u',', u'', "%s" % mg['BUYIN']))) )
|
log.error(_("Conflict between buyins read in topline (%s) and in BuyIn field (%s)") % (tourney.buyin, 100*Decimal(re.sub(u',', u'', "%s" % mg['BUYIN']))) )
|
||||||
tourney.subTourneyBuyin = 100*Decimal(re.sub(u',', u'', "%s" % mg['BUYIN']))
|
tourney.subTourneyBuyin = 100*Decimal(clearMoneyString(mg['BUYIN']))
|
||||||
if mg['FEE'] is not None:
|
if mg['FEE'] is not None:
|
||||||
if tourney.fee is None:
|
if tourney.fee is None:
|
||||||
tourney.fee = 100*Decimal(re.sub(u',', u'', "%s" % mg['FEE']))
|
tourney.fee = 100*Decimal(clearMoneyString(mg['FEE']))
|
||||||
else :
|
else :
|
||||||
if 100*Decimal(re.sub(u',', u'', "%s" % mg['FEE'])) != tourney.fee:
|
if 100*Decimal(clearMoneyString(mg['FEE'])) != tourney.fee:
|
||||||
log.error(_("Conflict between fees read in topline (%s) and in BuyIn field (%s)") % (tourney.fee, 100*Decimal(re.sub(u',', u'', "%s" % mg['FEE']))) )
|
log.error(_("Conflict between fees read in topline (%s) and in BuyIn field (%s)") % (tourney.fee, 100*Decimal(clearMoneyString(mg['FEE']))) )
|
||||||
tourney.subTourneyFee = 100*Decimal(re.sub(u',', u'', "%s" % mg['FEE']))
|
tourney.subTourneyFee = 100*Decimal(clearMoneyString(mg['FEE']))
|
||||||
|
|
||||||
if tourney.buyin is None:
|
if tourney.buyin is None:
|
||||||
log.info(_("Unable to affect a buyin to this tournament : assume it's a freeroll"))
|
log.info(_("Unable to affect a buyin to this tournament : assume it's a freeroll"))
|
||||||
|
@ -662,10 +663,10 @@ class Fulltilt(HandHistoryConverter):
|
||||||
tourney.koCounts.update( { tourney.hero : Decimal(mg['COUNT_KO']) } )
|
tourney.koCounts.update( { tourney.hero : Decimal(mg['COUNT_KO']) } )
|
||||||
|
|
||||||
# Deal with money amounts
|
# Deal with money amounts
|
||||||
tourney.koBounty = 100*Decimal(re.sub(u',', u'', "%s" % tourney.koBounty))
|
tourney.koBounty = 100*Decimal(clearMoneyString(tourney.koBounty))
|
||||||
tourney.prizepool = 100*Decimal(re.sub(u',', u'', "%s" % tourney.prizepool))
|
tourney.prizepool = 100*Decimal(clearMoneyString(tourney.prizepool))
|
||||||
tourney.rebuyCost = 100*Decimal(re.sub(u',', u'', "%s" % tourney.rebuyCost))
|
tourney.rebuyCost = 100*Decimal(clearMoneyString(tourney.rebuyCost))
|
||||||
tourney.addOnCost = 100*Decimal(re.sub(u',', u'', "%s" % tourney.addOnCost))
|
tourney.addOnCost = 100*Decimal(clearMoneyString(tourney.addOnCost))
|
||||||
|
|
||||||
# Calculate payin amounts and update winnings -- not possible to take into account nb of rebuys, addons or Knockouts for other players than hero on FTP
|
# Calculate payin amounts and update winnings -- not possible to take into account nb of rebuys, addons or Knockouts for other players than hero on FTP
|
||||||
for p in tourney.players :
|
for p in tourney.players :
|
||||||
|
@ -691,7 +692,7 @@ class Fulltilt(HandHistoryConverter):
|
||||||
rank = Decimal(a.group('RANK'))
|
rank = Decimal(a.group('RANK'))
|
||||||
|
|
||||||
if a.group('WINNING') is not None:
|
if a.group('WINNING') is not None:
|
||||||
winnings = 100*Decimal(re.sub(u',', u'', "%s" % a.group('WINNING')))
|
winnings = 100*Decimal(clearMoneyString(a.group('WINNING')))
|
||||||
else:
|
else:
|
||||||
winnings = "0"
|
winnings = "0"
|
||||||
|
|
||||||
|
|
|
@ -118,11 +118,11 @@ class GuiReplayer:
|
||||||
self.table[i]={"name":self.MyHand.players[i][1],"stack":Decimal(self.MyHand.players[i][2]),"x":x,"y":y,"chips":0,"status":"live"} #save coordinates of each player
|
self.table[i]={"name":self.MyHand.players[i][1],"stack":Decimal(self.MyHand.players[i][2]),"x":x,"y":y,"chips":0,"status":"live"} #save coordinates of each player
|
||||||
try:
|
try:
|
||||||
self.table[i]['holecards']=self.MyHand.holecards["PREFLOP"][self.MyHand.players[i][1]][1]+' '+self.MyHand.holecards["PREFLOP"][self.MyHand.players[i][1]][2]
|
self.table[i]['holecards']=self.MyHand.holecards["PREFLOP"][self.MyHand.players[i][1]][1]+' '+self.MyHand.holecards["PREFLOP"][self.MyHand.players[i][1]][2]
|
||||||
print "holecards",self.table[i]['holecards']
|
print "holecards: ",self.table[i]['holecards']
|
||||||
except:
|
except:
|
||||||
self.table[i]['holecards']=''
|
self.table[i]['holecards']=''
|
||||||
except IndexError: #if seat is empty
|
except IndexError: #if seat is empty
|
||||||
print "seat",i+1,"out of",self.maxseats,"empty"
|
print "seat ",i+1," out of ",self.maxseats," empty"
|
||||||
|
|
||||||
self.actions=[] #create list with all actions
|
self.actions=[] #create list with all actions
|
||||||
|
|
||||||
|
@ -236,7 +236,7 @@ class GuiReplayer:
|
||||||
rect = gtk.gdk.Rectangle(270,270,100,50)
|
rect = gtk.gdk.Rectangle(270,270,100,50)
|
||||||
self.area.window.invalidate_rect(rect, True) #refresh pot area
|
self.area.window.invalidate_rect(rect, True) #refresh pot area
|
||||||
self.area.window.process_updates(True)
|
self.area.window.process_updates(True)
|
||||||
print "draw action",self.action_number,self.actions[self.action_number][1],self.actions[self.action_number][2],self.actions[self.action_number][3]
|
print "draw action: ",self.action_number,self.actions[self.action_number][1],self.actions[self.action_number][2],self.actions[self.action_number][3]
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -155,15 +155,10 @@ class GuiSessionViewer (threading.Thread):
|
||||||
# make sure Hand column is not displayed
|
# make sure Hand column is not displayed
|
||||||
#[x for x in self.columns if x[0] == 'hand'][0][1] = False
|
#[x for x in self.columns if x[0] == 'hand'][0][1] = False
|
||||||
if DEBUG == False:
|
if DEBUG == False:
|
||||||
warning_string = """
|
warning_string = _("Session Viewer is proof of concept code only, and contains many bugs.\n")
|
||||||
Session Viewer is proof of concept code only, and contains many bugs.
|
warning_string += _("Feel free to use the viewer, but there is no guarantee that the data is accurate.\n")
|
||||||
|
warning_string += _("If you are interested in developing the code further please contact us via the usual channels.\n")
|
||||||
Feel free to use the viewer, but there is no guarantee that the data is accurate.
|
warning_string += _("Thankyou")
|
||||||
|
|
||||||
If you are interested in developing the code further please contact us via the usual channels.
|
|
||||||
|
|
||||||
Thankyou
|
|
||||||
"""
|
|
||||||
self.warning_box(warning_string)
|
self.warning_box(warning_string)
|
||||||
|
|
||||||
def warning_box(self, str, diatitle=_("FPDB WARNING")):
|
def warning_box(self, str, diatitle=_("FPDB WARNING")):
|
||||||
|
|
|
@ -54,15 +54,10 @@ class GuiStove():
|
||||||
self.mainHBox.show_all()
|
self.mainHBox.show_all()
|
||||||
|
|
||||||
if DEBUG == False:
|
if DEBUG == False:
|
||||||
warning_string = _("""
|
warning_string = _("Stove is a GUI mockup of a EV calculation page, and completely non functional.\n")
|
||||||
Stove is a GUI mockup of a EV calculation page, and completely non functional.
|
warning_string = _("Unless you are interested in developing this feature, please ignore this page.\n")
|
||||||
|
warning_string = _("If you are interested in developing the code further see GuiStove.py and Stove.py\n")
|
||||||
Unless you are interested in developing this feature, please ignore this page.
|
warning_string = _("Thank you\n")
|
||||||
|
|
||||||
If you are interested in developing the code further see GuiStove.py and Stove.py
|
|
||||||
|
|
||||||
Thankyou
|
|
||||||
""")
|
|
||||||
self.warning_box(warning_string)
|
self.warning_box(warning_string)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -581,6 +581,7 @@ Left-Drag to Move"
|
||||||
</hhcs>
|
</hhcs>
|
||||||
|
|
||||||
<supported_databases>
|
<supported_databases>
|
||||||
|
<!--<database db_name="fpdbtest" db_server="mysql" db_ip="localhost" db_user="fpdb" db_pass="fpdb"></database>-->
|
||||||
<database db_ip="localhost" db_name="fpdb" db_pass="fpdb" db_server="sqlite" db_user="fpdb"/>
|
<database db_ip="localhost" db_name="fpdb" db_pass="fpdb" db_server="sqlite" db_user="fpdb"/>
|
||||||
</supported_databases>
|
</supported_databases>
|
||||||
|
|
||||||
|
|
|
@ -323,7 +323,7 @@ def idle_resize(hud):
|
||||||
[aw.update_card_positions() for aw in hud.aux_windows]
|
[aw.update_card_positions() for aw in hud.aux_windows]
|
||||||
hud.resize_windows()
|
hud.resize_windows()
|
||||||
except:
|
except:
|
||||||
log.exception("Error resizing HUD for table: %s." % hud.table.title)
|
log.exception(_("Error resizing HUD for table: %s.") % hud.table.title)
|
||||||
finally:
|
finally:
|
||||||
gtk.gdk.threads_leave()
|
gtk.gdk.threads_leave()
|
||||||
|
|
||||||
|
@ -337,7 +337,7 @@ def idle_kill(hud_main, table):
|
||||||
del(hud_main.hud_dict[table])
|
del(hud_main.hud_dict[table])
|
||||||
hud_main.main_window.resize(1, 1)
|
hud_main.main_window.resize(1, 1)
|
||||||
except:
|
except:
|
||||||
log.exception("Error killing HUD for table: %s." % table.title)
|
log.exception(_("Error killing HUD for table: %s.") % table.title)
|
||||||
finally:
|
finally:
|
||||||
gtk.gdk.threads_leave()
|
gtk.gdk.threads_leave()
|
||||||
|
|
||||||
|
@ -360,7 +360,7 @@ def idle_create(hud_main, new_hand_id, table, temp_key, max, poker_game, type, s
|
||||||
hud_main.hud_dict[temp_key].update(new_hand_id, hud_main.config)
|
hud_main.hud_dict[temp_key].update(new_hand_id, hud_main.config)
|
||||||
hud_main.hud_dict[temp_key].reposition_windows()
|
hud_main.hud_dict[temp_key].reposition_windows()
|
||||||
except:
|
except:
|
||||||
log.exception("Error creating HUD for hand %s." % new_hand_id)
|
log.exception(_("Error creating HUD for hand %s.") % new_hand_id)
|
||||||
finally:
|
finally:
|
||||||
gtk.gdk.threads_leave()
|
gtk.gdk.threads_leave()
|
||||||
return False
|
return False
|
||||||
|
@ -371,7 +371,7 @@ def idle_update(hud_main, new_hand_id, table_name, config):
|
||||||
hud_main.hud_dict[table_name].update(new_hand_id, config)
|
hud_main.hud_dict[table_name].update(new_hand_id, config)
|
||||||
[aw.update_gui(new_hand_id) for aw in hud_main.hud_dict[table_name].aux_windows]
|
[aw.update_gui(new_hand_id) for aw in hud_main.hud_dict[table_name].aux_windows]
|
||||||
except:
|
except:
|
||||||
log.exception("Error updating HUD for hand %s." % new_hand_id)
|
log.exception(_("Error updating HUD for hand %s.") % new_hand_id)
|
||||||
finally:
|
finally:
|
||||||
gtk.gdk.threads_leave()
|
gtk.gdk.threads_leave()
|
||||||
return False
|
return False
|
||||||
|
|
|
@ -675,6 +675,11 @@ or None if we fail to get the info """
|
||||||
# PokerStars: WCOOP 2nd Chance 02: $1,050 NLHE - Tournament 307521826 Table 1 - Blinds $30/$60
|
# PokerStars: WCOOP 2nd Chance 02: $1,050 NLHE - Tournament 307521826 Table 1 - Blinds $30/$60
|
||||||
return "%s.+Table (\d+)" % (tournament, )
|
return "%s.+Table (\d+)" % (tournament, )
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def clearMoneyString(money):
|
||||||
|
"Renders 'numbers' like '1 200' and '2,000'"
|
||||||
|
return money.replace(' ', '').replace(',', '')
|
||||||
|
|
||||||
def getTableTitleRe(config, sitename, *args, **kwargs):
|
def getTableTitleRe(config, sitename, *args, **kwargs):
|
||||||
"Returns string to search in windows titles for current site"
|
"Returns string to search in windows titles for current site"
|
||||||
return getSiteHhc(config, sitename).getTableTitleRe(*args, **kwargs)
|
return getSiteHhc(config, sitename).getTableTitleRe(*args, **kwargs)
|
||||||
|
|
244
pyfpdb/IdentifySite.py
Normal file → Executable file
244
pyfpdb/IdentifySite.py
Normal file → Executable file
|
@ -1,122 +1,122 @@
|
||||||
#!/usr/bin/python
|
#!/usr/bin/python
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
#Copyright 2010 Chaz Littlejohn
|
#Copyright 2010 Chaz Littlejohn
|
||||||
#This program is free software: you can redistribute it and/or modify
|
#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
|
#it under the terms of the GNU Affero General Public License as published by
|
||||||
#the Free Software Foundation, version 3 of the License.
|
#the Free Software Foundation, version 3 of the License.
|
||||||
#
|
#
|
||||||
#This program is distributed in the hope that it will be useful,
|
#This program is distributed in the hope that it will be useful,
|
||||||
#but WITHOUT ANY WARRANTY; without even the implied warranty of
|
#but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
#GNU General Public License for more details.
|
#GNU General Public License for more details.
|
||||||
#
|
#
|
||||||
#You should have received a copy of the GNU Affero General Public License
|
#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/>.
|
#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 "official" distribution you can find the license in agpl-3.0.txt.
|
||||||
|
|
||||||
import L10n
|
import L10n
|
||||||
_ = L10n.get_translation()
|
_ = L10n.get_translation()
|
||||||
|
|
||||||
import re
|
import re
|
||||||
import sys
|
import sys
|
||||||
import os
|
import os
|
||||||
import os.path
|
import os.path
|
||||||
from optparse import OptionParser
|
from optparse import OptionParser
|
||||||
import codecs
|
import codecs
|
||||||
import Configuration
|
import Configuration
|
||||||
import Database
|
import Database
|
||||||
|
|
||||||
__ARCHIVE_PRE_HEADER_REGEX='^Hand #(\d+)\s*$|\*{20}\s#\s\d+\s\*+\s+'
|
__ARCHIVE_PRE_HEADER_REGEX='^Hand #(\d+)\s*$|\*{20}\s#\s\d+\s\*+\s+'
|
||||||
re_SplitArchive = re.compile(__ARCHIVE_PRE_HEADER_REGEX)
|
re_SplitArchive = re.compile(__ARCHIVE_PRE_HEADER_REGEX)
|
||||||
|
|
||||||
|
|
||||||
class IdentifySite:
|
class IdentifySite:
|
||||||
def __init__(self, config, in_path = '-'):
|
def __init__(self, config, in_path = '-'):
|
||||||
self.in_path = in_path
|
self.in_path = in_path
|
||||||
self.config = config
|
self.config = config
|
||||||
self.db = Database.Database(config)
|
self.db = Database.Database(config)
|
||||||
self.sitelist = {}
|
self.sitelist = {}
|
||||||
self.filelist = {}
|
self.filelist = {}
|
||||||
self.generateSiteList()
|
self.generateSiteList()
|
||||||
self.walkDirectory(self.in_path, self.sitelist)
|
self.walkDirectory(self.in_path, self.sitelist)
|
||||||
|
|
||||||
def generateSiteList(self):
|
def generateSiteList(self):
|
||||||
"""Generates a ordered dictionary of site, filter and filter name for each site in hhcs"""
|
"""Generates a ordered dictionary of site, filter and filter name for each site in hhcs"""
|
||||||
for site, hhc in self.config.hhcs.iteritems():
|
for site, hhc in self.config.hhcs.iteritems():
|
||||||
filter = hhc.converter
|
filter = hhc.converter
|
||||||
filter_name = filter.replace("ToFpdb", "")
|
filter_name = filter.replace("ToFpdb", "")
|
||||||
result = self.db.get_site_id(site)
|
result = self.db.get_site_id(site)
|
||||||
if len(result) == 1:
|
if len(result) == 1:
|
||||||
self.sitelist[result[0][0]] = (site, filter, filter_name)
|
self.sitelist[result[0][0]] = (site, filter, filter_name)
|
||||||
else:
|
else:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def walkDirectory(self, dir, sitelist):
|
def walkDirectory(self, dir, sitelist):
|
||||||
"""Walks a directory, and executes a callback on each file"""
|
"""Walks a directory, and executes a callback on each file"""
|
||||||
dir = os.path.abspath(dir)
|
dir = os.path.abspath(dir)
|
||||||
for file in [file for file in os.listdir(dir) if not file in [".",".."]]:
|
for file in [file for file in os.listdir(dir) if not file in [".",".."]]:
|
||||||
nfile = os.path.join(dir,file)
|
nfile = os.path.join(dir,file)
|
||||||
if os.path.isdir(nfile):
|
if os.path.isdir(nfile):
|
||||||
self.walkDirectory(nfile, sitelist)
|
self.walkDirectory(nfile, sitelist)
|
||||||
else:
|
else:
|
||||||
self.idSite(nfile, sitelist)
|
self.idSite(nfile, sitelist)
|
||||||
|
|
||||||
def __listof(self, x):
|
def __listof(self, x):
|
||||||
if isinstance(x, list) or isinstance(x, tuple):
|
if isinstance(x, list) or isinstance(x, tuple):
|
||||||
return x
|
return x
|
||||||
else:
|
else:
|
||||||
return [x]
|
return [x]
|
||||||
|
|
||||||
def idSite(self, file, sitelist):
|
def idSite(self, file, sitelist):
|
||||||
"""Identifies the site the hh file originated from"""
|
"""Identifies the site the hh file originated from"""
|
||||||
if file.endswith('.txt'):
|
if file.endswith('.txt'):
|
||||||
self.filelist[file] = ''
|
self.filelist[file] = ''
|
||||||
archive = False
|
archive = False
|
||||||
for site, info in sitelist.iteritems():
|
for site, info in sitelist.iteritems():
|
||||||
mod = __import__(info[1])
|
mod = __import__(info[1])
|
||||||
obj = getattr(mod, info[2], None)
|
obj = getattr(mod, info[2], None)
|
||||||
|
|
||||||
for kodec in self.__listof(obj.codepage):
|
for kodec in self.__listof(obj.codepage):
|
||||||
try:
|
try:
|
||||||
in_fh = codecs.open(file, 'r', kodec)
|
in_fh = codecs.open(file, 'r', kodec)
|
||||||
whole_file = in_fh.read()
|
whole_file = in_fh.read()
|
||||||
in_fh.close()
|
in_fh.close()
|
||||||
|
|
||||||
if info[2] in ('OnGame', 'Winamax'):
|
if info[2] in ('OnGame', 'Winamax'):
|
||||||
m = obj.re_HandInfo.search(whole_file)
|
m = obj.re_HandInfo.search(whole_file)
|
||||||
elif info[2] in ('PartyPoker'):
|
elif info[2] in ('PartyPoker'):
|
||||||
m = obj.re_GameInfoRing.search(whole_file)
|
m = obj.re_GameInfoRing.search(whole_file)
|
||||||
if not m:
|
if not m:
|
||||||
m = obj.re_GameInfoTrny.search(whole_file)
|
m = obj.re_GameInfoTrny.search(whole_file)
|
||||||
else:
|
else:
|
||||||
m = obj.re_GameInfo.search(whole_file)
|
m = obj.re_GameInfo.search(whole_file)
|
||||||
if re_SplitArchive.search(whole_file):
|
if re_SplitArchive.search(whole_file):
|
||||||
archive = True
|
archive = True
|
||||||
if m:
|
if m:
|
||||||
self.filelist[file] = [info[0]] + [info[1]] + [kodec] + [archive]
|
self.filelist[file] = [info[0]] + [info[1]] + [kodec] + [archive]
|
||||||
break
|
break
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def main(argv=None):
|
def main(argv=None):
|
||||||
if argv is None:
|
if argv is None:
|
||||||
argv = sys.argv[1:]
|
argv = sys.argv[1:]
|
||||||
|
|
||||||
config = Configuration.Config(file = "HUD_config.test.xml")
|
config = Configuration.Config(file = "HUD_config.test.xml")
|
||||||
in_path = 'regression-test-files/'
|
in_path = 'regression-test-files/'
|
||||||
IdSite = IdentifySite(config, in_path)
|
IdSite = IdentifySite(config, in_path)
|
||||||
|
|
||||||
print "\n----------- SITE LIST -----------"
|
print "\n----------- SITE LIST -----------"
|
||||||
for site, info in IdSite.sitelist.iteritems():
|
for site, info in IdSite.sitelist.iteritems():
|
||||||
print site, info
|
print site, info
|
||||||
print "----------- END SITE LIST -----------"
|
print "----------- END SITE LIST -----------"
|
||||||
|
|
||||||
print "\n----------- ID REGRESSION FILES -----------"
|
print "\n----------- ID REGRESSION FILES -----------"
|
||||||
for file, site in IdSite.filelist.iteritems():
|
for file, site in IdSite.filelist.iteritems():
|
||||||
print file, site
|
print file, site
|
||||||
print "----------- END ID REGRESSION FILES -----------"
|
print "----------- END ID REGRESSION FILES -----------"
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
sys.exit(main())
|
sys.exit(main())
|
||||||
|
|
|
@ -42,11 +42,12 @@ class OnGame(HandHistoryConverter):
|
||||||
siteId = 5 # Needs to match id entry in Sites database
|
siteId = 5 # Needs to match id entry in Sites database
|
||||||
|
|
||||||
mixes = { } # Legal mixed games
|
mixes = { } # Legal mixed games
|
||||||
sym = {'USD': "\$", 'CAD': "\$", 'T$': "", "EUR": "\xe2\x82\xac", "GBP": "\xa3"} # ADD Euro, Sterling, etc HERE
|
sym = {'USD': "\$", 'CAD': "\$", 'T$': "", "EUR": u"\u20ac", "GBP": "\xa3"} # ADD Euro, Sterling, etc HERE
|
||||||
substitutions = {
|
substitutions = {
|
||||||
'LEGAL_ISO' : "USD|EUR|GBP|CAD|FPP", # legal ISO currency codes
|
'LEGAL_ISO' : "USD|EUR|GBP|CAD|FPP", # legal ISO currency codes
|
||||||
'LS' : "\$|\xe2\x82\xac|" # legal currency symbols - Euro(cp1252, utf-8)
|
'LS' : u"\$|\xe2\x82\xac|\u20ac" # legal currency symbols - Euro(cp1252, utf-8)
|
||||||
}
|
}
|
||||||
|
currencies = { u'\u20ac':'EUR', u'\xe2\x82\xac':'EUR', '$':'USD', '':'T$' }
|
||||||
|
|
||||||
limits = { 'NO_LIMIT':'nl', 'LIMIT':'fl'}
|
limits = { 'NO_LIMIT':'nl', 'LIMIT':'fl'}
|
||||||
|
|
||||||
|
@ -89,10 +90,10 @@ class OnGame(HandHistoryConverter):
|
||||||
(
|
(
|
||||||
(?P<LIMIT>NO_LIMIT|Limit|LIMIT|Pot\sLimit)\s
|
(?P<LIMIT>NO_LIMIT|Limit|LIMIT|Pot\sLimit)\s
|
||||||
(?P<GAME>TEXAS_HOLDEM|OMAHA_HI|SEVEN_CARD_STUD|SEVEN_CARD_STUD_HI_LO|RAZZ|FIVE_CARD_DRAW)\s
|
(?P<GAME>TEXAS_HOLDEM|OMAHA_HI|SEVEN_CARD_STUD|SEVEN_CARD_STUD_HI_LO|RAZZ|FIVE_CARD_DRAW)\s
|
||||||
(%(LS)s)?(?P<SB>[.0-9]+)/
|
(?P<CURRENCY>%(LS)s|)?(?P<SB>[.0-9]+)/
|
||||||
(%(LS)s)?(?P<BB>[.0-9]+)
|
(%(LS)s)?(?P<BB>[.0-9]+)
|
||||||
)?
|
)?
|
||||||
""" % substitutions, re.MULTILINE|re.DOTALL|re.VERBOSE)
|
""" % substitutions, re.MULTILINE|re.DOTALL|re.VERBOSE) #TODO: detect play money (identified by "Play money" rather than "Real money" and set currency accordingly
|
||||||
|
|
||||||
re_TailSplitHands = re.compile(u'(\*\*\*\*\*\sEnd\sof\shand\s[-A-Z\d]+.*\n)(?=\*)')
|
re_TailSplitHands = re.compile(u'(\*\*\*\*\*\sEnd\sof\shand\s[-A-Z\d]+.*\n)(?=\*)')
|
||||||
re_Button = re.compile('Button: seat (?P<BUTTON>\d+)', re.MULTILINE) # Button: seat 2
|
re_Button = re.compile('Button: seat (?P<BUTTON>\d+)', re.MULTILINE) # Button: seat 2
|
||||||
|
@ -174,7 +175,8 @@ class OnGame(HandHistoryConverter):
|
||||||
mg = m.groupdict()
|
mg = m.groupdict()
|
||||||
|
|
||||||
info['type'] = 'ring'
|
info['type'] = 'ring'
|
||||||
info['currency'] = 'USD'
|
if 'CURRENCY' in mg:
|
||||||
|
info['currency'] = self.currencies[mg['CURRENCY']]
|
||||||
|
|
||||||
if 'LIMIT' in mg:
|
if 'LIMIT' in mg:
|
||||||
if mg['LIMIT'] in self.limits:
|
if mg['LIMIT'] in self.limits:
|
||||||
|
@ -326,7 +328,7 @@ class OnGame(HandHistoryConverter):
|
||||||
def readAction(self, hand, street):
|
def readAction(self, hand, street):
|
||||||
m = self.re_Action.finditer(hand.streets[street])
|
m = self.re_Action.finditer(hand.streets[street])
|
||||||
for action in m:
|
for action in m:
|
||||||
acts = action.groupdict()
|
#acts = action.groupdict()
|
||||||
#log.debug("readaction: acts: %s" %acts)
|
#log.debug("readaction: acts: %s" %acts)
|
||||||
if action.group('ATYPE') == ' raises':
|
if action.group('ATYPE') == ' raises':
|
||||||
hand.addRaiseBy( street, action.group('PNAME'), action.group('BET') )
|
hand.addRaiseBy( street, action.group('PNAME'), action.group('BET') )
|
||||||
|
|
|
@ -240,8 +240,8 @@ class PartyPoker(HandHistoryConverter):
|
||||||
info['sb'] = "%.2f" % (sb)
|
info['sb'] = "%.2f" % (sb)
|
||||||
info['currency'] = self.currencies[mg['CURRENCY']]
|
info['currency'] = self.currencies[mg['CURRENCY']]
|
||||||
else:
|
else:
|
||||||
info['sb'] = clearMoneyString(mg['SB'])
|
info['sb'] = self.clearMoneyString(mg['SB'])
|
||||||
info['bb'] = clearMoneyString(mg['BB'])
|
info['bb'] = self.clearMoneyString(mg['BB'])
|
||||||
info['currency'] = 'T$'
|
info['currency'] = 'T$'
|
||||||
|
|
||||||
return info
|
return info
|
||||||
|
@ -361,10 +361,10 @@ class PartyPoker(HandHistoryConverter):
|
||||||
if a.group('CASH') > '0':
|
if a.group('CASH') > '0':
|
||||||
#record max known stack for use with players with unknown stack
|
#record max known stack for use with players with unknown stack
|
||||||
maxKnownStack = max(a.group('CASH'),maxKnownStack)
|
maxKnownStack = max(a.group('CASH'),maxKnownStack)
|
||||||
hand.addPlayer(int(a.group('SEAT')), a.group('PNAME'), clearMoneyString(a.group('CASH')))
|
hand.addPlayer(int(a.group('SEAT')), a.group('PNAME'), self.clearMoneyString(a.group('CASH')))
|
||||||
else:
|
else:
|
||||||
#zero stacked players are added later
|
#zero stacked players are added later
|
||||||
zeroStackPlayers.append([int(a.group('SEAT')), a.group('PNAME'), clearMoneyString(a.group('CASH'))])
|
zeroStackPlayers.append([int(a.group('SEAT')), a.group('PNAME'), self.clearMoneyString(a.group('CASH'))])
|
||||||
if hand.gametype['type'] == 'ring':
|
if hand.gametype['type'] == 'ring':
|
||||||
#finds first vacant seat after an exact seat
|
#finds first vacant seat after an exact seat
|
||||||
def findFirstEmptySeat(startSeat):
|
def findFirstEmptySeat(startSeat):
|
||||||
|
@ -384,7 +384,7 @@ class PartyPoker(HandHistoryConverter):
|
||||||
#if a zero stacked player is just joined the table in this very hand then set his stack to maxKnownStack
|
#if a zero stacked player is just joined the table in this very hand then set his stack to maxKnownStack
|
||||||
for p in zeroStackPlayers:
|
for p in zeroStackPlayers:
|
||||||
if p[1] in match_JoiningPlayers:
|
if p[1] in match_JoiningPlayers:
|
||||||
p[2] = clearMoneyString(maxKnownStack)
|
p[2] = self.clearMoneyString(maxKnownStack)
|
||||||
hand.addPlayer(p[0],p[1],p[2])
|
hand.addPlayer(p[0],p[1],p[2])
|
||||||
|
|
||||||
seatedPlayers = list([(f[1]) for f in hand.players])
|
seatedPlayers = list([(f[1]) for f in hand.players])
|
||||||
|
@ -401,7 +401,7 @@ class PartyPoker(HandHistoryConverter):
|
||||||
occupiedSeats = list([(f[0]) for f in hand.players])
|
occupiedSeats = list([(f[0]) for f in hand.players])
|
||||||
occupiedSeats.sort()
|
occupiedSeats.sort()
|
||||||
newPlayerSeat = findFirstEmptySeat(previousBBPosterSeat)
|
newPlayerSeat = findFirstEmptySeat(previousBBPosterSeat)
|
||||||
hand.addPlayer(newPlayerSeat,player,clearMoneyString(maxKnownStack))
|
hand.addPlayer(newPlayerSeat,player,self.clearMoneyString(maxKnownStack))
|
||||||
|
|
||||||
def markStreets(self, hand):
|
def markStreets(self, hand):
|
||||||
m = re.search(
|
m = re.search(
|
||||||
|
@ -491,7 +491,7 @@ class PartyPoker(HandHistoryConverter):
|
||||||
for action in m:
|
for action in m:
|
||||||
acts = action.groupdict()
|
acts = action.groupdict()
|
||||||
playerName = action.group('PNAME')
|
playerName = action.group('PNAME')
|
||||||
amount = clearMoneyString(action.group('BET')) if action.group('BET') else None
|
amount = self.clearMoneyString(action.group('BET')) if action.group('BET') else None
|
||||||
actionType = action.group('ATYPE')
|
actionType = action.group('ATYPE')
|
||||||
|
|
||||||
if actionType == 'is all-In':
|
if actionType == 'is all-In':
|
||||||
|
@ -530,7 +530,7 @@ class PartyPoker(HandHistoryConverter):
|
||||||
|
|
||||||
def readCollectPot(self,hand):
|
def readCollectPot(self,hand):
|
||||||
for m in self.re_CollectPot.finditer(hand.handText):
|
for m in self.re_CollectPot.finditer(hand.handText):
|
||||||
hand.addCollectPot(player=m.group('PNAME'),pot=clearMoneyString(m.group('POT')))
|
hand.addCollectPot(player=m.group('PNAME'),pot=self.clearMoneyString(m.group('POT')))
|
||||||
|
|
||||||
def readShownCards(self,hand):
|
def readShownCards(self,hand):
|
||||||
for m in self.re_ShownCards.finditer(hand.handText):
|
for m in self.re_ShownCards.finditer(hand.handText):
|
||||||
|
@ -554,10 +554,6 @@ class PartyPoker(HandHistoryConverter):
|
||||||
else:
|
else:
|
||||||
return table_name
|
return table_name
|
||||||
|
|
||||||
def clearMoneyString(money):
|
|
||||||
"Renders 'numbers' like '1 200' and '2,000'"
|
|
||||||
return money.replace(' ', '').replace(',', '')
|
|
||||||
|
|
||||||
def renderCards(string):
|
def renderCards(string):
|
||||||
"Splits strings like ' Js, 4d '"
|
"Splits strings like ' Js, 4d '"
|
||||||
cards = string.strip().split(' ')
|
cards = string.strip().split(' ')
|
||||||
|
|
|
@ -222,6 +222,8 @@ class Winamax(HandHistoryConverter):
|
||||||
if key == 'HID1':
|
if key == 'HID1':
|
||||||
# Need to remove non-alphanumerics for MySQL
|
# Need to remove non-alphanumerics for MySQL
|
||||||
hand.handid = "1%.9d%s%s"%(int(info['HID2']),info['HID1'],info['HID3'])
|
hand.handid = "1%.9d%s%s"%(int(info['HID2']),info['HID1'],info['HID3'])
|
||||||
|
if len (hand.handid) > 19:
|
||||||
|
hand.handid = "%s" % info['HID1']
|
||||||
if key == 'TOURNO':
|
if key == 'TOURNO':
|
||||||
hand.tourNo = info[key]
|
hand.tourNo = info[key]
|
||||||
if key == 'TABLE':
|
if key == 'TABLE':
|
||||||
|
|
|
@ -123,7 +123,7 @@ import Configuration
|
||||||
import Exceptions
|
import Exceptions
|
||||||
import Stats
|
import Stats
|
||||||
|
|
||||||
VERSION = "0.21-rc1"
|
VERSION = "0.21-rc1 plus git"
|
||||||
|
|
||||||
|
|
||||||
class fpdb:
|
class fpdb:
|
||||||
|
@ -1094,7 +1094,7 @@ You can find the full license texts in agpl-3.0.txt, gpl-2.0.txt, gpl-3.0.txt an
|
||||||
self.add_and_display_tab(gv_tab, _("Tourney Graphs"))
|
self.add_and_display_tab(gv_tab, _("Tourney Graphs"))
|
||||||
|
|
||||||
def tabStove(self, widget, data=None):
|
def tabStove(self, widget, data=None):
|
||||||
"""opens a tab for bulk importing tournament summaries"""
|
"""opens a tab for poker stove"""
|
||||||
thread = GuiStove.GuiStove(self.config, self.window)
|
thread = GuiStove.GuiStove(self.config, self.window)
|
||||||
self.threads.append(thread)
|
self.threads.append(thread)
|
||||||
tab = thread.get_vbox()
|
tab = thread.get_vbox()
|
||||||
|
|
Binary file not shown.
|
@ -0,0 +1,32 @@
|
||||||
|
{ 'boardcard1': 0,
|
||||||
|
'boardcard2': 0,
|
||||||
|
'boardcard3': 0,
|
||||||
|
'boardcard4': 0,
|
||||||
|
'boardcard5': 0,
|
||||||
|
'gametypeId': 12,
|
||||||
|
'importTime': None,
|
||||||
|
'maxSeats': 6,
|
||||||
|
'playersAtShowdown': 2,
|
||||||
|
'playersAtStreet-1': 5,
|
||||||
|
'playersAtStreet0': 2,
|
||||||
|
'playersAtStreet1': 2,
|
||||||
|
'playersAtStreet2': 2,
|
||||||
|
'playersAtStreet3': 2,
|
||||||
|
'playersAtStreet4': 0,
|
||||||
|
'playersVpi': 2,
|
||||||
|
'seats': 5,
|
||||||
|
'showdownPot': 0,
|
||||||
|
'siteHandNo': u'25325990000',
|
||||||
|
'startTime': datetime.datetime(2010, 12, 20, 15, 0, tzinfo=pytz.utc),
|
||||||
|
'street0Raises': 3,
|
||||||
|
'street1Pot': 0,
|
||||||
|
'street1Raises': 1,
|
||||||
|
'street2Pot': 0,
|
||||||
|
'street2Raises': 2,
|
||||||
|
'street3Pot': 0,
|
||||||
|
'street3Raises': 0,
|
||||||
|
'street4Pot': 0,
|
||||||
|
'street4Raises': 0,
|
||||||
|
'tableName': u"David's Draw",
|
||||||
|
'texture': None,
|
||||||
|
'tourneyId': None}
|
|
@ -0,0 +1,470 @@
|
||||||
|
{ u'Hero': { 'card1': 0,
|
||||||
|
'card2': 0,
|
||||||
|
'card3': 0,
|
||||||
|
'card4': 0,
|
||||||
|
'card5': 0,
|
||||||
|
'card6': 0,
|
||||||
|
'card7': 0,
|
||||||
|
'foldBbToStealChance': False,
|
||||||
|
'foldSbToStealChance': False,
|
||||||
|
'foldToOtherRaisedStreet0': False,
|
||||||
|
'foldToOtherRaisedStreet1': False,
|
||||||
|
'foldToOtherRaisedStreet2': False,
|
||||||
|
'foldToOtherRaisedStreet3': False,
|
||||||
|
'foldToOtherRaisedStreet4': False,
|
||||||
|
'foldToStreet1CBChance': False,
|
||||||
|
'foldToStreet1CBDone': False,
|
||||||
|
'foldToStreet2CBChance': False,
|
||||||
|
'foldToStreet2CBDone': False,
|
||||||
|
'foldToStreet3CBChance': False,
|
||||||
|
'foldToStreet3CBDone': False,
|
||||||
|
'foldToStreet4CBChance': False,
|
||||||
|
'foldToStreet4CBDone': False,
|
||||||
|
'foldedBbToSteal': False,
|
||||||
|
'foldedSbToSteal': False,
|
||||||
|
'other3BStreet0': False,
|
||||||
|
'other4BStreet0': False,
|
||||||
|
'otherRaisedStreet0': False,
|
||||||
|
'otherRaisedStreet1': False,
|
||||||
|
'otherRaisedStreet2': False,
|
||||||
|
'otherRaisedStreet3': False,
|
||||||
|
'otherRaisedStreet4': False,
|
||||||
|
'position': 'S',
|
||||||
|
'raiseFirstInChance': False,
|
||||||
|
'raisedFirstIn': False,
|
||||||
|
'rake': 0,
|
||||||
|
'sawShowdown': False,
|
||||||
|
'seatNo': 2,
|
||||||
|
'sitout': False,
|
||||||
|
'startCards': 0,
|
||||||
|
'startCash': 174700,
|
||||||
|
'street0Aggr': False,
|
||||||
|
'street0Bets': 0,
|
||||||
|
'street0Calls': 0,
|
||||||
|
'street0Raises': 0,
|
||||||
|
'street0VPI': False,
|
||||||
|
'street0_3BChance': False,
|
||||||
|
'street0_3BDone': False,
|
||||||
|
'street0_4BChance': True,
|
||||||
|
'street0_4BDone': False,
|
||||||
|
'street1Aggr': False,
|
||||||
|
'street1Bets': 0,
|
||||||
|
'street1CBChance': False,
|
||||||
|
'street1CBDone': False,
|
||||||
|
'street1Calls': 0,
|
||||||
|
'street1CheckCallRaiseChance': False,
|
||||||
|
'street1CheckCallRaiseDone': False,
|
||||||
|
'street1Raises': 0,
|
||||||
|
'street1Seen': False,
|
||||||
|
'street2Aggr': False,
|
||||||
|
'street2Bets': 0,
|
||||||
|
'street2CBChance': False,
|
||||||
|
'street2CBDone': False,
|
||||||
|
'street2Calls': 0,
|
||||||
|
'street2CheckCallRaiseChance': False,
|
||||||
|
'street2CheckCallRaiseDone': False,
|
||||||
|
'street2Raises': 0,
|
||||||
|
'street2Seen': False,
|
||||||
|
'street3Aggr': False,
|
||||||
|
'street3Bets': 0,
|
||||||
|
'street3CBChance': False,
|
||||||
|
'street3CBDone': False,
|
||||||
|
'street3Calls': 0,
|
||||||
|
'street3CheckCallRaiseChance': False,
|
||||||
|
'street3CheckCallRaiseDone': False,
|
||||||
|
'street3Raises': 0,
|
||||||
|
'street3Seen': False,
|
||||||
|
'street4Aggr': False,
|
||||||
|
'street4Bets': 0,
|
||||||
|
'street4CBChance': False,
|
||||||
|
'street4CBDone': False,
|
||||||
|
'street4Calls': 0,
|
||||||
|
'street4CheckCallRaiseChance': False,
|
||||||
|
'street4CheckCallRaiseDone': False,
|
||||||
|
'street4Raises': 0,
|
||||||
|
'street4Seen': False,
|
||||||
|
'totalProfit': -7500,
|
||||||
|
'tourneyTypeId': None,
|
||||||
|
'tourneysPlayersIds': None,
|
||||||
|
'winnings': 0,
|
||||||
|
'wonAtSD': 0.0,
|
||||||
|
'wonWhenSeenStreet1': 0.0,
|
||||||
|
'wonWhenSeenStreet2': 0.0,
|
||||||
|
'wonWhenSeenStreet3': 0.0,
|
||||||
|
'wonWhenSeenStreet4': 0.0},
|
||||||
|
u'Player1': { 'card1': 0,
|
||||||
|
'card2': 0,
|
||||||
|
'card3': 0,
|
||||||
|
'card4': 0,
|
||||||
|
'card5': 0,
|
||||||
|
'card6': 0,
|
||||||
|
'card7': 0,
|
||||||
|
'foldBbToStealChance': False,
|
||||||
|
'foldSbToStealChance': False,
|
||||||
|
'foldToOtherRaisedStreet0': False,
|
||||||
|
'foldToOtherRaisedStreet1': False,
|
||||||
|
'foldToOtherRaisedStreet2': False,
|
||||||
|
'foldToOtherRaisedStreet3': False,
|
||||||
|
'foldToOtherRaisedStreet4': False,
|
||||||
|
'foldToStreet1CBChance': False,
|
||||||
|
'foldToStreet1CBDone': False,
|
||||||
|
'foldToStreet2CBChance': False,
|
||||||
|
'foldToStreet2CBDone': False,
|
||||||
|
'foldToStreet3CBChance': False,
|
||||||
|
'foldToStreet3CBDone': False,
|
||||||
|
'foldToStreet4CBChance': False,
|
||||||
|
'foldToStreet4CBDone': False,
|
||||||
|
'foldedBbToSteal': False,
|
||||||
|
'foldedSbToSteal': False,
|
||||||
|
'other3BStreet0': False,
|
||||||
|
'other4BStreet0': False,
|
||||||
|
'otherRaisedStreet0': False,
|
||||||
|
'otherRaisedStreet1': False,
|
||||||
|
'otherRaisedStreet2': False,
|
||||||
|
'otherRaisedStreet3': False,
|
||||||
|
'otherRaisedStreet4': False,
|
||||||
|
'position': 0,
|
||||||
|
'raiseFirstInChance': False,
|
||||||
|
'raisedFirstIn': False,
|
||||||
|
'rake': 0,
|
||||||
|
'sawShowdown': False,
|
||||||
|
'seatNo': 1,
|
||||||
|
'sitout': False,
|
||||||
|
'startCards': 0,
|
||||||
|
'startCash': 641100,
|
||||||
|
'street0Aggr': False,
|
||||||
|
'street0Bets': 0,
|
||||||
|
'street0Calls': 0,
|
||||||
|
'street0Raises': 0,
|
||||||
|
'street0VPI': False,
|
||||||
|
'street0_3BChance': False,
|
||||||
|
'street0_3BDone': False,
|
||||||
|
'street0_4BChance': True,
|
||||||
|
'street0_4BDone': False,
|
||||||
|
'street1Aggr': False,
|
||||||
|
'street1Bets': 0,
|
||||||
|
'street1CBChance': False,
|
||||||
|
'street1CBDone': False,
|
||||||
|
'street1Calls': 0,
|
||||||
|
'street1CheckCallRaiseChance': False,
|
||||||
|
'street1CheckCallRaiseDone': False,
|
||||||
|
'street1Raises': 0,
|
||||||
|
'street1Seen': False,
|
||||||
|
'street2Aggr': False,
|
||||||
|
'street2Bets': 0,
|
||||||
|
'street2CBChance': False,
|
||||||
|
'street2CBDone': False,
|
||||||
|
'street2Calls': 0,
|
||||||
|
'street2CheckCallRaiseChance': False,
|
||||||
|
'street2CheckCallRaiseDone': False,
|
||||||
|
'street2Raises': 0,
|
||||||
|
'street2Seen': False,
|
||||||
|
'street3Aggr': False,
|
||||||
|
'street3Bets': 0,
|
||||||
|
'street3CBChance': False,
|
||||||
|
'street3CBDone': False,
|
||||||
|
'street3Calls': 0,
|
||||||
|
'street3CheckCallRaiseChance': False,
|
||||||
|
'street3CheckCallRaiseDone': False,
|
||||||
|
'street3Raises': 0,
|
||||||
|
'street3Seen': False,
|
||||||
|
'street4Aggr': False,
|
||||||
|
'street4Bets': 0,
|
||||||
|
'street4CBChance': False,
|
||||||
|
'street4CBDone': False,
|
||||||
|
'street4Calls': 0,
|
||||||
|
'street4CheckCallRaiseChance': False,
|
||||||
|
'street4CheckCallRaiseDone': False,
|
||||||
|
'street4Raises': 0,
|
||||||
|
'street4Seen': False,
|
||||||
|
'totalProfit': 0,
|
||||||
|
'tourneyTypeId': None,
|
||||||
|
'tourneysPlayersIds': None,
|
||||||
|
'winnings': 0,
|
||||||
|
'wonAtSD': 0.0,
|
||||||
|
'wonWhenSeenStreet1': 0.0,
|
||||||
|
'wonWhenSeenStreet2': 0.0,
|
||||||
|
'wonWhenSeenStreet3': 0.0,
|
||||||
|
'wonWhenSeenStreet4': 0.0},
|
||||||
|
u'Player4': { 'card1': 0,
|
||||||
|
'card2': 0,
|
||||||
|
'card3': 0,
|
||||||
|
'card4': 0,
|
||||||
|
'card5': 0,
|
||||||
|
'card6': 0,
|
||||||
|
'card7': 0,
|
||||||
|
'foldBbToStealChance': False,
|
||||||
|
'foldSbToStealChance': False,
|
||||||
|
'foldToOtherRaisedStreet0': False,
|
||||||
|
'foldToOtherRaisedStreet1': False,
|
||||||
|
'foldToOtherRaisedStreet2': False,
|
||||||
|
'foldToOtherRaisedStreet3': False,
|
||||||
|
'foldToOtherRaisedStreet4': False,
|
||||||
|
'foldToStreet1CBChance': False,
|
||||||
|
'foldToStreet1CBDone': False,
|
||||||
|
'foldToStreet2CBChance': False,
|
||||||
|
'foldToStreet2CBDone': False,
|
||||||
|
'foldToStreet3CBChance': False,
|
||||||
|
'foldToStreet3CBDone': False,
|
||||||
|
'foldToStreet4CBChance': False,
|
||||||
|
'foldToStreet4CBDone': False,
|
||||||
|
'foldedBbToSteal': False,
|
||||||
|
'foldedSbToSteal': False,
|
||||||
|
'other3BStreet0': False,
|
||||||
|
'other4BStreet0': False,
|
||||||
|
'otherRaisedStreet0': False,
|
||||||
|
'otherRaisedStreet1': False,
|
||||||
|
'otherRaisedStreet2': False,
|
||||||
|
'otherRaisedStreet3': False,
|
||||||
|
'otherRaisedStreet4': False,
|
||||||
|
'position': 'B',
|
||||||
|
'raiseFirstInChance': False,
|
||||||
|
'raisedFirstIn': False,
|
||||||
|
'rake': 0,
|
||||||
|
'sawShowdown': False,
|
||||||
|
'seatNo': 4,
|
||||||
|
'sitout': False,
|
||||||
|
'startCards': 0,
|
||||||
|
'startCash': 988300,
|
||||||
|
'street0Aggr': False,
|
||||||
|
'street0Bets': 0,
|
||||||
|
'street0Calls': 0,
|
||||||
|
'street0Raises': 0,
|
||||||
|
'street0VPI': False,
|
||||||
|
'street0_3BChance': False,
|
||||||
|
'street0_3BDone': False,
|
||||||
|
'street0_4BChance': True,
|
||||||
|
'street0_4BDone': False,
|
||||||
|
'street1Aggr': False,
|
||||||
|
'street1Bets': 0,
|
||||||
|
'street1CBChance': False,
|
||||||
|
'street1CBDone': False,
|
||||||
|
'street1Calls': 0,
|
||||||
|
'street1CheckCallRaiseChance': False,
|
||||||
|
'street1CheckCallRaiseDone': False,
|
||||||
|
'street1Raises': 0,
|
||||||
|
'street1Seen': False,
|
||||||
|
'street2Aggr': False,
|
||||||
|
'street2Bets': 0,
|
||||||
|
'street2CBChance': False,
|
||||||
|
'street2CBDone': False,
|
||||||
|
'street2Calls': 0,
|
||||||
|
'street2CheckCallRaiseChance': False,
|
||||||
|
'street2CheckCallRaiseDone': False,
|
||||||
|
'street2Raises': 0,
|
||||||
|
'street2Seen': False,
|
||||||
|
'street3Aggr': False,
|
||||||
|
'street3Bets': 0,
|
||||||
|
'street3CBChance': False,
|
||||||
|
'street3CBDone': False,
|
||||||
|
'street3Calls': 0,
|
||||||
|
'street3CheckCallRaiseChance': False,
|
||||||
|
'street3CheckCallRaiseDone': False,
|
||||||
|
'street3Raises': 0,
|
||||||
|
'street3Seen': False,
|
||||||
|
'street4Aggr': False,
|
||||||
|
'street4Bets': 0,
|
||||||
|
'street4CBChance': False,
|
||||||
|
'street4CBDone': False,
|
||||||
|
'street4Calls': 0,
|
||||||
|
'street4CheckCallRaiseChance': False,
|
||||||
|
'street4CheckCallRaiseDone': False,
|
||||||
|
'street4Raises': 0,
|
||||||
|
'street4Seen': False,
|
||||||
|
'totalProfit': -15000,
|
||||||
|
'tourneyTypeId': None,
|
||||||
|
'tourneysPlayersIds': None,
|
||||||
|
'winnings': 0,
|
||||||
|
'wonAtSD': 0.0,
|
||||||
|
'wonWhenSeenStreet1': 0.0,
|
||||||
|
'wonWhenSeenStreet2': 0.0,
|
||||||
|
'wonWhenSeenStreet3': 0.0,
|
||||||
|
'wonWhenSeenStreet4': 0.0},
|
||||||
|
u'Player5': { 'card1': 0,
|
||||||
|
'card2': 0,
|
||||||
|
'card3': 0,
|
||||||
|
'card4': 0,
|
||||||
|
'card5': 0,
|
||||||
|
'card6': 0,
|
||||||
|
'card7': 0,
|
||||||
|
'foldBbToStealChance': False,
|
||||||
|
'foldSbToStealChance': False,
|
||||||
|
'foldToOtherRaisedStreet0': False,
|
||||||
|
'foldToOtherRaisedStreet1': False,
|
||||||
|
'foldToOtherRaisedStreet2': False,
|
||||||
|
'foldToOtherRaisedStreet3': False,
|
||||||
|
'foldToOtherRaisedStreet4': False,
|
||||||
|
'foldToStreet1CBChance': False,
|
||||||
|
'foldToStreet1CBDone': False,
|
||||||
|
'foldToStreet2CBChance': False,
|
||||||
|
'foldToStreet2CBDone': False,
|
||||||
|
'foldToStreet3CBChance': False,
|
||||||
|
'foldToStreet3CBDone': False,
|
||||||
|
'foldToStreet4CBChance': False,
|
||||||
|
'foldToStreet4CBDone': False,
|
||||||
|
'foldedBbToSteal': False,
|
||||||
|
'foldedSbToSteal': False,
|
||||||
|
'other3BStreet0': False,
|
||||||
|
'other4BStreet0': False,
|
||||||
|
'otherRaisedStreet0': False,
|
||||||
|
'otherRaisedStreet1': False,
|
||||||
|
'otherRaisedStreet2': True,
|
||||||
|
'otherRaisedStreet3': False,
|
||||||
|
'otherRaisedStreet4': False,
|
||||||
|
'position': 2,
|
||||||
|
'raiseFirstInChance': True,
|
||||||
|
'raisedFirstIn': True,
|
||||||
|
'rake': 0,
|
||||||
|
'sawShowdown': True,
|
||||||
|
'seatNo': 5,
|
||||||
|
'sitout': False,
|
||||||
|
'startCards': 0,
|
||||||
|
'startCash': 424700,
|
||||||
|
'street0Aggr': True,
|
||||||
|
'street0Bets': 0,
|
||||||
|
'street0Calls': 0,
|
||||||
|
'street0Raises': 0,
|
||||||
|
'street0VPI': True,
|
||||||
|
'street0_3BChance': False,
|
||||||
|
'street0_3BDone': False,
|
||||||
|
'street0_4BChance': True,
|
||||||
|
'street0_4BDone': True,
|
||||||
|
'street1Aggr': True,
|
||||||
|
'street1Bets': 1,
|
||||||
|
'street1CBChance': True,
|
||||||
|
'street1CBDone': True,
|
||||||
|
'street1Calls': 0,
|
||||||
|
'street1CheckCallRaiseChance': False,
|
||||||
|
'street1CheckCallRaiseDone': False,
|
||||||
|
'street1Raises': 0,
|
||||||
|
'street1Seen': True,
|
||||||
|
'street2Aggr': True,
|
||||||
|
'street2Bets': 1,
|
||||||
|
'street2CBChance': True,
|
||||||
|
'street2CBDone': True,
|
||||||
|
'street2Calls': 1,
|
||||||
|
'street2CheckCallRaiseChance': False,
|
||||||
|
'street2CheckCallRaiseDone': False,
|
||||||
|
'street2Raises': 0,
|
||||||
|
'street2Seen': True,
|
||||||
|
'street3Aggr': False,
|
||||||
|
'street3Bets': 0,
|
||||||
|
'street3CBChance': False,
|
||||||
|
'street3CBDone': False,
|
||||||
|
'street3Calls': 0,
|
||||||
|
'street3CheckCallRaiseChance': False,
|
||||||
|
'street3CheckCallRaiseDone': False,
|
||||||
|
'street3Raises': 0,
|
||||||
|
'street3Seen': True,
|
||||||
|
'street4Aggr': False,
|
||||||
|
'street4Bets': 0,
|
||||||
|
'street4CBChance': False,
|
||||||
|
'street4CBDone': False,
|
||||||
|
'street4Calls': 0,
|
||||||
|
'street4CheckCallRaiseChance': False,
|
||||||
|
'street4CheckCallRaiseDone': False,
|
||||||
|
'street4Raises': 0,
|
||||||
|
'street4Seen': False,
|
||||||
|
'totalProfit': -135000,
|
||||||
|
'tourneyTypeId': None,
|
||||||
|
'tourneysPlayersIds': None,
|
||||||
|
'winnings': 0,
|
||||||
|
'wonAtSD': 0.0,
|
||||||
|
'wonWhenSeenStreet1': 0.0,
|
||||||
|
'wonWhenSeenStreet2': 0.0,
|
||||||
|
'wonWhenSeenStreet3': 0.0,
|
||||||
|
'wonWhenSeenStreet4': 0.0},
|
||||||
|
u'Player6': { 'card1': 0,
|
||||||
|
'card2': 0,
|
||||||
|
'card3': 0,
|
||||||
|
'card4': 0,
|
||||||
|
'card5': 0,
|
||||||
|
'card6': 0,
|
||||||
|
'card7': 0,
|
||||||
|
'foldBbToStealChance': False,
|
||||||
|
'foldSbToStealChance': False,
|
||||||
|
'foldToOtherRaisedStreet0': False,
|
||||||
|
'foldToOtherRaisedStreet1': False,
|
||||||
|
'foldToOtherRaisedStreet2': False,
|
||||||
|
'foldToOtherRaisedStreet3': False,
|
||||||
|
'foldToOtherRaisedStreet4': False,
|
||||||
|
'foldToStreet1CBChance': False,
|
||||||
|
'foldToStreet1CBDone': False,
|
||||||
|
'foldToStreet2CBChance': False,
|
||||||
|
'foldToStreet2CBDone': False,
|
||||||
|
'foldToStreet3CBChance': False,
|
||||||
|
'foldToStreet3CBDone': False,
|
||||||
|
'foldToStreet4CBChance': False,
|
||||||
|
'foldToStreet4CBDone': False,
|
||||||
|
'foldedBbToSteal': False,
|
||||||
|
'foldedSbToSteal': False,
|
||||||
|
'other3BStreet0': False,
|
||||||
|
'other4BStreet0': False,
|
||||||
|
'otherRaisedStreet0': False,
|
||||||
|
'otherRaisedStreet1': True,
|
||||||
|
'otherRaisedStreet2': True,
|
||||||
|
'otherRaisedStreet3': False,
|
||||||
|
'otherRaisedStreet4': False,
|
||||||
|
'position': 1,
|
||||||
|
'raiseFirstInChance': False,
|
||||||
|
'raisedFirstIn': False,
|
||||||
|
'rake': 300,
|
||||||
|
'sawShowdown': True,
|
||||||
|
'seatNo': 6,
|
||||||
|
'sitout': False,
|
||||||
|
'startCards': 0,
|
||||||
|
'startCash': 368600,
|
||||||
|
'street0Aggr': True,
|
||||||
|
'street0Bets': 0,
|
||||||
|
'street0Calls': 1,
|
||||||
|
'street0Raises': 0,
|
||||||
|
'street0VPI': True,
|
||||||
|
'street0_3BChance': True,
|
||||||
|
'street0_3BDone': True,
|
||||||
|
'street0_4BChance': False,
|
||||||
|
'street0_4BDone': False,
|
||||||
|
'street1Aggr': False,
|
||||||
|
'street1Bets': 0,
|
||||||
|
'street1CBChance': False,
|
||||||
|
'street1CBDone': False,
|
||||||
|
'street1Calls': 1,
|
||||||
|
'street1CheckCallRaiseChance': False,
|
||||||
|
'street1CheckCallRaiseDone': False,
|
||||||
|
'street1Raises': 0,
|
||||||
|
'street1Seen': True,
|
||||||
|
'street2Aggr': True,
|
||||||
|
'street2Bets': 0,
|
||||||
|
'street2CBChance': False,
|
||||||
|
'street2CBDone': False,
|
||||||
|
'street2Calls': 0,
|
||||||
|
'street2CheckCallRaiseChance': False,
|
||||||
|
'street2CheckCallRaiseDone': False,
|
||||||
|
'street2Raises': 0,
|
||||||
|
'street2Seen': True,
|
||||||
|
'street3Aggr': False,
|
||||||
|
'street3Bets': 0,
|
||||||
|
'street3CBChance': True,
|
||||||
|
'street3CBDone': False,
|
||||||
|
'street3Calls': 0,
|
||||||
|
'street3CheckCallRaiseChance': False,
|
||||||
|
'street3CheckCallRaiseDone': False,
|
||||||
|
'street3Raises': 0,
|
||||||
|
'street3Seen': True,
|
||||||
|
'street4Aggr': False,
|
||||||
|
'street4Bets': 0,
|
||||||
|
'street4CBChance': False,
|
||||||
|
'street4CBDone': False,
|
||||||
|
'street4Calls': 0,
|
||||||
|
'street4CheckCallRaiseChance': False,
|
||||||
|
'street4CheckCallRaiseDone': False,
|
||||||
|
'street4Raises': 0,
|
||||||
|
'street4Seen': False,
|
||||||
|
'totalProfit': 157200,
|
||||||
|
'tourneyTypeId': None,
|
||||||
|
'tourneysPlayersIds': None,
|
||||||
|
'winnings': 292200,
|
||||||
|
'wonAtSD': 1.0,
|
||||||
|
'wonWhenSeenStreet1': 1.0,
|
||||||
|
'wonWhenSeenStreet2': 1.0,
|
||||||
|
'wonWhenSeenStreet3': 1.0,
|
||||||
|
'wonWhenSeenStreet4': 0.0}}
|
Loading…
Reference in New Issue
Block a user