Merge branch 'carl'
This commit is contained in:
		
						commit
						b549feab03
					
				| 
						 | 
					@ -1,3 +1,9 @@
 | 
				
			||||||
 | 
					free-poker-tools (0.21~rc1) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * First 0.21 release candidate
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Mika Bostrom <bostik@iki.fi>  Mon, 06 Dec 2010 17:30:54 +0200
 | 
				
			||||||
 | 
					
 | 
				
			||||||
free-poker-tools (0.20.906-1) unstable; urgency=low
 | 
					free-poker-tools (0.20.906-1) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  * New snapshot
 | 
					  * New snapshot
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -11,9 +11,8 @@ Section: games
 | 
				
			||||||
Priority: extra
 | 
					Priority: extra
 | 
				
			||||||
Depends: ${python:Depends}, python-gtk2, python-matplotlib,
 | 
					Depends: ${python:Depends}, python-gtk2, python-matplotlib,
 | 
				
			||||||
	python-support, python-xlib,
 | 
						python-support, python-xlib,
 | 
				
			||||||
	mysql-server | postgresql | python-pysqlite2,
 | 
						python-pysqlite2
 | 
				
			||||||
	python-psycopg2 | python-mysqldb
 | 
					Suggests: wine, postgresql | mysql-server, python-psycopg2 | python-mysqldb
 | 
				
			||||||
Suggests: wine
 | 
					 | 
				
			||||||
Description: free poker database with HUD
 | 
					Description: free poker database with HUD
 | 
				
			||||||
 FPDB is a statistics tool for online poker. It supports most sites
 | 
					 FPDB is a statistics tool for online poker. It supports most sites
 | 
				
			||||||
 and several games. Most prominent feature is its heads-up display
 | 
					 and several games. Most prominent feature is its heads-up display
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -60,11 +60,14 @@ import Configuration
 | 
				
			||||||
#    Other library modules
 | 
					#    Other library modules
 | 
				
			||||||
try:
 | 
					try:
 | 
				
			||||||
    import sqlalchemy.pool as pool
 | 
					    import sqlalchemy.pool as pool
 | 
				
			||||||
    use_pool = True
 | 
					    #use_pool = True
 | 
				
			||||||
 | 
					    # Forcing to False so we can use connection.row_factory
 | 
				
			||||||
 | 
					    use_pool = False
 | 
				
			||||||
except ImportError:
 | 
					except ImportError:
 | 
				
			||||||
    log.info(_("Not using sqlalchemy connection pool."))
 | 
					    log.info(_("Not using sqlalchemy connection pool."))
 | 
				
			||||||
    use_pool = False
 | 
					    use_pool = False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
try:
 | 
					try:
 | 
				
			||||||
    from numpy import var
 | 
					    from numpy import var
 | 
				
			||||||
    use_numpy = True
 | 
					    use_numpy = True
 | 
				
			||||||
| 
						 | 
					@ -446,7 +449,8 @@ class Database:
 | 
				
			||||||
            self.db_path = database
 | 
					            self.db_path = database
 | 
				
			||||||
            log.info(_("Connecting to SQLite: %(database)s") % {'database':self.db_path})
 | 
					            log.info(_("Connecting to SQLite: %(database)s") % {'database':self.db_path})
 | 
				
			||||||
            if os.path.exists(database) or create:
 | 
					            if os.path.exists(database) or create:
 | 
				
			||||||
                self.connection = sqlite3.connect(self.db_path, detect_types=sqlite3.PARSE_DECLTYPES )
 | 
					                self.connection = sqlite3.connect(self.db_path, detect_types=sqlite3.PARSE_DECLTYPES)
 | 
				
			||||||
 | 
					                self.connection.row_factory = sqlite3.Row
 | 
				
			||||||
                self.__connected = True
 | 
					                self.__connected = True
 | 
				
			||||||
                sqlite3.register_converter("bool", lambda x: bool(int(x)))
 | 
					                sqlite3.register_converter("bool", lambda x: bool(int(x)))
 | 
				
			||||||
                sqlite3.register_adapter(bool, lambda x: "1" if x else "0")
 | 
					                sqlite3.register_adapter(bool, lambda x: "1" if x else "0")
 | 
				
			||||||
