From 6ebbee2016b0232573ad1d322b4d4ca6287b3599 Mon Sep 17 00:00:00 2001 From: Karan Jayachandra Date: Mon, 2 Dec 2024 17:44:24 +0100 Subject: Added the guests with history and level --- src/match_up/data.py | 2 ++ src/match_up/model.py | 34 ++++++---------------------- src/match_up/routes.py | 26 ++-------------------- src/match_up/templates/controls.j2 | 2 +- src/match_up/templates/players.j2 | 14 ++++++------ src/match_up/utilities.py | 45 +++++++++++++++++++------------------- 6 files changed, 41 insertions(+), 82 deletions(-) (limited to 'src/match_up') diff --git a/src/match_up/data.py b/src/match_up/data.py index 62aa5d8..636a5eb 100644 --- a/src/match_up/data.py +++ b/src/match_up/data.py @@ -6,6 +6,8 @@ from sqlalchemy.ext.declarative import declarative_base MIN_LEVEL = 1 MAX_LEVEL = 10 PLAYER_PER_COURT = 4 +GUEST_LEVELS = [1, 3, 5] +GUESTS_PER_LEVEL = 4 BASE = declarative_base() diff --git a/src/match_up/model.py b/src/match_up/model.py index c42823b..4ac8c54 100644 --- a/src/match_up/model.py +++ b/src/match_up/model.py @@ -5,12 +5,7 @@ from dataclasses import dataclass from importlib.resources import path from sqlalchemy.orm import sessionmaker from sqlalchemy import create_engine, not_ -from match_up.utilities import ( - generate_guests, - _init_database_from_csv, - _init_random_database, - _textualize_guest, -) +from match_up.utilities import _init_database_from_csv, _init_random_database from match_up.data import ( Player, DisplayPlayer, @@ -44,7 +39,6 @@ class CourtList: class PlayerList: - guest_count: dict = {1: 0, 3: 0, 5: 0} def __init__(self, csv_location=None) -> None: with path("match_up", "players.db") as p: @@ -64,16 +58,6 @@ class PlayerList: BASE.metadata.create_all(bind=engine) self.session = sessionmaker(bind=engine)() - def increment_guests(self, level: int): - self.guest_count[level] = self.guest_count[level] + 1 - return _textualize_guest(level, self.guest_count[level]) - - def decrement_guests(self, level: int): - if self.guest_count[level] == 0: - return 0 - self.guest_count[level] = self.guest_count[level] - 1 - return _textualize_guest(level, self.guest_count[level]) - def get_player_status(self, id: int) -> bool: return self.session.query(Player).filter(Player.id == id).first().status @@ -83,14 +67,17 @@ class PlayerList: self.session.commit() return DisplayPlayer(player) - def get_all_players(self) -> list[DisplayPlayer]: + def get_all_players(self) -> Tuple[list[DisplayPlayer], list[DisplayPlayer]]: all_players = [ DisplayPlayer(p) for p in self.session.query(Player) .order_by(Player.first, Player.last) .all() ] - return all_players + regulars = [player for player in all_players if player.first != "Guest"] + guests = [player for player in all_players if player.first == "Guest"] + guests.sort(key=lambda x: int(x.last)) + return regulars, guests def get_possible_game_count(self) -> int: total_players = len(self.get_players()) @@ -104,14 +91,7 @@ class PlayerList: .filter(not_(Player.status == 0)) .all() ) - guests = generate_guests(self.guest_count) - return active_players + guests - - def get_guests(self): - return { - level: _textualize_guest(level, self.guest_count[level]) - for level in self.guest_count - } + return active_players def increment_game_count(self, player_ids: list[int]): players = self.session.query(Player).filter(Player.id.in_(player_ids)) diff --git a/src/match_up/routes.py b/src/match_up/routes.py index c0e77aa..8ae18ce 100644 --- a/src/match_up/routes.py +++ b/src/match_up/routes.py @@ -15,27 +15,6 @@ def get_controls(): return render_template("controls.j2", courts=_rg.courts.get_courts()) -@_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_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"]) def get_random_games(): levels = int(request.form["type"].split()[0]) @@ -69,10 +48,9 @@ def toggle_player(player_request): @_app.route("/players", methods=["GET"]) def get_list_of_players(): - all_players = _rg.players.get_all_players() - guests = _rg.players.get_guests() + regulars, guests = _rg.players.get_all_players() return re.get_template("players.j2").render( - players=all_players, guests=guests, url_for=url_for + regulars=regulars, guests=guests, url_for=url_for ) diff --git a/src/match_up/templates/controls.j2 b/src/match_up/templates/controls.j2 index 24b42c6..95584f7 100644 --- a/src/match_up/templates/controls.j2 +++ b/src/match_up/templates/controls.j2 @@ -23,7 +23,7 @@ + hx-include="[name='type']">Generate
diff --git a/src/match_up/templates/players.j2 b/src/match_up/templates/players.j2 index cd41925..0beeee9 100644 --- a/src/match_up/templates/players.j2 +++ b/src/match_up/templates/players.j2 @@ -5,19 +5,19 @@
{{ navbar(url_for) }} -

