Pylons Poker Controller [Python]
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 |

Comments