| 
						 | 
					@ -1699,6 +1703,10 @@ class Database:
 | 
				
			||||||
            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']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2090,7 +2098,7 @@ class Database:
 | 
				
			||||||
                if (game['type']=='ring'): line[0] = 1 # count ring hands
 | 
					                if (game['type']=='ring'): line[0] = 1 # count ring hands
 | 
				
			||||||
                if (game['type']=='tour'): line[1] = 1 # count tour hands
 | 
					                if (game['type']=='tour'): line[1] = 1 # count tour hands
 | 
				
			||||||
                if (game['type']=='ring'): line[2] = pdata[p]['totalProfit'] #sum of profit
 | 
					                if (game['type']=='ring'): line[2] = pdata[p]['totalProfit'] #sum of profit
 | 
				
			||||||
                if (game['type']=='ring'): line[3] = float(Decimal(pdata[p]['totalProfit'])/Decimal(bigBet)) #sum of big bets won
 | 
					                if (game['type']=='ring'): line[3] = 0 #float(Decimal(pdata[p]['totalProfit'])/Decimal(bigBet)) #sum of big bets won
 | 
				
			||||||
                line[4] = startTime
 | 
					                line[4] = startTime
 | 
				
			||||||
                inserts.append(line)
 | 
					                inserts.append(line)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -31,6 +31,9 @@ import gtk
 | 
				
			||||||
import math
 | 
					import math
 | 
				
			||||||
import gobject
 | 
					import gobject
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import pprint
 | 
				
			||||||
 | 
					pp = pprint.PrettyPrinter(indent=4)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class GuiReplayer:
 | 
					class GuiReplayer:
 | 
				
			||||||
    def __init__(self, config, querylist, mainwin, options = None, debug=True):
 | 
					    def __init__(self, config, querylist, mainwin, options = None, debug=True):
 | 
				
			||||||
| 
						 | 
					@ -100,30 +103,16 @@ class GuiReplayer:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self.replayBox.pack_start(self.area)
 | 
					        self.replayBox.pack_start(self.area)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self.MyHand = self.importhand()
 | 
					        gobject.timeout_add(1000,self.draw_action)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self.maxseats=self.MyHand.maxseats
 | 
					        self.MyHand = self.importhand()
 | 
				
			||||||
 | 
					        self.table = Table(self.area, self.MyHand).table
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if self.MyHand.gametype['currency']=="USD":    #TODO: check if there are others ..
 | 
					        if self.MyHand.gametype['currency']=="USD":    #TODO: check if there are others ..
 | 
				
			||||||
            self.currency="$"
 | 
					            self.currency="$"
 | 
				
			||||||
        elif self.MyHand.gametype['currency']=="EUR":
 | 
					        elif self.MyHand.gametype['currency']=="EUR":
 | 
				
			||||||
            self.currency="€"
 | 
					            self.currency="€"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
        self.table={}     #create table with positions, player names, status (live/folded), stacks and chips on table
 | 
					 | 
				
			||||||
        for i in range(0,self.maxseats):     # radius: 200, center: 250,250
 | 
					 | 
				
			||||||
            x= int (round(250+200*math.cos(2*i*math.pi/self.maxseats)))
 | 
					 | 
				
			||||||
            y= int (round(250+200*math.sin(2*i*math.pi/self.maxseats)))
 | 
					 | 
				
			||||||
            try:
 | 
					 | 
				
			||||||
                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']
 | 
					 | 
				
			||||||
                except:
 | 
					 | 
				
			||||||
                    self.table[i]['holecards']=''
 | 
					 | 
				
			||||||
            except IndexError:  #if seat is empty
 | 
					 | 
				
			||||||
                print "seat ",i+1," out of ",self.maxseats," empty"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        self.actions=[]     #create list with all actions
 | 
					        self.actions=[]     #create list with all actions
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if isinstance(self.MyHand, HoldemOmahaHand):
 | 
					        if isinstance(self.MyHand, HoldemOmahaHand):
 | 
				
			||||||
