From ff29a3cd4ecc12a55c9cfe519a799cc68c1dc086 Mon Sep 17 00:00:00 2001 From: Michael Pilosov Date: Sun, 5 Apr 2026 22:54:20 -0600 Subject: [PATCH] Add CLI args for host, port, workers, and reload --- src/chess_pressure/app.py | 26 +++++++++++++++++++++++++- src/chess_pressure/engine.py | 36 +++++++++++++++++++++--------------- src/chess_pressure/games.py | 5 ++++- 3 files changed, 50 insertions(+), 17 deletions(-) diff --git a/src/chess_pressure/app.py b/src/chess_pressure/app.py index e25ad47..d2bce89 100644 --- a/src/chess_pressure/app.py +++ b/src/chess_pressure/app.py @@ -20,6 +20,7 @@ app = FastAPI(title="Chess Pressure", docs_url=None, redoc_url=None) # --- Models --- + class PGNUpload(BaseModel): pgn: str @@ -31,6 +32,7 @@ class MoveRequest(BaseModel): # --- API --- + @app.get("/api/games") def list_games(): return get_game_list() @@ -55,6 +57,7 @@ def parse_uploaded_pgn(body: PGNUpload): @app.get("/api/legal") def legal_moves(fen: str): import chess + board = chess.Board(fen) return [m.uci() for m in board.legal_moves] @@ -81,7 +84,28 @@ def index(): def main(): - uvicorn.run("chess_pressure.app:app", host="0.0.0.0", port=8888, workers=2) + import argparse + + parser = argparse.ArgumentParser(description="Chess Pressure server") + parser.add_argument( + "--host", default="0.0.0.0", help="Bind address (default: 0.0.0.0)" + ) + parser.add_argument( + "--port", "-p", type=int, default=8888, help="Port (default: 8888)" + ) + parser.add_argument( + "--workers", "-w", type=int, default=2, help="Worker processes (default: 2)" + ) + parser.add_argument("--reload", action="store_true", help="Enable auto-reload") + args = parser.parse_args() + + uvicorn.run( + "chess_pressure.app:app", + host=args.host, + port=args.port, + workers=args.workers, + reload=args.reload, + ) if __name__ == "__main__": diff --git a/src/chess_pressure/engine.py b/src/chess_pressure/engine.py index ef83f27..28aa07e 100644 --- a/src/chess_pressure/engine.py +++ b/src/chess_pressure/engine.py @@ -64,26 +64,32 @@ def parse_pgn(pgn_text: str) -> dict: frames = [] # Frame 0: starting position - frames.append({ - "board": board_to_dict(board), - "pressure": compute_pressure(board, weighted=False), - "pressure_weighted": compute_pressure(board, weighted=True), - }) + frames.append( + { + "board": board_to_dict(board), + "pressure": compute_pressure(board, weighted=False), + "pressure_weighted": compute_pressure(board, weighted=True), + } + ) for node in game.mainline(): move = node.move san = board.san(move) board.push(move) - moves.append({ - "san": san, - "uci": move.uci(), - "ply": board.ply(), - }) - frames.append({ - "board": board_to_dict(board), - "pressure": compute_pressure(board, weighted=False), - "pressure_weighted": compute_pressure(board, weighted=True), - }) + moves.append( + { + "san": san, + "uci": move.uci(), + "ply": board.ply(), + } + ) + frames.append( + { + "board": board_to_dict(board), + "pressure": compute_pressure(board, weighted=False), + "pressure_weighted": compute_pressure(board, weighted=True), + } + ) return { "headers": headers, diff --git a/src/chess_pressure/games.py b/src/chess_pressure/games.py index ff092b2..5095b63 100644 --- a/src/chess_pressure/games.py +++ b/src/chess_pressure/games.py @@ -198,7 +198,10 @@ Ke7 29.Ra1 Nc6 0-1""", def get_game_list() -> list[dict]: """Return list of available games (id, name, white, black).""" - return [{"id": g["id"], "name": g["name"], "white": g["white"], "black": g["black"]} for g in GAMES] + return [ + {"id": g["id"], "name": g["name"], "white": g["white"], "black": g["black"]} + for g in GAMES + ] def get_game_pgn(game_id: str) -> str | None: