summaryrefslogtreecommitdiff
path: root/src/match_up/utilities.py
diff options
context:
space:
mode:
authorKaran Jayachandra <mail@karanjayachandra.com>2024-12-02 19:50:15 +0000
committerKaran Jayachandra <mail@karanjayachandra.com>2024-12-02 19:50:15 +0000
commitfd03b6dd91be67b96356827a2ce4b7728d2e25ea (patch)
tree8d9cf47a6bbac47fe9eeffbc0d92a1eef4323572 /src/match_up/utilities.py
parent7b7f8cdef5f035ccdab714059c1a6c54b80c4ba3 (diff)
parent662e0854a6c61503954aa659e1c932db69443a06 (diff)
Merge branch 'develop' into 'main'
Develop See merge request KaranJayachandra/match_up!12
Diffstat (limited to 'src/match_up/utilities.py')
-rw-r--r--src/match_up/utilities.py117
1 files changed, 45 insertions, 72 deletions
diff --git a/src/match_up/utilities.py b/src/match_up/utilities.py
index db7c76a..7140a5f 100644
--- a/src/match_up/utilities.py
+++ b/src/match_up/utilities.py
@@ -1,17 +1,7 @@
from typing import Tuple
-from pandas import read_csv
-from random import shuffle, choice
-from random import randint, getrandbits
-from names import get_first_name, get_last_name
-from match_up.data import (
- Player,
- DisplayPlayer,
- Team,
- Game,
- MIN_LEVEL,
- MAX_LEVEL,
- PLAYER_PER_COURT,
-)
+from random import shuffle, sample
+from match_up.data import Player, DisplayPlayer, Team, Game
+from match_up.data import MAX_LEVEL, PLAYER_PER_COURT
def _shuffle_two_lists(a: list, b: list) -> Tuple[list, list]:
@@ -71,7 +61,9 @@ def _create_groups_of_four_players(
return court_players
-def _create_games(courts: dict, players: list[Player], levels: int) -> list[Game]:
+def _create_shuffle_games(
+ courts: dict, players: list[Player], levels: int
+) -> list[Game]:
court_players = _create_groups_of_four_players(players, levels)
games = []
for court, players in zip(courts, court_players):
@@ -85,66 +77,47 @@ 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]),
+def _create_team_games(courts: dict, teams: dict) -> tuple[list[Game], list[Player]]:
+ games = []
+ selected_players = []
+ for court, (_, players) in zip(courts, teams.items()):
+ players = sample(players, PLAYER_PER_COURT)
+ selected_players += players
+ players.sort(key=lambda x: x.level, reverse=True)
+ team1 = Team(
+ player1=DisplayPlayer(players[0]), player2=DisplayPlayer(players[3])
)
- 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:
- text = "Beginners"
- case 3:
- text = "Novices"
- case 5:
- text = "Intermediates"
- if value == 1:
- text = text[:-1]
- return f"{value} {text}"
+ team2 = Team(
+ player1=DisplayPlayer(players[1]), player2=DisplayPlayer(players[2])
+ )
+ games.append(Game(court, team1, team2))
+ return games, selected_players
-def _init_database_from_csv(session, csv_location: str) -> None:
- data = read_csv(csv_location)
- session.query(Player).delete()
- for _, entry in data.iterrows():
- player = Player(
- id=entry["id"],
- first=entry["first"],
- last=entry["last"],
- level=entry["skill"],
- status=False,
- count=0,
- )
- session.add(player)
- session.commit()
+def separate_teams_and_players(players: list[Player]) -> Tuple[dict, list[Player]]:
+ unique_team_id = {player.team for player in players}
+ grouped_players_by_team = {team_id: [] for team_id in unique_team_id}
+ for player in players:
+ team = player.team
+ grouped_players_by_team[team].append(player)
+ active_teams = {}
+ players_without_team = []
+ for team_id in grouped_players_by_team:
+ if team_id == 0:
+ players_without_team += [
+ player for player in grouped_players_by_team[team_id]
+ ]
+ else:
+ if len(grouped_players_by_team[team_id]) >= 4:
+ active_teams[team_id] = grouped_players_by_team[team_id]
+ else:
+ players_without_team += [
+ player for player in grouped_players_by_team[team_id]
+ ]
+ return active_teams, players_without_team
-def _init_random_database(session, player_count: int = 80) -> None:
- for i in range(player_count):
- player = Player(
- id=i,
- first=get_first_name(),
- last=get_last_name(),
- level=randint(MIN_LEVEL, MAX_LEVEL),
- status=bool(getrandbits(1)),
- count=0,
- )
- session.add(player)
- session.commit()
+def split_courts(courts: dict, n) -> Tuple[dict, dict]:
+ first_half = {k: v for (k, v) in [x for x in courts.items()][:n]}
+ second_half = {k: v for (k, v) in [x for x in courts.items()][n:]}
+ return first_half, second_half