-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcheck_members.py
54 lines (42 loc) · 1.75 KB
/
check_members.py
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
import argparse
UNIQUE_FIELDS = ("phone", "email")
FIELDS = ("group", "nickname") + UNIQUE_FIELDS
def check_member_nicknames(database, season, league):
unique_values = set()
group_key = f"{season}/{league}"
for name, info in database.items():
if group_key in info["group"]:
nickname = info["nickname"]
assert info["nickname"] not in unique_values, f"{nickname}@{name} not unique"
unique_values.add(nickname)
def check_members(database):
unique_values = {f: set() for f in UNIQUE_FIELDS}
for name, info in database.items():
assert tuple(info.keys()) == FIELDS, f"keys@{name}"
for f in UNIQUE_FIELDS:
assert info[f] not in unique_values[f], f"{f}@{name} not unique"
unique_values[f].add(info[f])
def summarize_groups(season, database):
groups = {}
for name, info in database.items():
for league, group in info["group"].items():
if league.startswith(season):
groups.setdefault(league, {}).setdefault(group, set()).add(f"{name} - {info['nickname']}")
for league in sorted(groups):
for group in sorted(groups[league]):
group_names = groups[league][group]
title = f"{league}-{group} ({len(group_names)})"
print(title)
print("=" * len(title))
for name in sorted(group_names):
print(name)
print()
parser = argparse.ArgumentParser()
parser.add_argument("season")
args = parser.parse_args()
with open("members.json") as handle:
database = eval(handle.read())
check_members(database)
check_member_nicknames(database, args.season, "DOUBLES")
check_member_nicknames(database, args.season, "SINGLES")
summarize_groups(args.season, database)