-
Notifications
You must be signed in to change notification settings - Fork 1
/
graph_grades.py
119 lines (85 loc) · 3.58 KB
/
graph_grades.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
#!/usr/bin/env python
# based on https://github.com/BenDoan/Infinite-Campus-Grade-Scraper
import json
import os
from drawille import Canvas
from colorama import Fore, Style
from colorama import init
init()
_, terminal_columns = os.popen('stty size', 'r').read().split()
terminal_columns = int(terminal_columns)-1
def main():
last_graph_y = None
with open('grades_db.json', 'r') as db:
grades = json.loads(db.read())
headers = []
spacing_formats = []
color_formats = []
headers.append('%')
spacing_formats.append('{: <7}')
color_formats.append('\033[0;32m' + '{}' + Style.RESET_ALL + Fore.RESET)
headers.append('assignment')
spacing_formats.append('{: <50}')
color_formats.append('\033[0;33m' + '{}' + Style.RESET_ALL + Fore.RESET)
headers.append('multiplier')
spacing_formats.append('{: <12}')
color_formats.append(
Style.DIM + '\033[2;34m' + '{}' + Style.RESET_ALL + Fore.RESET)
headers.append('score')
spacing_formats.append('{: <8}')
color_formats.append(Fore.MAGENTA + '{}' + Style.RESET_ALL + Fore.RESET)
headers.append('out of')
spacing_formats.append('{: <8}')
color_formats.append(Fore.MAGENTA + '{}' + Style.RESET_ALL + Fore.RESET)
headers.append('due')
spacing_formats.append('{: <11}')
color_formats.append(Style.DIM + '{}' + Style.RESET_ALL + Fore.RESET)
headers.append('assigned')
spacing_formats.append('{: <11}')
color_formats.append(Style.DIM + '{}' + Style.RESET_ALL + Fore.RESET)
for class_name in grades:
class_ = grades[class_name]
teacher = class_['teacher']
grade = class_['grade']
print '\033[4;36m' + class_name + Fore.RESET + Style.RESET_ALL
print '\033[2;4;36m' + teacher + Fore.RESET + Style.RESET_ALL
print '\033[34m' + str(grade) + Fore.RESET + Style.RESET_ALL
print ''
if grade is 'None':
print '\n' * 2
continue
print Style.BRIGHT + ' '.join(spacing_formats).format(*headers) + Style.RESET_ALL
print ''
for section_name in class_['sections']:
section = class_['sections'][section_name]
c = Canvas()
x = 0
print ('\033[4;31m' + section_name +
Style.RESET_ALL).ljust(60) + ' - ' + section['weight'] + '%'
graph_spacing = int(terminal_columns/len(section['assignments']))*2
for assignment in section['assignments']:
data_columns = assignment
data_values = [data_columns[key] for key in headers]
try:
val = 100 - float(data_columns['%'])
if last_graph_y is not None:
diff = last_graph_y - val
for x_ in range((x - 1) * graph_spacing, x * graph_spacing):
progress = x_ - x * graph_spacing
c.set(x_, val - diff * progress / graph_spacing)
# pass
c.set(x * graph_spacing, val)
last_graph_y = val
except:
pass
x += 1
for value, color_format, spacing_format in zip(data_values,
spacing_formats,
color_formats):
print spacing_format.format(color_format.format(value)),
print ''
print ''
print(c.frame())
print '\n' * 2
if __name__ == '__main__':
main()