Hand: Move assemble() function up into select()
This commit is contained in:
		
							parent
							
								
									284021f207
								
							
						
					
					
						commit
						19a32943d8
					
				
							
								
								
									
										276
									
								
								pyfpdb/Hand.py
									
									
									
									
									
								
							
							
						
						
									
										276
									
								
								pyfpdb/Hand.py
									
									
									
									
									
								
							|  | @ -281,9 +281,143 @@ db: a connected Database object""" | |||
| 
 | ||||
|     def select(self, handId): | ||||
|         """ Function to create Hand object from database """ | ||||
|         c = cnxn.cursor() | ||||
| 
 | ||||
|         # We need at least sitename, gametype, handid | ||||
|         # for the Hand.__init__ | ||||
|         c.execute("""SELECT | ||||
|                         s.name, | ||||
|                         g.category, | ||||
|                         g.base, | ||||
|                         g.type, | ||||
|                         g.limitType, | ||||
|                         g.hilo, | ||||
|                         round(g.smallBlind / 100.0,2), | ||||
|                         round(g.bigBlind / 100.0,2), | ||||
|                         round(g.smallBet / 100.0,2), | ||||
|                         round(g.bigBet / 100.0,2), | ||||
|                         s.currency, | ||||
|                         h.boardcard1, | ||||
|                         h.boardcard2, | ||||
|                         h.boardcard3, | ||||
|                         h.boardcard4, | ||||
|                         h.boardcard5 | ||||
|                     FROM | ||||
|                         hands as h, | ||||
|                         sites as s, | ||||
|                         gametypes as g, | ||||
|                         handsplayers as hp, | ||||
|                         players as p | ||||
|                     WHERE | ||||
|                         h.id = %(handid)s | ||||
|                     and g.id = h.gametypeid | ||||
|                     and hp.handid = h.id | ||||
|                     and p.id = hp.playerid | ||||
|                     and s.id = p.siteid | ||||
|                     limit 1""", {'handid':handid}) | ||||
|         #TODO: siteid should be in hands table - we took the scenic route through players here. | ||||
|         res = c.fetchone() | ||||
|         gametype = {'category':res[1],'base':res[2],'type':res[3],'limitType':res[4],'hilo':res[5],'sb':res[6],'bb':res[7], 'currency':res[10]} | ||||
|         c = Configuration.Config() | ||||
|         h = HoldemOmahaHand(config = c, hhc = None, sitename=res[0], gametype = gametype, handText=None, builtFrom = "DB", handid=handid) | ||||
|         cards = map(Card.valueSuitFromCard, res[11:16] ) | ||||
|         if cards[0]: | ||||
|             h.setCommunityCards('FLOP', cards[0:3]) | ||||
|         if cards[3]: | ||||
|             h.setCommunityCards('TURN', [cards[3]]) | ||||
|         if cards[4]: | ||||
|             h.setCommunityCards('RIVER', [cards[4]]) | ||||
|         #[Card.valueSuitFromCard(x) for x in cards] | ||||
| 
 | ||||
|         # HandInfo : HID, TABLE | ||||
|         # BUTTON - why is this treated specially in Hand? | ||||
|         # answer: it is written out in hand histories | ||||
|         # still, I think we should record all the active seat positions in a seat_order array | ||||
|         c.execute("""SELECT | ||||
|                         h.sitehandno as hid, | ||||
|                         h.tablename as table, | ||||
|                         h.startTime as startTime | ||||
|                     FROM | ||||
|                         hands as h | ||||
|                     WHERE h.id = %(handid)s | ||||
|                     """, {'handid':handid}) | ||||
|         res = c.fetchone() | ||||
|         h.handid = res[0] | ||||
|         h.tablename = res[1] | ||||
|         h.startTime = res[2] # automatically a datetime | ||||
| 
 | ||||
|         # PlayerStacks | ||||
|         c.execute("""SELECT | ||||
|                         hp.seatno, | ||||
|                         round(hp.winnings / 100.0,2) as winnings, | ||||
|                         p.name, | ||||
|                         round(hp.startcash / 100.0,2) as chips, | ||||
|                         hp.card1,hp.card2, | ||||
|                         hp.position | ||||
|                     FROM | ||||
|                         handsplayers as hp, | ||||
|                         players as p | ||||
|                     WHERE | ||||
|                         hp.handid = %(handid)s | ||||
|                         and p.id = hp.playerid | ||||
|                 """, {'handid':handid}) | ||||
|         for (seat, winnings, name, chips, card1,card2, position) in c.fetchall(): | ||||
|             h.addPlayer(seat,name,chips) | ||||
|             if card1 and card2: | ||||
|                 h.addHoleCards(map(Card.valueSuitFromCard, (card1,card2)), name, dealt=True) | ||||
|             if winnings > 0: | ||||
|                 h.addCollectPot(name, winnings) | ||||
|             if position == 'B': | ||||
|                 h.buttonpos = seat | ||||
| 
 | ||||
| 
 | ||||
|         # actions | ||||
|         c.execute("""SELECT | ||||
|                         (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) | ||||
|         #hc.readShownCards(self) | ||||
|         h.totalPot() | ||||
|         h.rake = h.totalpot - h.totalcollected | ||||
| 
 | ||||
