summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app.py22
-rw-r--r--controller.py7
-rw-r--r--model.py30
-rw-r--r--templates/guests.j23
-rw-r--r--templates/index.j219
-rw-r--r--templates/macro.j23
-rw-r--r--templates/player.j24
-rw-r--r--templates/players.j22
8 files changed, 67 insertions, 23 deletions
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/<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}
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 @@
+<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