| 
						 | 
					@ -133,7 +122,6 @@ class GuiReplayer:
 | 
				
			||||||
        self.action_number=0
 | 
					        self.action_number=0
 | 
				
			||||||
        self.action_level=0
 | 
					        self.action_level=0
 | 
				
			||||||
        self.pot=0
 | 
					        self.pot=0
 | 
				
			||||||
        gobject.timeout_add(1000,self.draw_action)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def area_expose(self, area, event):
 | 
					    def area_expose(self, area, event):
 | 
				
			||||||
| 
						 | 
					@ -249,7 +237,7 @@ class GuiReplayer:
 | 
				
			||||||
        be replaced by a function to select a hand from the db in the not so distant future.
 | 
					        be replaced by a function to select a hand from the db in the not so distant future.
 | 
				
			||||||
        This code has been shamelessly stolen from Carl
 | 
					        This code has been shamelessly stolen from Carl
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
        if True:
 | 
					        if False:
 | 
				
			||||||
            settings = {}
 | 
					            settings = {}
 | 
				
			||||||
            settings.update(self.conf.get_db_parameters())
 | 
					            settings.update(self.conf.get_db_parameters())
 | 
				
			||||||
            settings.update(self.conf.get_import_parameters())
 | 
					            settings.update(self.conf.get_import_parameters())
 | 
				
			||||||