|         return h | ||||
| 
 | ||||
|     def addPlayer(self, seat, name, chips): | ||||
|         """\ | ||||
|  | @ -1540,146 +1674,4 @@ class Pot(object): | |||
| 
 | ||||
|         return ret + ''.join([ (" Side pot %s%.2f." % (self.sym, self.pots[x]) ) for x in xrange(1, len(self.pots)) ]) | ||||
| 
 | ||||
| def assemble(cnxn, handid): | ||||
|     c = cnxn.cursor() | ||||
| 
 | ||||
|     # We need at least sitename, gametype, handid | ||||
|     # for the Hand.__init__ | ||||
|     c.execute(""" | ||||
| select | ||||
|     s.name, | ||||
|     g.category, | ||||
|     g.base, | ||||
|     g.type, | ||||
|     g.limitType, | ||||
|     g.hilo, | ||||
|     round(g.smallBlind / 100.0,2), | ||||
|     round(g.bigBlind / 100.0,2), | ||||
|     round(g.smallBet / 100.0,2), | ||||
|     round(g.bigBet / 100.0,2), | ||||
|     s.currency, | ||||
|     h.boardcard1, | ||||
|     h.boardcard2, | ||||
|     h.boardcard3, | ||||
|     h.boardcard4, | ||||
|     h.boardcard5 | ||||
| from | ||||
|     hands as h, | ||||
|     sites as s, | ||||
|     gametypes as g, | ||||
|     handsplayers as hp, | ||||
|     players as p | ||||
| where | ||||
|     h.id = %(handid)s | ||||
| and g.id = h.gametypeid | ||||
| and hp.handid = h.id | ||||
| and p.id = hp.playerid | ||||
| and s.id = p.siteid | ||||
| limit 1""", {'handid':handid}) | ||||
|     #TODO: siteid should be in hands table - we took the scenic route through players here. | ||||
|     res = c.fetchone() | ||||
|     gametype = {'category':res[1],'base':res[2],'type':res[3],'limitType':res[4],'hilo':res[5],'sb':res[6],'bb':res[7], 'currency':res[10]} | ||||
|     c = Configuration.Config() | ||||
|     h = HoldemOmahaHand(config = c, hhc = None, sitename=res[0], gametype = gametype, handText=None, builtFrom = "DB", handid=handid) | ||||
|     cards = map(Card.valueSuitFromCard, res[11:16] ) | ||||
|     if cards[0]: | ||||
|         h.setCommunityCards('FLOP', cards[0:3]) | ||||
|     if cards[3]: | ||||
|         h.setCommunityCards('TURN', [cards[3]]) | ||||
|     if cards[4]: | ||||
|         h.setCommunityCards('RIVER', [cards[4]]) | ||||
|     #[Card.valueSuitFromCard(x) for x in cards] | ||||
| 
 | ||||
|     # HandInfo : HID, TABLE | ||||
|     # BUTTON - why is this treated specially in Hand? | ||||
|     # answer: it is written out in hand histories | ||||
|     # still, I think we should record all the active seat positions in a seat_order array | ||||
|     c.execute(""" | ||||
| SELECT | ||||
|     h.sitehandno as hid, | ||||
|     h.tablename as table, | ||||
|     h.startTime as startTime | ||||
| FROM | ||||
|     hands as h | ||||
| WHERE h.id = %(handid)s | ||||
| """, {'handid':handid}) | ||||
|     res = c.fetchone() | ||||
|     h.handid = res[0] | ||||
|     h.tablename = res[1] | ||||
|     h.startTime = res[2] # automatically a datetime | ||||
| 
 | ||||
|     # PlayerStacks | ||||
|     c.execute(""" | ||||
| SELECT | ||||
|     hp.seatno, | ||||
|     round(hp.winnings / 100.0,2) as winnings, | ||||
|     p.name, | ||||
|     round(hp.startcash / 100.0,2) as chips, | ||||
|     hp.card1,hp.card2, | ||||
|     hp.position | ||||
| FROM | ||||
|     handsplayers as hp, | ||||
|     players as p | ||||
| WHERE | ||||
|     hp.handid = %(handid)s | ||||
| and p.id = hp.playerid | ||||
| """, {'handid':handid}) | ||||
|     for (seat, winnings, name, chips, card1,card2, position) in c.fetchall(): | ||||
|         h.addPlayer(seat,name,chips) | ||||
|         if card1 and card2: | ||||
|             h.addHoleCards(map(Card.valueSuitFromCard, (card1,card2)), name, dealt=True) | ||||
|         if winnings > 0: | ||||
|             h.addCollectPot(name, winnings) | ||||
|         if position == 'B': | ||||
|             h.buttonpos = seat | ||||
| 
 | ||||
| 
 | ||||
|     # actions | ||||
|     c.execute(""" | ||||
| SELECT | ||||
|     (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) | ||||
|     #hc.readShownCards(self) | ||||
|     h.totalPot() | ||||
|     h.rake = h.totalpot - h.totalcollected | ||||
| 
 | ||||
| 
 | ||||
|     return h | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user