summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/match_up/data.py2
-rw-r--r--src/match_up/model.py34
-rw-r--r--src/match_up/routes.py26
-rw-r--r--src/match_up/templates/controls.j22
-rw-r--r--src/match_up/templates/players.j214
-rw-r--r--src/match_up/utilities.py45
6 files changed, 41 insertions, 82 deletions
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 @@
<button class="button is-dark is-responsive"
hx-post="/propose"
hx-target="#games"
- hx-include="[name='type']">Create</button>
+ hx-include="[name='type']">Generate</button>
</div>
<div class="column"></div>
<div class="column">
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 @@
<body>
<section class="section">
{{ navbar(url_for) }}
- <h4 class="title is-4">Players</h4>
+ <h4 class="title is-4">Members</h4>
<div class="fixed-grid has-4-cols">
<div class="grid">
- {% for player in players %}
- <div class="cell"> {{ player_button(player) }} </div>
+ {% for regular in regulars %}
+ <div class="cell"> {{ player_button(regular) }} </div>
{% endfor %}
</div>
<h4 class="title is-4">Guests</h4>
- <div class="fixed-grid has-3-cols">
+ <div class="fixed-grid has-4-cols">
<div class="grid">
- {% for level in guests %}
- <div class="cell"> {{ guest_control(level, guests[level]) }} </div>
- {% endfor %}
+ {% for guest in guests %}
+ <div class="cell"> {{ player_button(guest) }} </div>
+ {% endfor %}
</div>
</section>
<section class="section">
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)