diff options
| author | Karan Jayachandra <mail@karanjayachandra.com> | 2024-11-15 14:55:05 +0100 |
|---|---|---|
| committer | Karan Jayachandra <mail@karanjayachandra.com> | 2024-11-15 14:55:05 +0100 |
| commit | 6ca047f36fb688cdb72f0170e0fb3aaf3701ff95 (patch) | |
| tree | df1ea950988b9cd9e4e162e3c4ade029380958f8 /src | |
| parent | 5b856ff22ea85ecc0073dc94840d76ea2ed2f1e2 (diff) | |
Added multiple levels for the guests
Diffstat (limited to 'src')
| -rw-r--r-- | src/match_up/model.py | 35 | ||||
| -rw-r--r-- | src/match_up/routes.py | 72 | ||||
| -rw-r--r-- | src/match_up/templates/macros.j2 | 22 | ||||
| -rw-r--r-- | src/match_up/templates/players.j2 | 68 | ||||
| -rw-r--r-- | 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}} </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 |
