From 6d8e46354f6ed8d22fbbbbb1258781182effe529 Mon Sep 17 00:00:00 2001 From: Karan Jayachandra Date: Sat, 9 Nov 2024 14:17:20 +0100 Subject: Seperated the routes to a different file --- src/match_up/routes.py | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 src/match_up/routes.py (limited to 'src/match_up/routes.py') diff --git a/src/match_up/routes.py b/src/match_up/routes.py new file mode 100644 index 0000000..528fa4e --- /dev/null +++ b/src/match_up/routes.py @@ -0,0 +1,82 @@ +from match_up import app, re, rg +from flask import render_template, request, url_for + +@app.route("/", methods=["GET"]) +def home(): + template = re.get_template("index.j2").render(url_for=url_for) + return template + + +@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("/control", methods=["GET"]) +def get_controls(): + return render_template("controls.j2", courts=rg.courts.get_courts()) + + +@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("/decrement", methods=["POST"]) +def increment_guests(): + t = re.from_string('{% from "macros.j2" import guests %}{{guests(count)}}') + return render_template(t, count=rg.players.decrement_guests()) + + +@app.route("/increment", methods=["POST"]) +def decrement_guests(): + t = re.from_string('{% from "macros.j2" import guests %}{{guests(count)}}') + return render_template(t, count=rg.players.increment_guests()) + + +@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/", methods=["POST"]) +def toggle_player(player_request): + 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("/players", methods=["GET"]) +def get_list_of_players(): + template = re.get_template("players.j2").render(players=rg.players.get_players(), url_for=url_for) + return template + + +@app.route("/court-toggle/", methods=["POST"]) +def toggle_court(court_number): + 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("/courts", methods=["GET"]) +def get_list_of_courts(): + return render_template("courts.j2", courts=rg.courts.get_courts()) \ No newline at end of file -- cgit v1.3.1 From bc587d676dca709c8ff8a21470a68938359a7ec8 Mon Sep 17 00:00:00 2001 From: Karan Jayachandra Date: Sat, 9 Nov 2024 14:34:58 +0100 Subject: Moved some of the imports to the routes file to keep the package clean --- src/match_up/__init__.py | 5 ++--- src/match_up/routes.py | 5 ++++- 2 files changed, 6 insertions(+), 4 deletions(-) (limited to 'src/match_up/routes.py') diff --git a/src/match_up/__init__.py b/src/match_up/__init__.py index e6b0ad6..1f625a7 100644 --- a/src/match_up/__init__.py +++ b/src/match_up/__init__.py @@ -1,9 +1,9 @@ +from flask import Flask from dotenv import load_dotenv from importlib.resources import path from match_up.controller import RoundGenerator from match_up.model import CourtList, PlayerList -from jinja2 import Environment, PackageLoader -from flask import Flask + load_dotenv() with path("match_up", "static") as p: @@ -12,7 +12,6 @@ with path("match_up", "templates") as p: template_folder = p app = Flask("Match Up! Backend", static_folder=static_folder, template_folder=template_folder) rg = RoundGenerator(courts=CourtList(), players=PlayerList()) -re = Environment(loader=PackageLoader("match_up")) from match_up import routes diff --git a/src/match_up/routes.py b/src/match_up/routes.py index 528fa4e..524d50b 100644 --- a/src/match_up/routes.py +++ b/src/match_up/routes.py @@ -1,6 +1,9 @@ -from match_up import app, re, rg +from match_up import app, rg +from jinja2 import Environment, PackageLoader from flask import render_template, request, url_for +re = Environment(loader=PackageLoader("match_up")) + @app.route("/", methods=["GET"]) def home(): template = re.get_template("index.j2").render(url_for=url_for) -- cgit v1.3.1 From aa73a7618075b54940d32b7b1e0e751b301bee4d Mon Sep 17 00:00:00 2001 From: Karan Jayachandra Date: Sat, 9 Nov 2024 18:52:45 +0100 Subject: Formatted the package with black --- src/match_up/__init__.py | 15 +++++++++++---- src/match_up/controller.py | 9 ++++++++- src/match_up/model.py | 19 +++++++++++++------ src/match_up/routes.py | 11 ++++++----- 4 files changed, 38 insertions(+), 16 deletions(-) (limited to 'src/match_up/routes.py') diff --git a/src/match_up/__init__.py b/src/match_up/__init__.py index 3967cb9..996bf9a 100644 --- a/src/match_up/__init__.py +++ b/src/match_up/__init__.py @@ -2,25 +2,32 @@ from flask import Flask from dotenv import load_dotenv from argparse import ArgumentParser from importlib.resources import path +from match_up.utilities import Timer from match_up.controller import RoundGenerator from match_up.model import CourtList, PlayerList -from match_up.utilities import Timer load_dotenv() with path("match_up", "static") as p: static_folder = p with path("match_up", "templates") as p: template_folder = p -app = Flask("Match Up! Backend", static_folder=static_folder, template_folder=template_folder) +app = Flask( + "Match Up! Backend", static_folder=static_folder, template_folder=template_folder +) rg = RoundGenerator() from match_up import routes + def main(): parser = ArgumentParser() - parser.add_argument("-t", "--timer", help="Total mins per round", type=float, default=12) - parser.add_argument("-c", "--courts", help="Total number of courts", type=int, default=12) + parser.add_argument( + "-t", "--timer", help="Total mins per round", type=float, default=12 + ) + parser.add_argument( + "-c", "--courts", help="Total number of courts", type=int, default=12 + ) args = parser.parse_args() global rg rg.courts = CourtList(total=args.courts) diff --git a/src/match_up/controller.py b/src/match_up/controller.py index 6188b3e..a21fced 100644 --- a/src/match_up/controller.py +++ b/src/match_up/controller.py @@ -2,7 +2,14 @@ from typing import Tuple from operator import attrgetter from dataclasses import dataclass, field from match_up.utilities import sample_list, Timer -from match_up.model import Team, Game, PlayerList, CourtList, MAX_LEVEL, PLAYER_PER_COURT +from match_up.model import ( + Team, + Game, + PlayerList, + CourtList, + MAX_LEVEL, + PLAYER_PER_COURT, +) def _create_placeholders(courts: dict, name: str) -> list[Game]: diff --git a/src/match_up/model.py b/src/match_up/model.py index 592d60f..5d6c0f5 100644 --- a/src/match_up/model.py +++ b/src/match_up/model.py @@ -30,6 +30,7 @@ class Game: team1: Team team2: Team + @dataclass class CourtList: total: int = DEFAULT_COURTS @@ -53,21 +54,27 @@ class CourtList: inactive_courts = {k: v for k, v in self.courts.items() if not v} return active_courts, inactive_courts + def _load_csv_players(file_name: str) -> dict: with open(file_name, newline="") as file: pointer = reader(file) next(pointer, None) - players = { - id: Player(row[0], int(row[1])) for id, row in enumerate(pointer) - } + players = {id: Player(row[0], int(row[1])) for id, row in enumerate(pointer)} return players + def _generate_random_players(player_count: int = 80) -> list[Player]: - players = {i: Player(name=get_full_name(), - skill=randint(MIN_LEVEL, MAX_LEVEL), - status=bool(getrandbits(1))) for i in range(player_count)} + players = { + i: Player( + name=get_full_name(), + skill=randint(MIN_LEVEL, MAX_LEVEL), + status=bool(getrandbits(1)), + ) + for i in range(player_count) + } return players + @dataclass class PlayerList: location: str = None diff --git a/src/match_up/routes.py b/src/match_up/routes.py index 524d50b..319b111 100644 --- a/src/match_up/routes.py +++ b/src/match_up/routes.py @@ -4,10 +4,10 @@ from flask import render_template, request, url_for re = Environment(loader=PackageLoader("match_up")) + @app.route("/", methods=["GET"]) def home(): - template = re.get_template("index.j2").render(url_for=url_for) - return template + return re.get_template("index.j2").render(url_for=url_for) @app.route("/time", methods=["GET"]) @@ -68,8 +68,9 @@ def toggle_player(player_request): @app.route("/players", methods=["GET"]) def get_list_of_players(): - template = re.get_template("players.j2").render(players=rg.players.get_players(), url_for=url_for) - return template + return re.get_template("players.j2").render( + players=rg.players.get_players(), url_for=url_for + ) @app.route("/court-toggle/", methods=["POST"]) @@ -82,4 +83,4 @@ def toggle_court(court_number): @app.route("/courts", methods=["GET"]) def get_list_of_courts(): - return render_template("courts.j2", courts=rg.courts.get_courts()) \ No newline at end of file + return render_template("courts.j2", courts=rg.courts.get_courts()) -- cgit v1.3.1