From 6ca047f36fb688cdb72f0170e0fb3aaf3701ff95 Mon Sep 17 00:00:00 2001 From: Karan Jayachandra Date: Fri, 15 Nov 2024 14:55:05 +0100 Subject: Added multiple levels for the guests --- src/match_up/model.py | 35 ++++++++++++++----- src/match_up/routes.py | 72 ++++++++++++--------------------------- src/match_up/templates/macros.j2 | 22 ++++++++++-- src/match_up/templates/players.j2 | 68 +++++++----------------------------- src/match_up/utilities.py | 1 - 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}} {%- endmacro %} -{% macro guests(count, level) -%} -
- +{% macro guest_control(level, value) -%} +
+
+ +
+
+ +
+
+ +
{%- 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 %} {{ header(url_for) }}
{{ navbar(url_for) }} +

Players

{% for player in players %}
{{ player_button(player) }}
{% endfor %}
+

Guests

-
-
-
- -
-
-
- -
-
-
-
-
-
- -
-
-
- -
-
-
-
-
-
- -
-
-
- -
-
-
-
- -
+ {% for level in guests %} +
{{ guest_control(level, guests[level]) }}
+ {% endfor %} +
+
+
+
+
{{ footer() }}
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 -- cgit v1.3.1