diff options
Diffstat (limited to 'app.py')
| -rw-r--r-- | app.py | 102 |
1 files changed, 55 insertions, 47 deletions
@@ -1,20 +1,18 @@ from os import getenv from dotenv import load_dotenv -from flask import Flask, abort, render_template -from model import CourtList, PlayerList, GameList - -load_dotenv() - - -PLAYER_LIST = PlayerList(location="test_data_large.csv") -COURT_LIST = CourtList(12) -GAME_GENERATOR = GameList() -GAME_GENERATOR.clear(COURT_LIST) +from controller import RoundGenerator +from model import CourtList, PlayerList +from jinja2 import FileSystemLoader, Environment +from flask import Flask, render_template, request +load_dotenv() app = Flask("Match Up! Backend") -env_config = getenv("PROD_APP_SETTINGS", "config.DevelopmentConfig") -app.config.from_object(env_config) +app.config.from_object(getenv("APP_SETTINGS")) +rg = RoundGenerator( + courts=CourtList(int(getenv("COURTS"))), players=PlayerList(getenv("DATABASE")) +) +re = Environment(loader=FileSystemLoader("templates")) @app.route("/", methods=["GET"]) @@ -22,58 +20,68 @@ def home(): return render_template("index.j2") -@app.route("/random-games", methods=["POST"]) -def get_random_games(): - print("Creating new games...") - GAME_GENERATOR.create_random_games(COURT_LIST, PLAYER_LIST) - return render_template("games.j2", games=GAME_GENERATOR.games) +@app.route("/time", methods=["GET"]) +def get_time(): + mins, secs = rg.timer.get() + t = re.from_string('{% from "macros.j2" import timer %}{{timer(mins, secs)}}') + return render_template(t, mins=mins, secs=secs) -@app.route("/skilled-games", methods=["POST"]) -def get_skilled_games(): - print("Creating new games...") - GAME_GENERATOR.create_skilled_games(COURT_LIST, PLAYER_LIST) - return render_template("games.j2", games=GAME_GENERATOR.games) +@app.route("/guests", methods=["GET"]) +def get_guests(): + t = re.from_string('{% from "macros.j2" import guests %}{{guests(count)}}') + return render_template(t, count=rg.players.guests) -@app.route("/clear-games", methods=["POST"]) -def clear_games(): - print("Clearing games...") - GAME_GENERATOR.clear(COURT_LIST) - return render_template("games.j2", games=GAME_GENERATOR.games) +@app.route("/decrement", methods=["POST"]) +def increment_guests(): + return render_template("guests.j2", guests=rg.players.decrement_guests()) + +@app.route("/increment", methods=["POST"]) +def decrement_guests(): + return render_template("guests.j2", guests=rg.players.increment_guests()) -@app.route("/game-list", methods=["GET"]) -def get_list_of_games(): - return render_template("games.j2", games=GAME_GENERATOR.games) + +@app.route("/propose", methods=["POST"]) +def get_random_games(): + levels = int(request.form["type"].split()[0]) + return render_template("games.j2", games=rg.propose(levels), title="Proposal") + + +@app.route("/confirm", methods=["POST"]) +def confirm_games(): + return render_template("games.j2", games=rg.confirm(), title=f"Round: {rg.round}") + + +@app.route("/clear", methods=["POST"]) +def clear_games(): + return render_template("games.j2", games=rg.clear(), title=f"Round: {rg.round}") @app.route("/player-toggle/<player_request>", methods=["POST"]) def toggle_player(player_request): - selection = PLAYER_LIST.get_player(player_request) - if len(selection) != 1: - abort(404) - PLAYER_LIST.toggle_player(player_request) - selection = PLAYER_LIST.get_player(player_request) - return render_template("player.j2", player=selection[0]) + id = int(player_request) + status, name = rg.players.toggle_player_status(id) + t = re.from_string( + '{% from "macros.j2" import player %}{{player(id, status, name)}}' + ) + return render_template(t, id=id, status=status, name=name) -@app.route("/player-list", methods=["GET"]) +@app.route("/players", methods=["GET"]) def get_list_of_players(): - return render_template("players.j2", players=PLAYER_LIST.players) + return render_template("players.j2", players=rg.players.get_players()) @app.route("/court-toggle/<court_number>", methods=["POST"]) def toggle_court(court_number): - court_number = int(court_number) - selection = COURT_LIST.get_court(court_number) - if len(selection) != 1: - abort(404, f"Multiple courts requested: {len(selection)}") - COURT_LIST.toggle_court(court_number) - selection = COURT_LIST.get_court(court_number) - return render_template("court.j2", court=selection[0]) + id = int(court_number) + status = rg.courts.toggle_court_status(id) + t = re.from_string('{% from "macros.j2" import court %}{{ court(id, status) }}') + return render_template(t, id=id, status=status) -@app.route("/court-list", methods=["GET"]) +@app.route("/courts", methods=["GET"]) def get_list_of_courts(): - return render_template("courts.j2", courts=COURT_LIST.courts) + return render_template("courts.j2", courts=rg.courts.get_courts()) |
