diff options
Diffstat (limited to 'src/match_up')
| -rw-r--r-- | src/match_up/__init__.py | 12 | ||||
| -rw-r--r-- | src/match_up/controller.py | 6 | ||||
| -rw-r--r-- | src/match_up/gen_test_data.py | 32 | ||||
| -rw-r--r-- | src/match_up/model.py | 36 | ||||
| -rw-r--r-- | src/match_up/utilities.py | 5 |
5 files changed, 40 insertions, 51 deletions
diff --git a/src/match_up/__init__.py b/src/match_up/__init__.py index 1f625a7..3967cb9 100644 --- a/src/match_up/__init__.py +++ b/src/match_up/__init__.py @@ -1,9 +1,10 @@ from flask import Flask from dotenv import load_dotenv +from argparse import ArgumentParser from importlib.resources import path from match_up.controller import RoundGenerator from match_up.model import CourtList, PlayerList - +from match_up.utilities import Timer load_dotenv() with path("match_up", "static") as p: @@ -11,10 +12,17 @@ with path("match_up", "static") as p: with path("match_up", "templates") as p: template_folder = p app = Flask("Match Up! Backend", static_folder=static_folder, template_folder=template_folder) -rg = RoundGenerator(courts=CourtList(), players=PlayerList()) +rg = RoundGenerator() from match_up import routes def main(): + parser = ArgumentParser() + parser.add_argument("-t", "--timer", help="Total mins per round", type=float, default=12) + parser.add_argument("-c", "--courts", help="Total number of courts", type=int, default=12) + args = parser.parse_args() + global rg + rg.courts = CourtList(total=args.courts) + rg.timer = Timer(max_mins=args.timer) app.run() diff --git a/src/match_up/controller.py b/src/match_up/controller.py index 2f8bfaf..6188b3e 100644 --- a/src/match_up/controller.py +++ b/src/match_up/controller.py @@ -1,6 +1,6 @@ from typing import Tuple from operator import attrgetter -from dataclasses import dataclass +from dataclasses import dataclass, field from match_up.utilities import sample_list, Timer from match_up.model import Team, Game, PlayerList, CourtList, MAX_LEVEL, PLAYER_PER_COURT @@ -43,8 +43,8 @@ def _create_games(courts: dict, players: list[dict], levels: int): @dataclass class RoundGenerator: - courts: CourtList - players: PlayerList + courts: CourtList = field(default_factory=lambda: CourtList()) + players: PlayerList = field(default_factory=lambda: PlayerList()) round: int = 0 proposal: tuple = tuple() diff --git a/src/match_up/gen_test_data.py b/src/match_up/gen_test_data.py deleted file mode 100644 index a49594f..0000000 --- a/src/match_up/gen_test_data.py +++ /dev/null @@ -1,32 +0,0 @@ -from csv import writer -from random import randint -from names import get_full_name -from model import Player, MIN_LEVEL, MAX_LEVEL - -PLAYER_COUNT = 80 - - -def _generate_players(player_count: int) -> list[Player]: - players = [] - for _ in range(player_count): - random_name = get_full_name() - random_skill = randint(MIN_LEVEL, MAX_LEVEL) - players.append(Player(name=random_name, skill=random_skill)) - return players - - -def _write_players_to_csv(player_list: list[Player]) -> None: - with open("database_test.csv", "w", newline="") as file: - data_writer = writer(file) - data_writer.writerow(["name", "skill"]) - for player in player_list: - data_writer.writerow([player.name, player.skill]) - - -def main(player_count: int): - players = _generate_players(player_count) - _write_players_to_csv(players) - - -if __name__ == "__main__": - main(PLAYER_COUNT) diff --git a/src/match_up/model.py b/src/match_up/model.py index c652ce8..592d60f 100644 --- a/src/match_up/model.py +++ b/src/match_up/model.py @@ -1,11 +1,13 @@ -from os import getenv from math import floor from csv import reader from typing import Tuple +from names import get_full_name from dataclasses import dataclass +from random import randint, getrandbits MIN_LEVEL = 1 MAX_LEVEL = 10 +DEFAULT_COURTS = 12 PLAYER_PER_COURT = 4 @@ -28,10 +30,9 @@ class Game: team1: Team team2: Team - @dataclass class CourtList: - total: int = int(getenv("COURTS")) + total: int = DEFAULT_COURTS def __post_init__(self) -> None: self.courts = {i + 1: True for i in range(self.total)} @@ -52,21 +53,32 @@ class CourtList: inactive_courts = {k: v for k, v in self.courts.items() if not v} return active_courts, inactive_courts +def _load_csv_players(file_name: str) -> dict: + with open(file_name, newline="") as file: + pointer = reader(file) + next(pointer, None) + players = { + id: Player(row[0], int(row[1])) for id, row in enumerate(pointer) + } + return players + +def _generate_random_players(player_count: int = 80) -> list[Player]: + players = {i: Player(name=get_full_name(), + skill=randint(MIN_LEVEL, MAX_LEVEL), + status=bool(getrandbits(1))) for i in range(player_count)} + return players @dataclass class PlayerList: - location: str = getenv("DATABASE") + location: str = None guests: int = 0 def __post_init__(self) -> None: - with open("data/" + self.location, newline="") as file: - pointer = reader(file) - next(pointer, None) - players = { - id: Player(row[0], int(row[1])) for id, row in enumerate(pointer) - } - self.guest_id_start = len(players) + 1 - self.players = players + if self.location is not None: + self.players = _load_csv_players(self.location) + else: + self.players = _generate_random_players() + self.guest_id_start = len(self.players) + 1 def increment_guests(self): self.guests = self.guests + 1 diff --git a/src/match_up/utilities.py b/src/match_up/utilities.py index 7a9d55d..8a905ba 100644 --- a/src/match_up/utilities.py +++ b/src/match_up/utilities.py @@ -1,10 +1,11 @@ -from os import getenv from time import time from typing import Tuple from random import shuffle from dataclasses import dataclass + SECS_IN_MIN = 60 +DEFAULT_TIMER = 12.0 def _shuffle_two_lists(a: list, b: list) -> Tuple[list, list]: @@ -30,9 +31,9 @@ def sample_list(indices: list, cost: list[int], count: int = None) -> list: @dataclass class Timer: + max_mins: float = DEFAULT_TIMER ref: float = None running: bool = False - max_mins: float = float(getenv("TIMER")) default: str = ("00", "00") def __post_init__(self): |
