feat: set blind bet by run hands
This commit is contained in:
+35
-2
@@ -43,14 +43,28 @@ class PokerRequestHandler(BaseHTTPRequestHandler):
|
||||
body = self._read_json()
|
||||
count = int(body.get("count", 1))
|
||||
until_one_left = bool(body.get("until_one_left", False))
|
||||
summaries = MANAGER.run_hands(path[1], count, until_one_left)
|
||||
small_blind, big_blind = self._extract_blinds(body)
|
||||
summaries = MANAGER.run_hands(
|
||||
path[1],
|
||||
count,
|
||||
until_one_left,
|
||||
small_blind=small_blind,
|
||||
big_blind=big_blind,
|
||||
)
|
||||
self._json({"hands": summaries, "game": MANAGER.get_game(path[1]).to_dict()})
|
||||
return
|
||||
if len(path) == 4 and path[0] == "games" and path[2] == "hands" and path[3] == "run":
|
||||
body = self._read_json()
|
||||
count = int(body.get("count", 1))
|
||||
until_one_left = bool(body.get("until_one_left", False))
|
||||
summaries = MANAGER.run_hands(path[1], count, until_one_left)
|
||||
small_blind, big_blind = self._extract_blinds(body)
|
||||
summaries = MANAGER.run_hands(
|
||||
path[1],
|
||||
count,
|
||||
until_one_left,
|
||||
small_blind=small_blind,
|
||||
big_blind=big_blind,
|
||||
)
|
||||
self._json({"hands": summaries, "game": MANAGER.get_game(path[1]).to_dict()})
|
||||
return
|
||||
self._json({"error": "not found"}, HTTPStatus.NOT_FOUND)
|
||||
@@ -78,6 +92,25 @@ class PokerRequestHandler(BaseHTTPRequestHandler):
|
||||
raise ValueError("request body must be a JSON object")
|
||||
return payload
|
||||
|
||||
@staticmethod
|
||||
def _extract_blinds(body: dict[str, Any]) -> tuple[int | None, int | None]:
|
||||
"""Parse optional blind overrides from a /hands POST body.
|
||||
|
||||
Callers may omit both keys (keep current level), or supply both to
|
||||
raise the blinds for the upcoming batch. Providing only one is
|
||||
treated as a client error and surfaced via ``ValueError`` so the
|
||||
handler can reply with 400.
|
||||
"""
|
||||
raw_small = body.get("small_blind")
|
||||
raw_big = body.get("big_blind")
|
||||
if raw_small is None and raw_big is None:
|
||||
return None, None
|
||||
if raw_small is None or raw_big is None:
|
||||
raise ValueError(
|
||||
"small_blind and big_blind must be provided together"
|
||||
)
|
||||
return int(raw_small), int(raw_big)
|
||||
|
||||
def _json(self, payload: dict[str, Any], status: HTTPStatus = HTTPStatus.OK) -> None:
|
||||
body = json.dumps(payload, ensure_ascii=True).encode("utf-8")
|
||||
self.send_response(status)
|
||||
|
||||
Reference in New Issue
Block a user