From b581661c993095c43ad19540999ab21957d0e013 Mon Sep 17 00:00:00 2001 From: Karan Jayachandra Date: Wed, 16 Oct 2024 16:20:13 +0200 Subject: Added guests funtionality --- app.py | 22 ++++++++++++++++++---- controller.py | 7 +++++-- model.py | 30 +++++++++++++++++++++++------- templates/guests.j2 | 3 +++ templates/index.j2 | 19 +++++++++++++++---- templates/macro.j2 | 3 --- templates/player.j2 | 4 ++-- templates/players.j2 | 2 +- 8 files changed, 67 insertions(+), 23 deletions(-) create mode 100644 templates/guests.j2 delete mode 100644 templates/macro.j2 diff --git a/app.py b/app.py index c6f7af1..a37be7c 100644 --- a/app.py +++ b/app.py @@ -15,21 +15,35 @@ def home(): return render_template("index.j2") +@app.route("/guests", methods=["GET"]) +def get_guests(): + return render_template("guests.j2", guests=rg.players.guests) + + +@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("/propose", methods=["POST"]) def get_random_games(): levels = int(request.form["type"].split()[0]) - return render_template("games.j2", title="Proposal", games=rg.propose(levels)) + return render_template("games.j2", games=rg.propose(levels), title="Proposal") @app.route("/confirm", methods=["POST"]) def confirm_games(): - games = rg.confirm() - return render_template("games.j2", title=f"Round: {rg.round}", games=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", title=f"Round: {rg.round}", games=rg.clear()) + return render_template("games.j2", games=rg.clear(), title=f"Round: {rg.round}") @app.route("/player-toggle/", methods=["POST"]) diff --git a/controller.py b/controller.py index 751586e..c153001 100644 --- a/controller.py +++ b/controller.py @@ -60,9 +60,12 @@ class RoundGenerator: return used_courts, unused_courts def _select_players(self, count: int) -> dict: - active_players = self.players.get_active_players() + active_players = self.players.get_potential_players() identifiers = [*active_players] - play_count = [self.history[player_id] for player_id in active_players] + play_count = [ + self.history[player_id] if player_id < self.players.guest_id_start else 10 + for player_id in active_players + ] ids = sample_list(identifiers, play_count, count) return {player_id: active_players[player_id] for player_id in ids} diff --git a/model.py b/model.py index ba5cb9b..f768d0f 100644 --- a/model.py +++ b/model.py @@ -1,7 +1,6 @@ from math import floor from csv import reader from typing import Tuple -from pathlib import Path from dataclasses import dataclass MIN_LEVEL = 1 @@ -12,7 +11,7 @@ PLAYER_PER_COURT = 4 @dataclass class Player: name: str - skill: int = 0 + skill: int = 1 status: bool = False @@ -56,6 +55,7 @@ class CourtList: @dataclass class PlayerList: location: str + guests: int = 0 def __post_init__(self) -> None: with open("data/" + self.location, newline="") as file: @@ -64,8 +64,19 @@ class PlayerList: players = { id: Player(row[0], int(row[1])) for id, row in enumerate(pointer) } + self.guest_id_start = len(players) + 1 self.players = players + def increment_guests(self): + self.guests = self.guests + 1 + return self.guests + + def decrement_guests(self): + if self.guests == 0: + return 0 + self.guests = self.guests - 1 + return self.guests + def get_player_status(self, player_number: int) -> bool: return self.players[player_number].status @@ -78,10 +89,15 @@ class PlayerList: return self.players def get_possible_game_count(self) -> int: - active_player_count = len(self.get_active_players()) - possible_games = floor(active_player_count / PLAYER_PER_COURT) + total_players = len(self.get_potential_players()) + possible_games = floor(total_players / PLAYER_PER_COURT) return possible_games - def get_active_players(self) -> Tuple[dict, dict]: - active_players = {k: v for k, v in self.players.items() if v.status} - return active_players + def get_potential_players(self) -> dict: + players = {k: v for k, v in self.players.items() if v.status} + guests = { + self.guest_id_start + k: Player(name=f"Guest {k}") + for k in range(1, self.guests + 1) + } + players.update(guests) + return players diff --git a/templates/guests.j2 b/templates/guests.j2 new file mode 100644 index 0000000..b5d251f --- /dev/null +++ b/templates/guests.j2 @@ -0,0 +1,3 @@ +
+ +
\ No newline at end of file diff --git a/templates/index.j2 b/templates/index.j2 index 40d0eb1..42fc43e 100644 --- a/templates/index.j2 +++ b/templates/index.j2 @@ -29,7 +29,18 @@

Games

-
+
+
+ +
+
+
+ +
+
+
+
+