diff options
| author | Karan Jayachandra <mail@karanjayachandra.com> | 2024-12-02 19:50:15 +0000 |
|---|---|---|
| committer | Karan Jayachandra <mail@karanjayachandra.com> | 2024-12-02 19:50:15 +0000 |
| commit | fd03b6dd91be67b96356827a2ce4b7728d2e25ea (patch) | |
| tree | 8d9cf47a6bbac47fe9eeffbc0d92a1eef4323572 /src/match_up/controller.py | |
| parent | 7b7f8cdef5f035ccdab714059c1a6c54b80c4ba3 (diff) | |
| parent | 662e0854a6c61503954aa659e1c932db69443a06 (diff) | |
Merge branch 'develop' into 'main'
Develop
See merge request KaranJayachandra/match_up!12
Diffstat (limited to 'src/match_up/controller.py')
| -rw-r--r-- | src/match_up/controller.py | 56 |
1 files changed, 39 insertions, 17 deletions
diff --git a/src/match_up/controller.py b/src/match_up/controller.py index 0e08cae..b00bf6b 100644 --- a/src/match_up/controller.py +++ b/src/match_up/controller.py @@ -2,7 +2,14 @@ from typing import Tuple from operator import attrgetter from match_up.data import Game, PLAYER_PER_COURT from match_up.model import Player, PlayerList, CourtList -from match_up.utilities import _create_placeholders, _select_players, _create_games +from match_up.utilities import ( + _create_placeholders, + _select_players, + _create_shuffle_games, + _create_team_games, + separate_teams_and_players, + split_courts, +) class RoundGenerator: @@ -30,21 +37,31 @@ class RoundGenerator: return games def _create_active_games( - self, total_levels: int + self, total_levels: int, group_by_team: bool ) -> Tuple[list[Game], list[Player]]: - active_courts, _ = self.courts.separate_courts() - used_courts, _ = self._separate_courts(active_courts) + active_courts = self.courts.separate_courts()[0] + used_courts = self._separate_courts(active_courts)[0] required_player_count = len(used_courts) * PLAYER_PER_COURT active_players = self.players.get_players() - selected_players = _select_players(active_players, required_player_count) - games = _create_games(used_courts, selected_players, total_levels) - return games, selected_players - - def _generate_proposal(self, total_levels: int) -> Tuple[list[Game], list[Player]]: - inactive_games = self._create_inactive_games() - active_games, selected_players = self._create_active_games(total_levels) - games = active_games + inactive_games - games.sort(key=attrgetter("court")) + if group_by_team: + active_teams, team_less_players = separate_teams_and_players(active_players) + regular_court_count = len(used_courts) - len(active_teams) + regular_courts, team_courts = split_courts(used_courts, regular_court_count) + new_player_count = required_player_count - ( + PLAYER_PER_COURT * len(active_teams) + ) + regular_players = _select_players(team_less_players, new_player_count) + regular_games = _create_shuffle_games( + regular_courts, regular_players, total_levels + ) + team_games, selected_team_players = _create_team_games( + team_courts, active_teams + ) + selected_players = regular_players + selected_team_players + games = regular_games + team_games + else: + selected_players = _select_players(active_players, required_player_count) + games = _create_shuffle_games(used_courts, selected_players, total_levels) return games, selected_players def update_player_list(self, csv_location): @@ -55,10 +72,15 @@ class RoundGenerator: self.proposed_players = [] return self.games - def propose(self, levels: int) -> list[Game]: - proposal = self._generate_proposal(levels) - self.proposed_games = proposal[0] - self.proposed_players = proposal[1] + def propose(self, levels: int, group_by_team: bool) -> list[Game]: + inactive_games = self._create_inactive_games() + active_games, selected_players = self._create_active_games( + levels, group_by_team + ) + games = active_games + inactive_games + games.sort(key=attrgetter("court")) + self.proposed_games = games + self.proposed_players = selected_players return self.proposed_games def confirm(self) -> list[Game]: |
