report_handler.py
ReportHandler
¶
Handles report's data generation and local saving.
Attributes:
| Name | Type | Description |
|---|---|---|
data |
list |
List of serialized data for the report. |
export_location |
str |
Local path for report saving. |
__init__(self)
special
¶
Constructor for ReportHandler.
Source code in controller/report_handler.py
def __init__(self):
"""Constructor for ReportHandler."""
self.data = []
self.export_location = _CONFIG.config["report_save_path"]
all_players_by_elo(self)
¶
Extracts data for all players ordered by ELO ranking.
Source code in controller/report_handler.py
def all_players_by_elo(self):
"""Extracts data for all players ordered by ELO ranking."""
players_list = DatabaseHandler().helper.get_players_by_elo()
for player in players_list:
self.data.append(
{
"ELO": player.elo,
"Nom": player.last_name,
"Prénom": player.first_name,
"Date de naissance": player.dob,
"Genre": player.gender,
"id": player.id_num,
}
)
all_players_by_name(self)
¶
Extracts data for all players ordered by name.
Source code in controller/report_handler.py
def all_players_by_name(self):
"""Extracts data for all players ordered by name."""
players_list = DatabaseHandler().helper.get_players_by_name()
for player in players_list:
self.data.append(
{
"Nom": player.last_name,
"Prénom": player.first_name,
"Date de naissance": player.dob,
"Genre": player.gender,
"ELO": player.elo,
"id": player.id_num,
}
)
all_tournaments(self)
¶
Extracts data for all tournaments.
Source code in controller/report_handler.py
def all_tournaments(self):
"""Extracts data for all tournaments."""
tournaments_list = DatabaseHandler().helper.get_tournaments_by_id()
for tournament in tournaments_list:
players_ids = [x.id_num for x in tournament.players]
list_of_players_name = DatabaseHandler().helper.get_players_names(players_sample=players_ids)
if tournament.is_finished:
is_finished = "Terminé"
else:
is_finished = "En cours"
self.data.append(
{
"id": tournament.id_num,
"Nom": tournament.name,
"Lieu": tournament.location,
"Date": tournament.date,
"Nombre de rounds": tournament.number_of_rounds,
"Contrôle de temps": tournament.time_control,
"Description": tournament.description,
"Progression": is_finished,
"Joueurs": list_of_players_name,
"Classement": DatabaseHandler().helper.get_formated_leaderboard(
leaderboard=tournament.leaderboard
),
}
)
export_csv(self, save_path)
¶
Exports data to csv format.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
save_path |
Path |
Local path for file. |
required |
Source code in controller/report_handler.py
def export_csv(self, save_path: Path):
"""Exports data to csv format.
Args:
save_path (Path): Local path for file.
"""
with open(save_path, "w") as output_file:
field_names = list(self.data[0].keys())
writer = csv.DictWriter(output_file, fieldnames=field_names)
writer.writeheader()
for element in self.data:
writer.writerow(element)
export_txt(self, save_path)
¶
Exports data to text format.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
save_path |
Path |
Local path for file. |
required |
Source code in controller/report_handler.py
def export_txt(self, save_path: Path):
"""Exports data to text format.
Args:
save_path (Path): Local path for file.
"""
with open(save_path, "w") as output_file:
for element in self.data:
for key in element:
output_file.write(f"{key}: {element[key]}\n")
output_file.write("\n")
init_export(self, file_format)
¶
Initiates export process and set full local path.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
file_format |
str |
Desired export file format. |
required |
Returns:
| Type | Description |
|---|---|
str |
Local path of saved file. |
Source code in controller/report_handler.py
def init_export(self, file_format: str):
"""Initiates export process and set full local path.
Args:
file_format (str): Desired export file format.
Returns:
str: Local path of saved file.
"""
time = datetime.now().strftime("%Y-%m-%d-%H%M%S")
file_name = f"oc_chess_club-rapport-{time}.{file_format}"
save_path = Path(self.export_location).joinpath(file_name)
if file_format == "txt":
self.export_txt(save_path=save_path)
elif file_format == "csv":
self.export_csv(save_path=save_path)
return str(save_path)
load_tournament_data(self, tournament_id)
¶
Uses database handler to load a tournament rounds and matches.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
tournament_id |
int |
Unique id of tournament to be loaded. |
required |
Source code in controller/report_handler.py
def load_tournament_data(self, tournament_id: int):
"""Uses database handler to load a tournament rounds and matches.
Args:
tournament_id (int): Unique id of tournament to be loaded.
"""
DatabaseHandler().load_rounds(tournament_id=tournament_id)
DatabaseHandler().load_matches(tournament_id=tournament_id)
tournament_matches(self, tournament)
¶
Extracts data for all matches of a tournament.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
tournament |
Tournament |
Tournament to be considered. |
required |
Source code in controller/report_handler.py
def tournament_matches(self, tournament: Tournament):
"""Extracts data for all matches of a tournament.
Args:
tournament (Tournament): Tournament to be considered.
"""
self.load_tournament_data(tournament_id=tournament.id_num)
for round_ in tournament.rounds:
matches = tournament.rounds[round_].matches
for match in matches:
match = matches[match]
player_1 = f"{match.player_1.first_name} {match.player_1.last_name}"
player_2 = f"{match.player_2.first_name} {match.player_2.last_name}"
if match.winner is None:
winner = "Pas encore joué"
elif match.winner == 0:
winner = "Match nul"
elif match.winner == 1:
winner = player_1
elif match.winner == 2:
winner = player_2
self.data.append({"id": match.id_num, "Joueur 1": player_1, "Joueur 2": player_2, "Vainqueur": winner})
tournament_players_by_elo(self, tournament)
¶
Extracts data for all players of a tournament ordered by ELO ranking.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
tournament |
Tournament |
Tournament to be considered. |
required |
Source code in controller/report_handler.py
def tournament_players_by_elo(self, tournament: Tournament):
"""Extracts data for all players of a tournament ordered by ELO ranking.
Args:
tournament (Tournament): Tournament to be considered.
"""
players_dict = {}
for player in tournament.players:
players_dict[player.id_num] = player
players_list = DatabaseHandler().helper.get_players_by_elo(players_sample=players_dict)
for player in players_list:
self.data.append(
{
"ELO": player.elo,
"Nom": player.last_name,
"Prénom": player.first_name,
"Date de naissance": player.dob,
"Genre": player.gender,
"id": player.id_num,
}
)
tournament_players_by_name(self, tournament)
¶
Extracts data for all players of a tournament ordered by name.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
tournament |
Tournament |
Tournament to be considered. |
required |
Source code in controller/report_handler.py
def tournament_players_by_name(self, tournament: Tournament):
"""Extracts data for all players of a tournament ordered by name.
Args:
tournament (Tournament): Tournament to be considered.
"""
players_dict = {}
for player in tournament.players:
players_dict[player.id_num] = player
players_list = DatabaseHandler().helper.get_players_by_name(players_sample=players_dict)
for player in players_list:
self.data.append(
{
"Nom": player.last_name,
"Prénom": player.first_name,
"Date de naissance": player.dob,
"Genre": player.gender,
"ELO": player.elo,
"id": player.id_num,
}
)
tournament_rounds(self, tournament)
¶
Extracts data for all rounds of a tournament.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
tournament |
Tournament |
Tournament to be considered. |
required |
Source code in controller/report_handler.py
def tournament_rounds(self, tournament: Tournament):
"""Extracts data for all rounds of a tournament.
Args:
tournament (Tournament): Tournament to be considered.
"""
self.load_tournament_data(tournament_id=tournament.id_num)
for round_ in tournament.rounds:
matches = []
for match in tournament.rounds[round_].matches:
match = tournament.rounds[round_].matches[match]
player_1 = DatabaseHandler().helper.get_player_name_from_id(match.player_1.id_num)
player_2 = DatabaseHandler().helper.get_player_name_from_id(match.player_2.id_num)
matches.append(f"{player_1} vs {player_2}")
self.data.append(
{
"Round n°": tournament.rounds[round_].round_number,
"Matchs": matches,
"id": tournament.rounds[round_].id_num,
}
)