| 
						 | 
					@ -276,7 +264,7 @@ class GuiReplayer:
 | 
				
			||||||
            # for the Hand.__init__
 | 
					            # for the Hand.__init__
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            ####### Shift this section in Database.py for all to use ######
 | 
					            ####### Shift this section in Database.py for all to use ######
 | 
				
			||||||
            handid = 40
 | 
					            handid = 1
 | 
				
			||||||
            q = self.sql.query['get_gameinfo_from_hid']
 | 
					            q = self.sql.query['get_gameinfo_from_hid']
 | 
				
			||||||
            q = q.replace('%s', self.sql.query['placeholder'])
 | 
					            q = q.replace('%s', self.sql.query['placeholder'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -295,10 +283,74 @@ class GuiReplayer:
 | 
				
			||||||
                print "DEBUG: Create stud hand here"
 | 
					                print "DEBUG: Create stud hand here"
 | 
				
			||||||
            elif gametype['base'] == 'draw':
 | 
					            elif gametype['base'] == 'draw':
 | 
				
			||||||
                print "DEBUG: Create draw hand here"
 | 
					                print "DEBUG: Create draw hand here"
 | 
				
			||||||
 | 
					            return h
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def temp(self):
 | 
					    def temp(self):
 | 
				
			||||||
        pass
 | 
					        pass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Table:
 | 
				
			||||||
 | 
					    def __init__(self, darea, hand):
 | 
				
			||||||
 | 
					        self.darea = darea
 | 
				
			||||||
 | 
					        self.hand = hand
 | 
				
			||||||
 | 
					        self.players = []
 | 
				
			||||||
 | 
					        #self.pixmap = gtk.gdk.Pixmap(darea, width, height, depth=-1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # tmp var while refactoring
 | 
				
			||||||
 | 
					        self.table = {}
 | 
				
			||||||
 | 
					        i = 0
 | 
				
			||||||
 | 
					        for seat, name, chips in hand.players:
 | 
				
			||||||
 | 
					            self.players.append(Player(hand, name, chips, seat))
 | 
				
			||||||
 | 
					            self.table[i] = self.players[i].get_hash()
 | 
				
			||||||
 | 
					            i += 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        pp.pprint(self.table)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def draw(self):
 | 
				
			||||||
 | 
					        draw_players()
 | 
				
			||||||
 | 
					        draw_pot()
 | 
				
			||||||
 | 
					        draw_community_cards()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Player:
 | 
				
			||||||
 | 
					    def __init__(self, hand, name, stack, seat):
 | 
				
			||||||
 | 
					        self.status    = 'live'
 | 
				
			||||||
 | 
					        self.stack     = Decimal(stack)
 | 
				
			||||||
 | 
					        self.chips     = 0
 | 
				
			||||||
 | 
					        self.seat      = seat
 | 
				
			||||||
 | 
					        self.name      = name
 | 
				
			||||||
 | 
					        self.holecards = hand.join_holecards(name)
 | 
				
			||||||
 | 
					        self.x         = int (round(250+200*math.cos(2*self.seat*math.pi/hand.maxseats)))
 | 
				
			||||||
 | 
					        self.y         = int (round(250+200*math.sin(2*self.seat*math.pi/hand.maxseats)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def get_hash(self):
 | 
				
			||||||
 | 
					        return { 'chips': 0,
 | 
				
			||||||
 | 
					                 'holecards': self.holecards,
 | 
				
			||||||
 | 
					                 'name': self.name,
 | 
				
			||||||
 | 
					                 'stack': self.stack,
 | 
				
			||||||
 | 
					                 'status': self.status,
 | 
				
			||||||
 | 
					                 'x': self.x,
 | 
				
			||||||
 | 
					                 'y': self.y,
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def draw(self):
 | 
				
			||||||
 | 
					        draw_name()
 | 
				
			||||||
 | 
					        draw_stack()
 | 
				
			||||||
 | 
					        draw_cards()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Pot:
 | 
				
			||||||
 | 
					    def __init__(self, hand):
 | 
				
			||||||
 | 
					        self.total = 0.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def draw(self):
 | 
				
			||||||
 | 
					        pass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class CommunityCards:
 | 
				
			||||||
 | 
					    def __init__(self, hand):
 | 
				
			||||||
 | 
					        self.pixbuf = self.gen_pixbuf_from_file(PATH_TO_THE_FILE)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def draw(self):
 | 
				
			||||||
 | 
					        pass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def main(argv=None):
 | 
					def main(argv=None):
 | 
				
			||||||
    """main can also be called in the python interpreter, by supplying the command line as the argument."""
 | 
					    """main can also be called in the python interpreter, by supplying the command line as the argument."""
 | 
				
			||||||
    if argv is None:
 | 
					    if argv is None:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										185
									
								
								pyfpdb/Hand.py
									
									
									
									
									
								
							
							
						
						
									
										185
									
								
								pyfpdb/Hand.py
									
									
									
									
									
								
							| 
						 | 
					@ -289,104 +289,131 @@ db: a connected Database object"""
 | 
				
			||||||
                        hp.seatno,
 | 
					                        hp.seatno,
 | 
				
			||||||
                        round(hp.winnings / 100.0,2) as winnings,
 | 
					                        round(hp.winnings / 100.0,2) as winnings,
 | 
				
			||||||
                        p.name,
 | 
					                        p.name,
 | 
				
			||||||
                        round(hp.startcash / 100.0,2) as chips,
 | 
					                        round(hp.startCash / 100.0,2) as chips,
 | 
				
			||||||
                        hp.card1,hp.card2,
 | 
					                        hp.card1,hp.card2,hp.card3,hp.card4,
 | 
				
			||||||
                        hp.position
 | 
					                        hp.position
 | 
				
			||||||
                    FROM
 | 
					                    FROM
 | 
				
			||||||
                        HandsPlayers as hp,
 | 
					                        HandsPlayers as hp,
 | 
				
			||||||
                        Players as p
 | 
					                        Players as p
 | 
				
			||||||
                    WHERE
 | 
					                    WHERE
 | 
				
			||||||
                        hp.handId = %s
 | 
					                        hp.handId = %s
 | 
				
			||||||
                        and p.id = hp.playerid
 | 
					                        and p.id = hp.playerId
 | 
				
			||||||
 | 
					                    ORDER BY
 | 
				
			||||||
 | 
					                        hp.seatno
 | 
				
			||||||
                """
 | 
					                """
 | 
				
			||||||
        q = q.replace('%s', db.sql.query['placeholder'])
 | 
					        q = q.replace('%s', db.sql.query['placeholder'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # PlayerStacks
 | 
					        # PlayerStacks
 | 
				
			||||||
        c.execute(q, (handId,))
 | 
					        c.execute(q, (handId,))
 | 
				
			||||||
        for (seat, winnings, name, chips, card1,card2, position) in c.fetchall():
 | 
					        for (seat, winnings, name, chips, card1, card2, card3, card4, position) in c.fetchall():
 | 
				
			||||||
            print "DEBUG: seat: '%s'\tname: '%s'\tchips: '%s'" % (seat, name, chips)
 | 
					            #print "DEBUG: addPlayer(%s, %s, %s)" %(seat,name,str(chips))
 | 
				
			||||||
            self.addPlayer(seat,name,str(chips))
 | 
					            self.addPlayer(seat,name,str(chips))
 | 
				
			||||||
            #if card1 and card2:
 | 
					            #print "DEBUG: card1: %s" % card1
 | 
				
			||||||
            #    self.addHoleCards(map(Card.valueSuitFromCard, (card1,card2)), name, dealt=True)
 | 
					            # map() should work, but is returning integers... FIXME later
 | 
				
			||||||
            #if winnings > 0:
 | 
					            #cardlist = map(Card.valueSuitFromCard, [card1, card2, card3, card4])
 | 
				
			||||||
            #    self.addCollectPot(name, winnings)
 | 
					            cardlist = [Card.valueSuitFromCard(card1), Card.valueSuitFromCard(card2), Card.valueSuitFromCard(card3), Card.valueSuitFromCard(card4)]
 | 
				
			||||||
            #if position == 'B':
 | 
					            #print "DEUBG: cardlist: '%s'" % cardlist
 | 
				
			||||||
            #    self.buttonpos = seat
 | 
					            if cardlist[0] == '':
 | 
				
			||||||
 | 
					                pass
 | 
				
			||||||
 | 
					            elif self.gametype['category'] == 'holdem':
 | 
				
			||||||
 | 
					                self.addHoleCards('PREFLOP', name, closed=cardlist[0:2], shown=False, mucked=False, dealt=True)
 | 
				
			||||||
 | 
					            elif self.gametype['category'] == 'omaha':
 | 
				
			||||||
 | 
					                self.addHoleCards('PREFLOP', name, closed=cardlist, shown=False, mucked=False, dealt=True)
 | 
				
			||||||
 | 
					            if winnings > 0:
 | 
				
			||||||
 | 
					                self.addCollectPot(name, str(winnings))
 | 
				
			||||||
 | 
					            if position == 'B':
 | 
				
			||||||
 | 
					                self.buttonpos = seat
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # HandInfo : HID, TABLE
 | 
					        # HandInfo
 | 
				
			||||||
        # BUTTON - why is this treated specially in Hand?
 | 
					        q = """SELECT *
 | 
				
			||||||
        # answer: it is written out in hand histories
 | 
					                    FROM Hands
 | 
				
			||||||
        # still, I think we should record all the active seat positions in a seat_order array
 | 
					                    WHERE id = %s
 | 
				
			||||||
        #c.execute("""SELECT
 | 
					            """
 | 
				
			||||||
        #                h.sitehandno as hid,
 | 
					        q = q.replace('%s', db.sql.query['placeholder'])
 | 
				
			||||||
        #                h.tablename as table,
 | 
					        c.execute(q, (handId,))
 | 
				
			||||||
        #                h.startTime as startTime
 | 
					
 | 
				
			||||||
        #            FROM
 | 
					        # NOTE: This relies on row_factory = sqlite3.Row (set in connect() params)
 | 
				
			||||||
        #                Hands as h
 | 
					        #       Need to find MySQL and Postgres equivalents
 | 
				
			||||||
        #            WHERE h.id = %(handid)s
 | 
					        #       MySQL maybe: cursorclass=MySQLdb.cursors.DictCursor
 | 
				
			||||||
        #            """, {'handid':handid})
 | 
					        res = c.fetchone()
 | 
				
			||||||
        #res = c.fetchone()
 | 
					        self.tablename = res['tableName']
 | 
				
			||||||
        #h.handid = res[0]
 | 
					        self.handid    = res['siteHandNo']
 | 
				
			||||||
        #h.tablename = res[1]
 | 
					        self.startTime = datetime.datetime.strptime(res['startTime'], "%Y-%m-%d %H:%M:%S+00:00")
 | 
				
			||||||
        #h.startTime = res[2] # automatically a datetime
 | 
					        #res['tourneyId']
 | 
				
			||||||
 | 
					        #gametypeId
 | 
				
			||||||
 | 
					        #res['importTime']  # Don't really care about this
 | 
				
			||||||
 | 
					        #res['seats']
 | 
				
			||||||
 | 
					        self.maxseats = res['maxSeats']
 | 
				
			||||||
 | 
					        #res['rush']
 | 
				
			||||||
 | 
					        cards = map(Card.valueSuitFromCard, [res['boardcard1'], res['boardcard2'], res['boardcard3'], res['boardcard4'], res['boardcard5']])
 | 
				
			||||||
 | 
					        #print "DEBUG: res['boardcard1']: %s" % res['boardcard1']
 | 
				
			||||||
 | 
					        #print "DEBUG: cards: %s" % cards
 | 
				
			||||||
 | 
					        if cards[0]:
 | 
				
			||||||
 | 
					            self.setCommunityCards('FLOP', cards[0:3])
 | 
				
			||||||
 | 
					        if cards[3]:
 | 
				
			||||||
 | 
					            self.setCommunityCards('TURN', [cards[3]])
 | 
				
			||||||
 | 
					        if cards[4]:
 | 
				
			||||||
 | 
					            self.setCommunityCards('RIVER', [cards[4]])
 | 
				
			||||||
 | 
					        # playersVpi | playersAtStreet1 | playersAtStreet2 | playersAtStreet3 |
 | 
				
			||||||
 | 
					        # playersAtStreet4 | playersAtShowdown | street0Raises | street1Raises |
 | 
				
			||||||
 | 
					        # street2Raises | street3Raises | street4Raises | street1Pot | street2Pot |
 | 
				
			||||||
 | 
					        # street3Pot | street4Pot | showdownPot | comment | commentTs | texture
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #cards = map(Card.valueSuitFromCard, res[11:16] )
 | 
					        # Actions
 | 
				
			||||||
        #if cards[0]:
 | 
					        q = """SELECT
 | 
				
			||||||
        #    h.setCommunityCards('FLOP', cards[0:3])
 | 
					                      ha.actionNo,
 | 
				
			||||||
        #if cards[3]:
 | 
					                      p.name,
 | 
				
			||||||
        #    h.setCommunityCards('TURN', [cards[3]])
 | 
					                      ha.street,
 | 
				
			||||||
        #if cards[4]:
 | 
					                      ha.actionId,
 | 
				
			||||||
        #    h.setCommunityCards('RIVER', [cards[4]])
 | 
					                      ha.allIn,
 | 
				
			||||||
        #[Card.valueSuitFromCard(x) for x in cards]
 | 
					                      round(ha.amount / 100.0,2) as bet
 | 
				
			||||||
 | 
					                FROM
 | 
				
			||||||
 | 
					                      HandsActions as ha,
 | 
				
			||||||
 | 
					                      HandsPlayers as hp,
 | 
				
			||||||
 | 
					                      Players as p,
 | 
				
			||||||
 | 
					                      Hands as h
 | 
				
			||||||
 | 
					                WHERE
 | 
				
			||||||
 | 
					                      h.id = %s
 | 
				
			||||||
 | 
					                      and ha.handsPlayerId = hp.id
 | 
				
			||||||
 | 
					                      and hp.playerId = p.id
 | 
				
			||||||
 | 
					                      AND h.id = hp.handId
 | 
				
			||||||
 | 
					                ORDER BY
 | 
				
			||||||
 | 
					                      ha.id ASC
 | 
				
			||||||
 | 
					;           """
 | 
				
			||||||
 | 
					        q = q.replace('%s', db.sql.query['placeholder'])
 | 
				
			||||||
 | 
					        c.execute(q, (handId,))
 | 
				
			||||||
 | 
					        for row in c.fetchall():
 | 
				
			||||||
 | 
					            name = row['name']
 | 
				
			||||||
 | 
					            street = row['street']
 | 
				
			||||||
 | 
					            act = row['actionId']
 | 
				
			||||||
 | 
					            # allin True/False if row['allIn'] == 0
 | 
				
			||||||
 | 
					            bet = row['bet']
 | 
				
			||||||
 | 
					            street = self.allStreets[int(street)+1]
 | 
				
			||||||
 | 
					            #print "DEBUG: name: '%s' street: '%s' act: '%s' bet: '%s'" %(name, street, act, bet)
 | 
				
			||||||
 | 
					            if   act == 2: # Small Blind
 | 
				
			||||||
 | 
					                print "DEBUG: addBlind(%s, 'small blind', %s" %(name, str(bet))
 | 
				
			||||||
 | 
					                self.addBlind(name, 'small blind', str(bet))
 | 
				
			||||||
 | 
					            elif act == 4: # Big Blind
 | 
				
			||||||
 | 
					                self.addBlind(name, 'big blind', str(bet))
 | 
				
			||||||
 | 
					            elif act == 6: # Call
 | 
				
			||||||
 | 
					                self.addCall(street, name, str(bet))
 | 
				
			||||||
 | 
					            elif act == 8: # Bet
 | 
				
			||||||
 | 
					                self.addBet(street, name, str(bet))
 | 
				
			||||||
 | 
					            elif act == 10: # Fold
 | 
				
			||||||
 | 
					                self.addFold(street, name)
 | 
				
			||||||
 | 
					            elif act == 11: # Check
 | 
				
			||||||
 | 
					                self.addCheck(street, name)
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                print "DEBUG: unknown action: '%s'" % act
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.totalPot()
 | 
				
			||||||
        # actions
 | 
					        self.rake = self.totalpot - self.totalcollected
 | 
				
			||||||
        #c.execute("""SELECT
 | 
					        self.writeHand()
 | 
				
			||||||
        #                (ha.street,ha.actionno) as actnum,
 | 
					 | 
				
			||||||
        #                p.name,
 | 
					 | 
				
			||||||
        #                ha.street,
 | 
					 | 
				
			||||||
        #                ha.action,
 | 
					 | 
				
			||||||
        #                ha.allin,
 | 
					 | 
				
			||||||
        #                round(ha.amount / 100.0,2)
 | 
					 | 
				
			||||||
        #            FROM
 | 
					 | 
				
			||||||
        #                handsplayers as hp,
 | 
					 | 
				
			||||||
        #                handsactions as ha,
 | 
					 | 
				
			||||||
        #                players as p
 | 
					 | 
				
			||||||
        #            WHERE
 | 
					 | 
				
			||||||
        #                hp.handid = %(handid)s
 | 
					 | 
				
			||||||
        #                and ha.handsplayerid = hp.id
 | 
					 | 
				
			||||||
        #                and p.id = hp.playerid
 | 
					 | 
				
			||||||
        #            ORDER BY
 | 
					 | 
				
			||||||
        #                ha.street,ha.actionno
 | 
					 | 
				
			||||||
        #            """, {'handid':handid})
 | 
					 | 
				
			||||||
        #res = c.fetchall()
 | 
					 | 
				
			||||||
        #for (actnum,player, streetnum, act, allin, amount) in res:
 | 
					 | 
				
			||||||
        #    act=act.strip()
 | 
					 | 
				
			||||||
        #    street = h.allStreets[streetnum+1]
 | 
					 | 
				
			||||||
        #    if act==u'blind':
 | 
					 | 
				
			||||||
        #        h.addBlind(player, 'big blind', amount)
 | 
					 | 
				
			||||||
        #        # TODO: The type of blind is not recorded in the DB.
 | 
					 | 
				
			||||||
        #        # TODO: preflop street name anomalies in Hand
 | 
					 | 
				
			||||||
        #    elif act==u'fold':
 | 
					 | 
				
			||||||
        #        h.addFold(street,player)
 | 
					 | 
				
			||||||
        #    elif act==u'call':
 | 
					 | 
				
			||||||
        #        h.addCall(street,player,amount)
 | 
					 | 
				
			||||||
        #    elif act==u'bet':
 | 
					 | 
				
			||||||
        #        h.addBet(street,player,amount)
 | 
					 | 
				
			||||||
        #    elif act==u'check':
 | 
					 | 
				
			||||||
        #        h.addCheck(street,player)
 | 
					 | 
				
			||||||
        #    elif act==u'unbet':
 | 
					 | 
				
			||||||
        #        pass
 | 
					 | 
				
			||||||
        #    else:
 | 
					 | 
				
			||||||
        #        print act, player, streetnum, allin, amount
 | 
					 | 
				
			||||||
        #    # TODO : other actions
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #hhc.readShowdownActions(self)
 | 
					        #hhc.readShowdownActions(self)
 | 
				
			||||||
        #hc.readShownCards(self)
 | 
					        #hc.readShownCards(self)
 | 
				
			||||||
        #h.totalPot()
 | 
					 | 
				
			||||||
        #h.rake = h.totalpot - h.totalcollected
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def addPlayer(self, seat, name, chips):
 | 
					    def addPlayer(self, seat, name, chips):
 | 
				
			||||||
| 
						 | 
					@ -980,7 +1007,7 @@ class HoldemOmahaHand(Hand):
 | 
				
			||||||
        log.debug(self.actions['PREFLOP'])
 | 
					        log.debug(self.actions['PREFLOP'])
 | 
				
			||||||
        for player in [x for x in self.players if x[1] in players_who_act_preflop]:
 | 
					        for player in [x for x in self.players if x[1] in players_who_act_preflop]:
 | 
				
			||||||
            #Only print stacks of players who do something preflop
 | 
					            #Only print stacks of players who do something preflop
 | 
				
			||||||
            print >>fh, ("Seat %s: %s ($%s in chips) " %(player[0], player[1], player[2]))
 | 
					            print >>fh, ("Seat %s: %s ($%.2f in chips) " %(player[0], player[1], float(player[2])))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if self.actions['BLINDSANTES']:
 | 
					        if self.actions['BLINDSANTES']:
 | 
				
			||||||
            for act in self.actions['BLINDSANTES']:
 | 
					            for act in self.actions['BLINDSANTES']:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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(' ')
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3,23 +3,21 @@
 | 
				
			||||||
"""TourneyTracker.py
 | 
					"""TourneyTracker.py
 | 
				
			||||||
    Based on HUD_main .. who knows if we want to actually use this or not
 | 
					    Based on HUD_main .. who knows if we want to actually use this or not
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
#    Copyright 2008-2010,  Eric Blade
 | 
					# Copyright (c) 2009-2010 Eric Blade, and the FPDB team.
 | 
				
			||||||
#
 | 
					
 | 
				
			||||||
#    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 General Public License as published by
 | 
					#it under the terms of the GNU Affero General Public License as published by
 | 
				
			||||||
#    the Free Software Foundation; either version 2 of the License, or
 | 
					#the Free Software Foundation, version 3 of the License.
 | 
				
			||||||
#    (at your option) any later version.
 | 
					#
 | 
				
			||||||
#
 | 
					#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 General Public License
 | 
					#along with this program. If not, see <http://www.gnu.org/licenses/>.
 | 
				
			||||||
#    along with this program; if not, write to the Free Software
 | 
					#In the "official" distribution you can find the license in agpl-3.0.txt.
 | 
				
			||||||
#    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
########################################################################
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
import L10n
 | 
					import L10n
 | 
				
			||||||
_ = L10n.get_translation()
 | 
					_ = L10n.get_translation()
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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':
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -624,4 +624,4 @@ class ProgressBar:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if __name__ == "__main__":
 | 
					if __name__ == "__main__":
 | 
				
			||||||
    print _("CLI for fpdb_import is now available as CliFpdb.py")
 | 
					    print _("CLI for importing hands is GuiBulkImport.py")
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
										
											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