-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdata.py
More file actions
128 lines (91 loc) · 3.5 KB
/
data.py
File metadata and controls
128 lines (91 loc) · 3.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
from os import path, walk
import json
from datetime import datetime
DATA_PATH = "./points_data"
SEASON_FILE_EXTENSION = ".json"
def get_all_filenames():
filenames = []
for (_, _, walk_filenames) in walk(DATA_PATH):
for filename in walk_filenames:
filenames.append(filename)
return filenames
def get_season_filename() -> str:
filenames = get_all_filenames()
for filename in filenames:
print(f"- '{filename}'")
while True:
user_filename = input("Enter season filename: ")
# Allow the user to omit file extension.
if SEASON_FILE_EXTENSION not in user_filename:
user_filename += SEASON_FILE_EXTENSION
if user_filename not in filenames:
print("Filename not recognised, try again.")
else:
return user_filename
def get_season_data(always_show_all_teams: bool):
season_filename = get_season_filename()
filepath = f"{DATA_PATH}/{season_filename}"
if path.exists(filepath):
with open(filepath) as f:
deserialised_json = json.load(f)
season = {
"year": deserialised_json["year"],
"y_axis_increment": deserialised_json["y_axis_increment"],
"dates": get_event_dates(deserialised_json),
"dated_event_names": get_dated_event_names(deserialised_json),
"team_names": get_team_names(deserialised_json),
"team_names_to_show": get_team_names_to_show(deserialised_json, always_show_all_teams),
"team_colours": get_team_colours(deserialised_json),
"team_points": get_team_points(deserialised_json)
}
return season
def get_event_dates(deserialised_json) -> list[datetime]:
year = deserialised_json["year"]
dates = []
for event in deserialised_json["weekends"]:
month = event["date"]["month"]
day = event["date"]["day"]
dates.append(datetime(year, month, day))
return dates
def get_dated_event_names(deserialised_json) -> list[str]:
year = deserialised_json["year"]
dates = []
for event in deserialised_json["weekends"]:
event_name = event["name"]
month = event["date"]["month"]
day = event["date"]["day"]
dates.append(f"{event_name} ({day}/{month}/{year})")
return dates
def get_team_colours(deserialised_json) -> dict[str, str]:
team_colours = dict()
for team in deserialised_json["teams"]:
team_colours[team["name"]] = team["hex_colour"]
return team_colours
def get_team_points(deserialised_json) -> dict[str, list[int]]:
teams = get_team_names(deserialised_json)
weekends = deserialised_json["weekends"]
team_points = dict()
for team in teams:
team_points[team] = []
for weekend in weekends:
for team in teams:
team_points[team].append(weekend["points"][team])
for team in team_points:
cumulative(team_points[team])
return team_points
def get_team_names(deserialised_json) -> list[str]:
teams = []
for team in deserialised_json["teams"]:
teams.append(team["name"])
return teams
def get_team_names_to_show(deserialised_json, always_show_all_teams: bool) -> list[str]:
if always_show_all_teams:
return get_team_names(deserialised_json)
teams = []
for team in deserialised_json["teams"]:
if team["draw_on_graph"]:
teams.append(team["name"])
return teams
def cumulative(numbers: list):
for i in range (1, len(numbers)):
numbers[i] += numbers[i - 1]