diff options
| author | Karan Jayachandra <karan.jayachandra@nxp.com> | 2024-10-16 16:20:13 +0200 |
|---|---|---|
| committer | Karan Jayachandra <karan.jayachandra@nxp.com> | 2024-10-16 16:20:13 +0200 |
| commit | b581661c993095c43ad19540999ab21957d0e013 (patch) | |
| tree | 3a8259e7d4b224142752975d5f95b40313a71378 | |
| parent | 0a4dac8168d726707a46b9aa60a257ecaba6a620 (diff) | |
Added guests funtionality
| -rw-r--r-- | app.py | 22 | ||||
| -rw-r--r-- | controller.py | 7 | ||||
| -rw-r--r-- | model.py | 30 | ||||
| -rw-r--r-- | templates/guests.j2 | 3 | ||||
| -rw-r--r-- | templates/index.j2 | 19 | ||||
| -rw-r--r-- | templates/macro.j2 | 3 | ||||
| -rw-r--r-- | templates/player.j2 | 4 | ||||
| -rw-r--r-- | templates/players.j2 | 2 |
8 files changed, 67 insertions, 23 deletions
@@ -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/<player_request>", 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} @@ -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 @@ +<div class="control" id="guests"> + <input class="input is-large is-responsive" type="text" style="text-align:center" value={{ guests }} disabled> +</div>
\ 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 @@ <p class="title">Games</p> <div class="columns"> <div class="column"> - <div class="select is-large"> + <div class="field has-addons"> + <div class="control"> + <button class="button is-large is-responsive is-dark" style="text-align:center" hx-post="/decrement" hx-swap="outerHTML" hx-trigger="click" hx-target="#guests">-</button> + </div> + <div hx-get="/guests" hx-swap="outerHTML" hx-trigger="revealed"></div> + <div class="control"> + <button class="button is-large is-responsive is-dark" style="text-align:center" hx-post="/increment" hx-swap="outerHTML" hx-trigger="click" hx-target="#guests">+</button> + </div> + </div> + </div> + <div class="column"> + <div class="select is-large is-responsive"> <select name="type"> <option>10 Levels</option> <option>8 Levels</option> @@ -41,14 +52,14 @@ </div> </div> <div class="column"> - <button class="button is-dark is-large" hx-post="/propose" hx-trigger="click" hx-target="#games" hx-include="[name='type']">Propose</button> + <button class="button is-dark is-large is-responsive" hx-post="/propose" hx-trigger="click" hx-target="#games" hx-include="[name='type']">Propose</button> </div> <div class="column"></div> <div class="column"> - <button class="button is-dark is-large" hx-post="/confirm" hx-trigger="click" hx-target="#games">Confirm</button> + <button class="button is-dark is-large is-responsive" hx-post="/confirm" hx-trigger="click" hx-target="#games">Confirm</button> </div> <div class="column"> - <button class="button is-dark is-large" hx-post="/clear" hx-trigger="click" hx-target="#games">Clear</button> + <button class="button is-dark is-large is-responsive" hx-post="/clear" hx-trigger="click" hx-target="#games">Clear</button> </div> </div> <div hx-post="/clear" hx-swap="outerHTML" hx-trigger="revealed"></div> diff --git a/templates/macro.j2 b/templates/macro.j2 deleted file mode 100644 index e0089bc..0000000 --- a/templates/macro.j2 +++ /dev/null @@ -1,3 +0,0 @@ -{% macro player_button(player) %} -<button class={% if player.status %} "active" {% else %} "dormant" {% endif %} hx-post="{{ "/player-toggle/" ~ player.name}}" hx-trigger="click" hx-swap="outerHTML">{{ player.name }}</button> -{%- endmacro %}
\ No newline at end of file diff --git a/templates/player.j2 b/templates/player.j2 index d0f42c6..7e80285 100644 --- a/templates/player.j2 +++ b/templates/player.j2 @@ -1,5 +1,5 @@ -<button class={% if status %} "button is-success is-large" {% else %} "button is-danger is-large" {% endif %} - hx-post="{{ "/player-toggle/" ~ id}}" +<button class="button is-medium is-responsive {% if status %} is-success {% else %} is-danger {% endif %}" + hx-post="{{ "/player-toggle/" ~ id}}" hx-trigger="click" hx-swap="outerHTML"> {{ name }} diff --git a/templates/players.j2 b/templates/players.j2 index 550ad68..080c03a 100644 --- a/templates/players.j2 +++ b/templates/players.j2 @@ -2,7 +2,7 @@ <div class="grid"> {% for id, player in players.items() %} <div class="cell"> - <button class={% if player.status %} "button is-success is-large" {% else %} "button is-danger is-large" {% endif %} hx-post="{{ "/player-toggle/" ~ id}}" hx-trigger="click" hx-swap="outerHTML">{{ player.name }}</button> + <button class="button is-medium is-responsive {% if player.status %} is-success {% else %} is-danger {% endif %}" hx-post="{{ "/player-toggle/" ~ id}}" hx-trigger="click" hx-swap="outerHTML">{{ player.name }}</button> </div> {% endfor %} </div>
\ No newline at end of file |
