created by tomfmason at 2008-12-09 16:08:10
This is a simple adaptation of the poker-eval-webservice for a pylons controller
 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