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):
|
||||
if printdata:
|
||||
print "######## Hands ##########"
|
||||
print _("######## Hands ##########")
|
||||
import pprint
|
||||
pp = pprint.PrettyPrinter(indent=4)
|
||||
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:
|
||||
q = self.sql.query['store_hand']
|
||||
|
||||
|
|
|
@ -37,7 +37,8 @@ class Fulltilt(HandHistoryConverter):
|
|||
substitutions = {
|
||||
'LEGAL_ISO' : "USD|EUR|GBP|CAD|FPP", # legal ISO currency codes
|
||||
'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
|
||||
|
@ -45,10 +46,10 @@ class Fulltilt(HandHistoryConverter):
|
|||
(?:(?P<TOURNAMENT>.+)\s\((?P<TOURNO>\d+)\),\s)?
|
||||
.+
|
||||
-\s(?P<CURRENCY>[%(LS)s]|)?
|
||||
(?P<SB>[.0-9]+)/
|
||||
[%(LS)s]?(?P<BB>[.0-9]+)\s
|
||||
(Ante\s\$?(?P<ANTE>[.0-9]+)\s)?-\s
|
||||
[%(LS)s]?(?P<CAP>[.0-9]+\sCap\s)?
|
||||
(?P<SB>[%(NUM)s]+)/
|
||||
[%(LS)s]?(?P<BB>[%(NUM)s]+)\s
|
||||
(Ante\s\$?(?P<ANTE>[%(NUM)s]+)\s)?-\s
|
||||
[%(LS)s]?(?P<CAP>[%(NUM)s]+\sCap\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))
|
||||
''' % substitutions, re.VERBOSE)
|
||||
|
@ -60,7 +61,7 @@ class Fulltilt(HandHistoryConverter):
|
|||
(?P<PLAY>Play\sChip\s|PC)?
|
||||
(?P<TABLE>[%(TAB)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)?
|
||||
(?P<GAMETYPE>[-\da-zA-Z\/\'\s]+)\s-\s
|
||||
(?P<DATETIME>.*$)
|
||||
|
@ -140,16 +141,16 @@ class Fulltilt(HandHistoryConverter):
|
|||
self.substitutions['PLAYERS'] = 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_PostDead = re.compile(r"^%(PLAYERS)s posts a dead small blind of [%(LS)s]?(?P<SB>[.0-9]+)" % 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_Antes = re.compile(r"^%(PLAYERS)s antes [%(LS)s]?(?P<ANTE>[.0-9]+)" % 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_PostBoth = re.compile(r"^%(PLAYERS)s posts small \& big blinds \[[%(LS)s]? (?P<SBBB>[.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>[%(NUM)s]+)" % 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>[%(NUM)s]+)" % 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>[%(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_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_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_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'
|
||||
else:
|
||||
info['limitType'] = limits[mg['LIMIT']]
|
||||
info['sb'] = mg['SB']
|
||||
info['bb'] = mg['BB']
|
||||
info['sb'] = self.clearMoneyString(mg['SB'])
|
||||
info['bb'] = self.clearMoneyString(mg['BB'])
|
||||
if mg['GAME'] is not None:
|
||||
(info['base'], info['category']) = games[mg['GAME']]
|
||||
if mg['CURRENCY'] is not None:
|
||||
|
@ -339,15 +340,15 @@ class Fulltilt(HandHistoryConverter):
|
|||
def readBlinds(self, hand):
|
||||
try:
|
||||
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
|
||||
hand.addBlind(None, None, None)
|
||||
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):
|
||||
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):
|
||||
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):
|
||||
logging.debug(_("reading antes"))
|
||||
|
@ -528,10 +529,10 @@ class Fulltilt(HandHistoryConverter):
|
|||
|
||||
# Additional info can be stored in the tourney object
|
||||
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
|
||||
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:
|
||||
# Tournament Name can have a trailing space at the end (depending on the tournament description)
|
||||
tourney.tourneyName = mg['TOURNAMENT_NAME'].rstrip()
|
||||
|
@ -575,25 +576,25 @@ class Fulltilt(HandHistoryConverter):
|
|||
mg = m.groupdict()
|
||||
if tourney.isMatrix :
|
||||
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
|
||||
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 :
|
||||
if mg['BUYIN'] is not 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 :
|
||||
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']))) )
|
||||
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 tourney.fee is None:
|
||||
tourney.fee = 100*Decimal(re.sub(u',', u'', "%s" % mg['FEE']))
|
||||
tourney.fee = 100*Decimal(clearMoneyString(mg['FEE']))
|
||||
else :
|
||||
if 100*Decimal(re.sub(u',', u'', "%s" % 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']))) )
|
||||
tourney.subTourneyFee = 100*Decimal(re.sub(u',', u'', "%s" % mg['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(clearMoneyString(mg['FEE']))) )
|
||||
tourney.subTourneyFee = 100*Decimal(clearMoneyString(mg['FEE']))
|
||||
|
||||
if tourney.buyin is None:
|
||||
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']) } )
|
||||
|
||||
# Deal with money amounts
|
||||
tourney.koBounty = 100*Decimal(re.sub(u',', u'', "%s" % tourney.koBounty))
|
||||
tourney.prizepool = 100*Decimal(re.sub(u',', u'', "%s" % tourney.prizepool))
|
||||
tourney.rebuyCost = 100*Decimal(re.sub(u',', u'', "%s" % tourney.rebuyCost))
|
||||
tourney.addOnCost = 100*Decimal(re.sub(u',', u'', "%s" % tourney.addOnCost))
|
||||
tourney.koBounty = 100*Decimal(clearMoneyString(tourney.koBounty))
|
||||
tourney.prizepool = 100*Decimal(clearMoneyString(tourney.prizepool))
|
||||
tourney.rebuyCost = 100*Decimal(clearMoneyString(tourney.rebuyCost))
|
||||
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
|
||||
for p in tourney.players :
|
||||
|
@ -691,7 +692,7 @@ class Fulltilt(HandHistoryConverter):
|
|||
rank = Decimal(a.group('RANK'))
|
||||
|
||||
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:
|
||||
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
|
||||
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]
|
||||
print "holecards",self.table[i]['holecards']
|
||||
print "holecards: ",self.table[i]['holecards']
|
||||
except:
|
||||
self.table[i]['holecards']=''
|
||||
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
|
||||
|
||||
|
@ -236,7 +236,7 @@ class GuiReplayer:
|
|||
rect = gtk.gdk.Rectangle(270,270,100,50)
|
||||
self.area.window.invalidate_rect(rect, True) #refresh pot area
|
||||
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
|
||||
|
||||
|
||||
|
|
|
@ -155,15 +155,10 @@ class GuiSessionViewer (threading.Thread):
|
|||
# make sure Hand column is not displayed
|
||||
#[x for x in self.columns if x[0] == 'hand'][0][1] = False
|
||||
if DEBUG == False:
|
||||
warning_string = """
|
||||
Session Viewer is proof of concept code only, and contains many bugs.
|
||||
|
||||
Feel free to use the viewer, but there is no guarantee that the data is accurate.
|
||||
|
||||
If you are interested in developing the code further please contact us via the usual channels.
|
||||
|
||||
Thankyou
|
||||
"""
|
||||
warning_string = _("Session Viewer is proof of concept code only, and contains many bugs.\n")
|
||||
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")
|
||||
warning_string += _("Thankyou")
|
||||
self.warning_box(warning_string)
|
||||
|
||||
def warning_box(self, str, diatitle=_("FPDB WARNING")):
|
||||
|
|
|
@ -54,15 +54,10 @@ class GuiStove():
|
|||
self.mainHBox.show_all()
|
||||
|
||||
if DEBUG == False:
|
||||
warning_string = _("""
|
||||
Stove is a GUI mockup of a EV calculation page, and completely non functional.
|
||||
|
||||
Unless you are interested in developing this feature, please ignore this page.
|
||||
|
||||
If you are interested in developing the code further see GuiStove.py and Stove.py
|
||||
|
||||
Thankyou
|
||||
""")
|
||||
warning_string = _("Stove is a GUI mockup of a EV calculation page, and completely non functional.\n")
|
||||
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")
|
||||
warning_string = _("Thank you\n")
|
||||
self.warning_box(warning_string)
|
||||
|
||||
|
||||
|
|
|
@ -581,6 +581,7 @@ Left-Drag to Move"
|
|||
</hhcs>
|
||||
|
||||
<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"/>
|
||||
</supported_databases>
|
||||
|
||||
|
|
|
@ -323,7 +323,7 @@ def idle_resize(hud):
|
|||
[aw.update_card_positions() for aw in hud.aux_windows]
|
||||
hud.resize_windows()
|
||||
except:
|
||||
log.exception("Error resizing HUD for table: %s." % hud.table.title)
|
||||
log.exception(_("Error resizing HUD for table: %s.") % hud.table.title)
|
||||
finally:
|
||||
gtk.gdk.threads_leave()
|
||||
|
||||
|
@ -337,7 +337,7 @@ def idle_kill(hud_main, table):
|
|||
del(hud_main.hud_dict[table])
|
||||
hud_main.main_window.resize(1, 1)
|
||||
except:
|
||||
log.exception("Error killing HUD for table: %s." % table.title)
|
||||
log.exception(_("Error killing HUD for table: %s.") % table.title)
|
||||
finally:
|
||||
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].reposition_windows()
|
||||
except:
|
||||
log.exception("Error creating HUD for hand %s." % new_hand_id)
|
||||
log.exception(_("Error creating HUD for hand %s.") % new_hand_id)
|
||||
finally:
|
||||
gtk.gdk.threads_leave()
|
||||
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)
|
||||
[aw.update_gui(new_hand_id) for aw in hud_main.hud_dict[table_name].aux_windows]
|
||||
except:
|
||||
log.exception("Error updating HUD for hand %s." % new_hand_id)
|
||||
log.exception(_("Error updating HUD for hand %s.") % new_hand_id)
|
||||
finally:
|
||||
gtk.gdk.threads_leave()
|
||||
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
|
||||
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):
|
||||
"Returns string to search in windows titles for current site"
|
||||
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
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
#Copyright 2010 Chaz Littlejohn
|
||||
#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.
|
||||
|
||||
import L10n
|
||||
_ = L10n.get_translation()
|
||||
|
||||
import re
|
||||
import sys
|
||||
import os
|
||||
import os.path
|
||||
from optparse import OptionParser
|
||||
import codecs
|
||||
import Configuration
|
||||
import Database
|
||||
|
||||
__ARCHIVE_PRE_HEADER_REGEX='^Hand #(\d+)\s*$|\*{20}\s#\s\d+\s\*+\s+'
|
||||
re_SplitArchive = re.compile(__ARCHIVE_PRE_HEADER_REGEX)
|
||||
|
||||
|
||||
class IdentifySite:
|
||||
def __init__(self, config, in_path = '-'):
|
||||
self.in_path = in_path
|
||||
self.config = config
|
||||
self.db = Database.Database(config)
|
||||
self.sitelist = {}
|
||||
self.filelist = {}
|
||||
self.generateSiteList()
|
||||
self.walkDirectory(self.in_path, self.sitelist)
|
||||
|
||||
def generateSiteList(self):
|
||||
"""Generates a ordered dictionary of site, filter and filter name for each site in hhcs"""
|
||||
for site, hhc in self.config.hhcs.iteritems():
|
||||
filter = hhc.converter
|
||||
filter_name = filter.replace("ToFpdb", "")
|
||||
result = self.db.get_site_id(site)
|
||||
if len(result) == 1:
|
||||
self.sitelist[result[0][0]] = (site, filter, filter_name)
|
||||
else:
|
||||
pass
|
||||
|
||||
def walkDirectory(self, dir, sitelist):
|
||||
"""Walks a directory, and executes a callback on each file"""
|
||||
dir = os.path.abspath(dir)
|
||||
for file in [file for file in os.listdir(dir) if not file in [".",".."]]:
|
||||
nfile = os.path.join(dir,file)
|
||||
if os.path.isdir(nfile):
|
||||
self.walkDirectory(nfile, sitelist)
|
||||
else:
|
||||
self.idSite(nfile, sitelist)
|
||||
|
||||
def __listof(self, x):
|
||||
if isinstance(x, list) or isinstance(x, tuple):
|
||||
return x
|
||||
else:
|
||||
return [x]
|
||||
|
||||
def idSite(self, file, sitelist):
|
||||
"""Identifies the site the hh file originated from"""
|
||||
if file.endswith('.txt'):
|
||||
self.filelist[file] = ''
|
||||
archive = False
|
||||
for site, info in sitelist.iteritems():
|
||||
mod = __import__(info[1])
|
||||
obj = getattr(mod, info[2], None)
|
||||
|
||||
for kodec in self.__listof(obj.codepage):
|
||||
try:
|
||||
in_fh = codecs.open(file, 'r', kodec)
|
||||
whole_file = in_fh.read()
|
||||
in_fh.close()
|
||||
|
||||
if info[2] in ('OnGame', 'Winamax'):
|
||||
m = obj.re_HandInfo.search(whole_file)
|
||||
elif info[2] in ('PartyPoker'):
|
||||
m = obj.re_GameInfoRing.search(whole_file)
|
||||
if not m:
|
||||
m = obj.re_GameInfoTrny.search(whole_file)
|
||||
else:
|
||||
m = obj.re_GameInfo.search(whole_file)
|
||||
if re_SplitArchive.search(whole_file):
|
||||
archive = True
|
||||
if m:
|
||||
self.filelist[file] = [info[0]] + [info[1]] + [kodec] + [archive]
|
||||
break
|
||||
except:
|
||||
pass
|
||||
|
||||
def main(argv=None):
|
||||
if argv is None:
|
||||
argv = sys.argv[1:]
|
||||
|
||||
config = Configuration.Config(file = "HUD_config.test.xml")
|
||||
in_path = 'regression-test-files/'
|
||||
IdSite = IdentifySite(config, in_path)
|
||||
|
||||
print "\n----------- SITE LIST -----------"
|
||||
for site, info in IdSite.sitelist.iteritems():
|
||||
print site, info
|
||||
print "----------- END SITE LIST -----------"
|
||||
|
||||
print "\n----------- ID REGRESSION FILES -----------"
|
||||
for file, site in IdSite.filelist.iteritems():
|
||||
print file, site
|
||||
print "----------- END ID REGRESSION FILES -----------"
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
sys.exit(main())
|
||||
#!/usr/bin/python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
#Copyright 2010 Chaz Littlejohn
|
||||
#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.
|
||||
|
||||
import L10n
|
||||
_ = L10n.get_translation()
|
||||
|
||||
import re
|
||||
import sys
|
||||
import os
|
||||
import os.path
|
||||
from optparse import OptionParser
|
||||
import codecs
|
||||
import Configuration
|
||||
import Database
|
||||
|
||||
__ARCHIVE_PRE_HEADER_REGEX='^Hand #(\d+)\s*$|\*{20}\s#\s\d+\s\*+\s+'
|
||||
re_SplitArchive = re.compile(__ARCHIVE_PRE_HEADER_REGEX)
|
||||
|
||||
|
||||
class IdentifySite:
|
||||
def __init__(self, config, in_path = '-'):
|
||||
self.in_path = in_path
|
||||
self.config = config
|
||||
self.db = Database.Database(config)
|
||||
self.sitelist = {}
|
||||
self.filelist = {}
|
||||
self.generateSiteList()
|
||||
self.walkDirectory(self.in_path, self.sitelist)
|
||||
|
||||
def generateSiteList(self):
|
||||
"""Generates a ordered dictionary of site, filter and filter name for each site in hhcs"""
|
||||
for site, hhc in self.config.hhcs.iteritems():
|
||||
filter = hhc.converter
|
||||
filter_name = filter.replace("ToFpdb", "")
|
||||
result = self.db.get_site_id(site)
|
||||
if len(result) == 1:
|
||||
self.sitelist[result[0][0]] = (site, filter, filter_name)
|
||||
else:
|
||||
pass
|
||||
|
||||
def walkDirectory(self, dir, sitelist):
|
||||
"""Walks a directory, and executes a callback on each file"""
|
||||
dir = os.path.abspath(dir)
|
||||
for file in [file for file in os.listdir(dir) if not file in [".",".."]]:
|
||||
nfile = os.path.join(dir,file)
|
||||
if os.path.isdir(nfile):
|
||||
self.walkDirectory(nfile, sitelist)
|
||||
else:
|
||||
self.idSite(nfile, sitelist)
|
||||
|
||||
def __listof(self, x):
|
||||
if isinstance(x, list) or isinstance(x, tuple):
|
||||
return x
|
||||
else:
|
||||
return [x]
|
||||
|
||||
def idSite(self, file, sitelist):
|
||||
"""Identifies the site the hh file originated from"""
|
||||
if file.endswith('.txt'):
|
||||
self.filelist[file] = ''
|
||||
archive = False
|
||||
for site, info in sitelist.iteritems():
|
||||
mod = __import__(info[1])
|
||||
obj = getattr(mod, info[2], None)
|
||||
|
||||
for kodec in self.__listof(obj.codepage):
|
||||
try:
|
||||
in_fh = codecs.open(file, 'r', kodec)
|
||||
whole_file = in_fh.read()
|
||||
in_fh.close()
|
||||
|
||||
if info[2] in ('OnGame', 'Winamax'):
|
||||
m = obj.re_HandInfo.search(whole_file)
|
||||
elif info[2] in ('PartyPoker'):
|
||||
m = obj.re_GameInfoRing.search(whole_file)
|
||||
if not m:
|
||||
m = obj.re_GameInfoTrny.search(whole_file)
|
||||
else:
|
||||
m = obj.re_GameInfo.search(whole_file)
|
||||
if re_SplitArchive.search(whole_file):
|
||||
archive = True
|
||||
if m:
|
||||
self.filelist[file] = [info[0]] + [info[1]] + [kodec] + [archive]
|
||||
break
|
||||
except:
|
||||
pass
|
||||
|
||||
def main(argv=None):
|
||||
if argv is None:
|
||||
argv = sys.argv[1:]
|
||||
|
||||
config = Configuration.Config(file = "HUD_config.test.xml")
|
||||
in_path = 'regression-test-files/'
|
||||
IdSite = IdentifySite(config, in_path)
|
||||
|
||||
print "\n----------- SITE LIST -----------"
|
||||
for site, info in IdSite.sitelist.iteritems():
|
||||
print site, info
|
||||
print "----------- END SITE LIST -----------"
|
||||
|
||||
print "\n----------- ID REGRESSION FILES -----------"
|
||||
for file, site in IdSite.filelist.iteritems():
|
||||
print file, site
|
||||
print "----------- END ID REGRESSION FILES -----------"
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
sys.exit(main())
|
||||
|
|
|
@ -42,11 +42,12 @@ class OnGame(HandHistoryConverter):
|
|||
siteId = 5 # Needs to match id entry in Sites database
|
||||
|
||||
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 = {
|
||||
'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'}
|
||||
|
||||
|
@ -89,10 +90,10 @@ class OnGame(HandHistoryConverter):
|
|||
(
|
||||
(?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
|
||||
(%(LS)s)?(?P<SB>[.0-9]+)/
|
||||
(?P<CURRENCY>%(LS)s|)?(?P<SB>[.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_Button = re.compile('Button: seat (?P<BUTTON>\d+)', re.MULTILINE) # Button: seat 2
|
||||
|
@ -174,7 +175,8 @@ class OnGame(HandHistoryConverter):
|
|||
mg = m.groupdict()
|
||||
|
||||
info['type'] = 'ring'
|
||||
info['currency'] = 'USD'
|
||||
if 'CURRENCY' in mg:
|
||||
info['currency'] = self.currencies[mg['CURRENCY']]
|
||||
|
||||
if 'LIMIT' in mg:
|
||||
if mg['LIMIT'] in self.limits:
|
||||
|
@ -326,7 +328,7 @@ class OnGame(HandHistoryConverter):
|
|||
def readAction(self, hand, street):
|
||||
m = self.re_Action.finditer(hand.streets[street])
|
||||
for action in m:
|
||||
acts = action.groupdict()
|
||||
#acts = action.groupdict()
|
||||
#log.debug("readaction: acts: %s" %acts)
|
||||
if action.group('ATYPE') == ' raises':
|
||||
hand.addRaiseBy( street, action.group('PNAME'), action.group('BET') )
|
||||
|
|
|
@ -240,8 +240,8 @@ class PartyPoker(HandHistoryConverter):
|
|||
info['sb'] = "%.2f" % (sb)
|
||||
info['currency'] = self.currencies[mg['CURRENCY']]
|
||||
else:
|
||||
info['sb'] = clearMoneyString(mg['SB'])
|
||||
info['bb'] = clearMoneyString(mg['BB'])
|
||||
info['sb'] = self.clearMoneyString(mg['SB'])
|
||||
info['bb'] = self.clearMoneyString(mg['BB'])
|
||||
info['currency'] = 'T$'
|
||||
|
||||
return info
|
||||
|
@ -361,10 +361,10 @@ class PartyPoker(HandHistoryConverter):
|
|||
if a.group('CASH') > '0':
|
||||
#record max known stack for use with players with unknown stack
|
||||
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:
|
||||
#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':
|
||||
#finds first vacant seat after an exact seat
|
||||
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
|
||||
for p in zeroStackPlayers:
|
||||
if p[1] in match_JoiningPlayers:
|
||||
p[2] = clearMoneyString(maxKnownStack)
|
||||
p[2] = self.clearMoneyString(maxKnownStack)
|
||||
hand.addPlayer(p[0],p[1],p[2])
|
||||
|
||||
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.sort()
|
||||
newPlayerSeat = findFirstEmptySeat(previousBBPosterSeat)
|
||||
hand.addPlayer(newPlayerSeat,player,clearMoneyString(maxKnownStack))
|
||||
hand.addPlayer(newPlayerSeat,player,self.clearMoneyString(maxKnownStack))
|
||||
|
||||
def markStreets(self, hand):
|
||||
m = re.search(
|
||||
|
@ -491,7 +491,7 @@ class PartyPoker(HandHistoryConverter):
|
|||
for action in m:
|
||||
acts = action.groupdict()
|
||||
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')
|
||||
|
||||
if actionType == 'is all-In':
|
||||
|
@ -530,7 +530,7 @@ class PartyPoker(HandHistoryConverter):
|
|||
|
||||
def readCollectPot(self,hand):
|
||||
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):
|
||||
for m in self.re_ShownCards.finditer(hand.handText):
|
||||
|
@ -554,10 +554,6 @@ class PartyPoker(HandHistoryConverter):
|
|||
else:
|
||||
return table_name
|
||||
|
||||
def clearMoneyString(money):
|
||||
"Renders 'numbers' like '1 200' and '2,000'"
|
||||
return money.replace(' ', '').replace(',', '')
|
||||
|
||||
def renderCards(string):
|
||||
"Splits strings like ' Js, 4d '"
|
||||
cards = string.strip().split(' ')
|
||||
|
|
|
@ -222,6 +222,8 @@ class Winamax(HandHistoryConverter):
|
|||
if key == 'HID1':
|
||||
# Need to remove non-alphanumerics for MySQL
|
||||
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':
|
||||
hand.tourNo = info[key]
|
||||
if key == 'TABLE':
|
||||
|
|
|
@ -123,7 +123,7 @@ import Configuration
|
|||
import Exceptions
|
||||
import Stats
|
||||
|
||||
VERSION = "0.21-rc1"
|
||||
VERSION = "0.21-rc1 plus git"
|
||||
|
||||
|
||||
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"))
|
||||
|
||||
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)
|
||||
self.threads.append(thread)
|
||||
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