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):
|
def select(self, handId):
|
||||||
""" Function to create Hand object from database """
|
""" 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):
|
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)) ])
|
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