Players

+

Members

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

Guests

-
+
- {% for level in guests %} -
{{ guest_control(level, guests[level]) }}
- {% endfor %} + {% for guest in guests %} +
{{ player_button(guest) }}
+ {% endfor %}
diff --git a/src/match_up/utilities.py b/src/match_up/utilities.py index db7c76a..9fc31fa 100644 --- a/src/match_up/utilities.py +++ b/src/match_up/utilities.py @@ -1,6 +1,6 @@ from typing import Tuple from pandas import read_csv -from random import shuffle, choice +from random import shuffle from random import randint, getrandbits from names import get_first_name, get_last_name from match_up.data import ( @@ -11,6 +11,8 @@ from match_up.data import ( MIN_LEVEL, MAX_LEVEL, PLAYER_PER_COURT, + GUESTS_PER_LEVEL, + GUEST_LEVELS, ) @@ -85,28 +87,6 @@ def _create_games(courts: dict, players: list[Player], levels: int) -> list[Game return games -def generate_guest_type(count: int, level: int, description: str): - base_id = level * 10000 - return [ - Player( - id=base_id + i, - first=description, - last=f"{i + 1}", - level=level, - status=True, - count=choice([0, 1000]), - ) - for i in range(count) - ] - - -def generate_guests(guests): - beginner_guests = generate_guest_type(guests[1], 1, "Beginner") - novice_guests = generate_guest_type(guests[3], 3, "Novice") - intermediate_guests = generate_guest_type(guests[5], 3, "Intermediate") - return beginner_guests + novice_guests + intermediate_guests - - def _textualize_guest(level, value) -> str: match level: case 1: @@ -120,6 +100,23 @@ def _textualize_guest(level, value) -> str: return f"{value} {text}" +def _init_guests(session) -> None: + for level_id, level in enumerate(GUEST_LEVELS): + for player_id in range(GUESTS_PER_LEVEL): + unique_id = (level_id * GUESTS_PER_LEVEL) + player_id + 1 + id = 1000 + unique_id + player = Player( + id=id, + first="Guest", + last=str(unique_id), + level=level, + status=False, + count=0, + ) + session.add(player) + session.commit() + + def _init_database_from_csv(session, csv_location: str) -> None: data = read_csv(csv_location) session.query(Player).delete() @@ -134,6 +131,7 @@ def _init_database_from_csv(session, csv_location: str) -> None: ) session.add(player) session.commit() + _init_guests(session) def _init_random_database(session, player_count: int = 80) -> None: @@ -148,3 +146,4 @@ def _init_random_database(session, player_count: int = 80) -> None: ) session.add(player) session.commit() + _init_guests(session) -- cgit v1.3.1