aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/match_up/model.py35
-rw-r--r--src/match_up/routes.py72
-rw-r--r--src/match_up/templates/macros.j222
-rw-r--r--src/match_up/templates/players.j268
-rw-r--r--src/match_up/utilities.py1
5 files changed, 78 insertions, 120 deletions
diff --git a/src/match_up/model.py b/src/match_up/model.py
index b1e77f5..9b2dce7 100644
--- a/src/match_up/model.py
+++ b/src/match_up/model.py
@@ -10,7 +10,6 @@ from names import get_first_name, get_last_name
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import create_engine, Column, String, Integer, not_
-
MIN_LEVEL = 1
MAX_LEVEL = 10
DEFAULT_COURTS = 12
@@ -104,8 +103,21 @@ class CourtList:
return active_courts, inactive_courts
+def _textualize_guest(level, value) -> str:
+ match level:
+ case 1:
+ text = "Beginners"
+ case 3:
+ text = "Novices"
+ case 5:
+ text = "Intermediates"
+ if value == 1:
+ text = text[:-1]
+ return f"{value} {text}"
+
+
class PlayerList:
- guests: dict = {"low": 0, "mid": 0, "high": 0}
+ guests: dict = {1: 0, 3: 0, 5: 0}
def __init__(self, csv_location: str = None) -> None:
self._init_database()
@@ -122,15 +134,15 @@ class PlayerList:
Base.metadata.create_all(bind=engine)
self.session = sessionmaker(bind=engine)()
- def increment_guests(self, level: str):
+ def increment_guests(self, level: int):
self.guests[level] = self.guests[level] + 1
- return self.guests[level]
+ return _textualize_guest(level, self.guests[level])
- def decrement_guests(self, level: str):
+ def decrement_guests(self, level: int):
if self.guests[level] == 0:
return 0
self.guests[level] = self.guests[level] - 1
- return self.guests[level]
+ return _textualize_guest(level, self.guests[level])
def get_player_status(self, id: int) -> bool:
return self.session.query(Player).filter(Player.id == id).first().status
@@ -171,7 +183,7 @@ class PlayerList:
status=True,
count=rounds,
)
- for i in range(1, self.guests["low"] + 1)
+ for i in range(1, self.guests[1] + 1)
]
mid_guests = [
Player(
@@ -182,7 +194,7 @@ class PlayerList:
status=True,
count=rounds,
)
- for i in range(1, self.guests["mid"] + 1)
+ for i in range(1, self.guests[3] + 1)
]
high_guests = [
Player(
@@ -193,10 +205,15 @@ class PlayerList:
status=True,
count=rounds,
)
- for i in range(1, self.guests["high"] + 1)
+ for i in range(1, self.guests[5] + 1)
]
return active_players + low_guests + mid_guests + high_guests
+ def get_guests(self):
+ return {
+ level: _textualize_guest(level, self.guests[level]) for level in self.guests
+ }
+
def increment_game_count(self, player_ids: list[int]):
players = self.session.query(Player).filter(Player.id.in_(player_ids))
for player in players:
diff --git a/src/match_up/routes.py b/src/match_up/routes.py
index 57e9812..14b36d2 100644
--- a/src/match_up/routes.py
+++ b/src/match_up/routes.py
@@ -15,58 +15,25 @@ def get_controls():
return render_template("controls.j2", courts=rg.courts.get_courts())
-@app.route("/low_guests", methods=["GET"])
-def get_low_guests():
- t = re.from_string('{% from "macros.j2" import guests %}{{guests(count, level)}}')
- return render_template(t, count=rg.players.guests["low"], level="low")
-
-
-@app.route("/mid_guests", methods=["GET"])
-def get_mid_guests():
- t = re.from_string('{% from "macros.j2" import guests %}{{guests(count, level)}}')
- return render_template(t, count=rg.players.guests["mid"], level="mid")
-
-
-@app.route("/high_guests", methods=["GET"])
-def get_high_guests():
- t = re.from_string('{% from "macros.j2" import guests %}{{guests(count, level)}}')
- return render_template(t, count=rg.players.guests["high"], level="high")
-
-
-@app.route("/increment_low_guest", methods=["POST"])
-def increment_low_guests():
- t = re.from_string('{% from "macros.j2" import guests %}{{guests(count)}}')
- return render_template(t, count=rg.players.increment_guests("low"))
-
-
-@app.route("/decrement_low_guest", methods=["POST"])
-def decrement_low_guests():
- t = re.from_string('{% from "macros.j2" import guests %}{{guests(count)}}')
- return render_template(t, count=rg.players.decrement_guests("low"))
-
-
-@app.route("/increment_mid_guest", methods=["POST"])
-def increment_mid_guests():
- t = re.from_string('{% from "macros.j2" import guests %}{{guests(count)}}')
- return render_template(t, count=rg.players.increment_guests("mid"))
-
-
-@app.route("/decrement_mid_guest", methods=["POST"])
-def decrement_mid_guests():
- t = re.from_string('{% from "macros.j2" import guests %}{{guests(count)}}')
- return render_template(t, count=rg.players.decrement_guests("mid"))
-
-
-@app.route("/increment_high_guest", methods=["POST"])
-def increment_high_guests():
- t = re.from_string('{% from "macros.j2" import guests %}{{guests(count)}}')
- return render_template(t, count=rg.players.increment_guests("high"))
+@app.route("/increment_guest", methods=["POST"])
+def increment_guests():
+ level = int(request.form["level"].split()[0])
+ t = re.from_string(
+ '{% from "macros.j2" import guest_control %}{{guest_control(level, value)}}'
+ )
+ value = rg.players.increment_guests(level)
+ return render_template(t, level=level, value=value)
-@app.route("/decrement_high_guest", methods=["POST"])
-def decrement_high_guests():
- t = re.from_string('{% from "macros.j2" import guests %}{{guests(count)}}')
- return render_template(t, count=rg.players.decrement_guests("high"))
+@app.route("/decrement_guest", methods=["POST"])
+def decrement_guests():
+ print(request.form["level"])
+ level = int(request.form["level"])
+ t = re.from_string(
+ '{% from "macros.j2" import guest_control %}{{guest_control(level, value)}}'
+ )
+ value = rg.players.decrement_guests(level)
+ return render_template(t, level=level, value=value)
@app.route("/propose", methods=["POST"])
@@ -98,7 +65,10 @@ def toggle_player(player_request):
@app.route("/players", methods=["GET"])
def get_list_of_players():
all_players = rg.players.get_all_players()
- return re.get_template("players.j2").render(players=all_players, url_for=url_for)
+ guests = rg.players.get_guests()
+ return re.get_template("players.j2").render(
+ players=all_players, guests=guests, url_for=url_for
+ )
@app.route("/reset_players", methods=["POST"])
diff --git a/src/match_up/templates/macros.j2 b/src/match_up/templates/macros.j2
index 2a8ad1e..83fc823 100644
--- a/src/match_up/templates/macros.j2
+++ b/src/match_up/templates/macros.j2
@@ -10,9 +10,25 @@
hx-swap="outerHTML"> {{ player.first + " " + player.last}} </button>
{%- endmacro %}
-{% macro guests(count, level) -%}
-<div class="control" id="{{level}}guests">
- <input class="input is-responsive" type="text" style="text-align:center" value="{{ count }} Guests" disabled>
+{% macro guest_control(level, value) -%}
+<div class="field has-addons" id="guests_{{level}}">
+ <div class="control">
+ <button class="button is-responsive is-dark"
+ hx-post="/decrement_guest"
+ hx-swap="outerHTML"
+ hx-vals='{"level": "{{ level }}"}'
+ hx-target="#guests_{{ level }}"><span class="icon"><i class="fas fa-light fa-minus"></i></span></button>
+ </div>
+ <div class="control">
+ <input class="input is-responsive" type="text" style="text-align:center" value="{{ value }}" disabled>
+ </div>
+ <div class="control">
+ <button class="button is-responsive is-dark"
+ hx-post="/increment_guest"
+ hx-swap="outerHTML"
+ hx-vals='{"level": "{{ level }}"}'
+ hx-target="#guests_{{ level }}"><span class="icon"><i class="fas fa-light fa-plus"></i></span></button>
+ </div>
</div>
{%- endmacro %}
diff --git a/src/match_up/templates/players.j2 b/src/match_up/templates/players.j2
index f25889c..46ff172 100644
--- a/src/match_up/templates/players.j2
+++ b/src/match_up/templates/players.j2
@@ -1,72 +1,28 @@
-{% from "macros.j2" import header, navbar, footer, player_button %}
+{% from "macros.j2" import header, navbar, footer, player_button, guest_control %}
<!doctype html>
<html lang="en">
{{ header(url_for) }}
<body>
<section class="section">
{{ navbar(url_for) }}
+ <h4 class="title is-4">Players</h4>
<div class="fixed-grid has-4-cols">
<div class="grid">
{% for player in players %}
<div class="cell"> {{ player_button(player) }} </div>
{% endfor %}
</div>
+ <h4 class="title is-4">Guests</h4>
<div class="columns">
- <div class="column">
- <div class="field has-addons">
- <div class="control">
- <button class="button is-responsive is-dark"
- hx-post="/decrement_low_guest"
- hx-swap="outerHTML"
- hx-target="#lowguests">-</button>
- </div>
- <div hx-get="/low_guests" hx-swap="outerHTML" hx-trigger="revealed"></div>
- <div class="control">
- <button class="button is-responsive is-dark"
- hx-post="/increment_low_guest"
- hx-swap="outerHTML"
- hx-target="#lowguests">+</button>
- </div>
- </div>
- </div>
- <div class="column">
- <div class="field has-addons">
- <div class="control">
- <button class="button is-responsive is-dark"
- hx-post="/decrement_mid_guest"
- hx-swap="outerHTML"
- hx-target="#midguests">-</button>
- </div>
- <div hx-get="/mid_guests" hx-swap="outerHTML" hx-trigger="revealed"></div>
- <div class="control">
- <button class="button is-responsive is-dark"
- hx-post="/increment_mid_guest"
- hx-swap="outerHTML"
- hx-target="#midguests">+</button>
- </div>
- </div>
- </div>
- <div class="column">
- <div class="field has-addons">
- <div class="control">
- <button class="button is-responsive is-dark"
- hx-post="/decrement_high_guest"
- hx-swap="outerHTML"
- hx-target="#highguests">-</button>
- </div>
- <div hx-get="/high_guests" hx-swap="outerHTML" hx-trigger="revealed"></div>
- <div class="control">
- <button class="button is-responsive is-dark"
- hx-post="/increment_high_guest"
- hx-swap="outerHTML"
- hx-target="#highguests">+</button>
- </div>
- </div>
- </div>
- <div class="column">
- <button class="button is-dark is-responsive"
- hx-post="/reset_players">Reset!</button>
- </div>
+ {% for level in guests %}
+ <div class="column"> {{ guest_control(level, guests[level]) }} </div>
+ {% endfor %}
+ </div>
+ </section>
+ <section class="section">
+ <div class="column">
+ <button class="button is-dark is-responsive"
+ hx-post="/reset_players">RESET!</button>
</div>
{{ footer() }}
</section>
diff --git a/src/match_up/utilities.py b/src/match_up/utilities.py
index 8aadfd2..56fb78e 100644
--- a/src/match_up/utilities.py
+++ b/src/match_up/utilities.py
@@ -1,7 +1,6 @@
from time import time
from typing import Tuple
from random import shuffle
-from dataclasses import dataclass
SECS_IN_MIN = 60