-
Notifications
You must be signed in to change notification settings - Fork 0
/
utils.py
137 lines (112 loc) · 4.67 KB
/
utils.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
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
129
130
131
132
133
134
135
136
137
import json
from datetime import datetime
from pytz import timezone
ist_tz = timezone('Asia/Kolkata')
utc_tz = timezone('UTC')
def get_contest_details(id, contest):
proofread = {}
validate = {}
lastUpdate = ""
try:
with open("contest_data/stats/" + str(id) + ".json", encoding="utf8") as file:
stats = json.load(file)
for indexPage in stats:
if indexPage == "LastUpdate":
lastUpdate = stats["LastUpdate"]
continue
for page in stats[indexPage]:
if stats[indexPage][page]["proofread"] is not None:
user = stats[indexPage][page]["proofread"]["user"]
timestamp = stats[indexPage][page]["proofread"]["timestamp"]
rev = stats[indexPage][page]["proofread"].get("revid", None)
# Create Date Object for easy comparison
d1_obj = ist_tz.localize(datetime.strptime(contest["start_date"], '%d-%m-%Y %H:%M'))
d2_obj = ist_tz.localize(datetime.strptime(contest["end_date"], '%d-%m-%Y %H:%M'))
d3_obj = utc_tz.localize(datetime.strptime(timestamp, '%Y-%m-%dT%H:%M:%SZ'))
page_obj = dict(page=page, rev=rev)
if user not in proofread and (d1_obj < d3_obj < d2_obj):
proofread[user] = [page_obj]
elif (d1_obj < d3_obj < d2_obj):
proofread[user].append(page_obj)
if stats[indexPage][page]["validate"] is not None:
user = stats[indexPage][page]["validate"]["user"]
timestamp = stats[indexPage][page]["validate"]["timestamp"]
rev = stats[indexPage][page]["validate"].get("revid", None)
# Create Date Object for easy comparison
d1_obj = ist_tz.localize(datetime.strptime(contest["start_date"], '%d-%m-%Y %H:%M'))
d2_obj = ist_tz.localize(datetime.strptime(contest["end_date"], '%d-%m-%Y %H:%M'))
d3_obj = utc_tz.localize(datetime.strptime(timestamp, '%Y-%m-%dT%H:%M:%SZ'))
page_obj = dict(page=page, rev=rev)
if user not in validate and (d1_obj < d3_obj < d2_obj):
validate[user] = [page_obj]
elif (d1_obj < d3_obj < d2_obj):
validate[user].append(page_obj)
except KeyError:
pass
return proofread, validate, lastUpdate
def get_score(proofread, validate):
# Create empty dict for score
score = {}
for usern in proofread.keys():
score[usern] = {}
score[usern]["proofread"] = 0
score[usern]["validate"] = 0
for usern in validate.keys():
if usern not in score:
score[usern] = {}
score[usern]["proofread"] = 0
score[usern]["validate"] = 0
# Fill the score
for u in proofread:
score[u]["proofread"] = len(proofread[u])
for u in validate:
score[u]["validate"] = len(validate[u])
return score
def get_wikitable(score, point, lastUpdate, contest, id):
totalPoints = 0
totalPR = 0
totalVD = 0
wikitable = "{{Clickable button 2|Statistics on " + lastUpdate + \
"|class=mw-ui-progressive|url=https://tools.wmflabs.org/indic-wscontest/contest/" + str(id) + "}}\n\n"
wikitable += "'''Proofread point''': " + str(contest["p_points"]) + \
" and '''Validate point''': " + str(contest["v_points"])
wikitable += """
{| class="wikitable sortable"
|-
! User
! Proofread
! Validate
! Total Points"""
for user in score:
u_pts = (score[user]["proofread"] * point["p"]) + (score[user]["validate"] * point["v"])
totalPoints += u_pts
totalPR += score[user]['proofread']
totalVD += score[user]['validate']
wikitable += """\n|-
|%s || %d || %d || %d """ % (
"[[s:" + contest["project"] + ":User:" + user + "|" + user + "]]",
score[user]['proofread'],
score[user]['validate'],
u_pts
)
wikitable += "\n|}\n\n"
wikitable += """{| class="wikitable"
! <br> !! Index page !! Participant !! Proofread !! Validations !! Points
|-
| Total || %d || %d || %d || %d || %d
|}""" % (len(contest["index"]), len(score.keys()), totalPR, totalVD, totalPoints)
return wikitable
def _str(val):
"""
Ensures that the val is the default str() type for python2 or 3
"""
if str == bytes:
if isinstance(val, str):
return val
else:
return str(val)
else:
if isinstance(val, str):
return val
else:
return str(val, 'ascii')