1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88 | import logging
from pylons import request, response, session, tmpl_context as c
from pylons.controllers.util import abort, redirect_to
from myapp.lib.base import BaseController, render
#from myapp import model
from pokereval import PokerEval
import json
from sys import stderr
import string
from pprint import pprint
log = logging.getLogger(__name__)
gameparams_table = [
["holdem", 2, 2, 5, 0, 1, "Holdem Hi"],
["holdem8", 2, 2, 5, 1, 1, "Holdem Hi/Low 8-or-better"],
["omaha", 4, 4, 5, 0, 1, "Omaha Hi"],
["omaha8", 4, 4, 5, 1, 1, "Omaha Hi/Low 8-or-better"],
["7stud", 3, 7, 0, 0, 1, "7-card Stud Hi"],
["7stud8", 3, 7, 0, 1, 1, "7-card Stud Hi/Low 8-or-better"],
["7studnsq", 3, 7, 0, 1, 1, "7-card Stud Hi/Low no qualifier"],
["razz", 3, 7, 0, 1, 0, "Razz (7-card Stud A-5 Low)"],
["5draw", 0, 5, 0, 0, 1, "5-card Draw Hi with joker"],
["5draw8", 0, 5, 0, 1, 1, "5-card Draw Hi/Low 8-or-better with joker"],
["5drawnsq", 0, 5, 0, 1, 1, "5-card Draw Hi/Low no qualifier with joker"],
["lowball", 0, 5, 0, 1, 0, "5-card Draw A-5 Lowball with joker"],
["lowball27", 0, 5, 0, 1, 0, "5-card Draw 2-7 Lowball"]]
class GameParam:
def __init__(self, game, minpocket, maxpocket, maxboard, haslopot, hashipot, name):
self.game = game
self.minpocket = minpocket
self.maxpocket = maxpocket
self.maxboard = maxboard
self.haslopot = haslopot
self.hashipot = hashipot
self.name = name
gameparams = {}
max_iterations = 750000
for args in gameparams_table:
param = GameParam(*args)
gameparams[param.game] = param
def apply_game_params(game, pockets, board, dead, iterations):
pockets = [pocket[:gameparams[game].maxpocket] for pocket in pockets]
pockets = [pocket + ["__"] * (gameparams[game].maxpocket - len(pocket))
for pocket in pockets]
board += ["__"] * (gameparams[game].maxboard - len(board))
if iterations and iterations > max_iterations:
iterations = max_iterations
return {"game":game, "pockets":pockets, "board":board, "dead":dead, "iterations":iterations}
class PokerController(BaseController):
def icm(self):
return render('/sandbox/poker/icm.html')
def hand_evaluator(self):
return render('/sandbox/poker/hand_evaluator.html')
def hand_evaluator_webservice(self):
input = request.GET
defaultParams = {"game":"holdem","pockets":[],"board":[],"dead":[],"iterations":10000}
kwargs = defaultParams
jsonp = None
for key in input:
value = str(input[key])
if key == "jsoncallback":
jsonp = value
elif key in ["game", "pockets", "board", "dead", "iterations"]:
kwargs[key] = json.read(value)
print json.read(value)
cards = []
for pocket in kwargs["pockets"]:
print pocket
cards.extend(pocket)
cards.extend(kwargs["board"])
cards.extend(kwargs["dead"])
duplicate = set(filter(lambda card: (card != "__" and cards.count(card) > 1), cards))
if len(duplicate) > 0:
poker_eval_result = {"error": "duplicate cards: %s" % string.join(duplicate)}
else:
params = apply_game_params(**kwargs)
try:
poker_eval_result = PokerEval().poker_eval(**params)
except Exception, e:
poker_eval_result = {"error": str(e)}
if jsonp:
result = "%s(%s)" % (jsonp, json.write(poker_eval_result))
else:
result = json.write(poker_eval_result)
return result
|