This repository has been archived by the owner on Aug 20, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgrades.py
86 lines (66 loc) · 3.14 KB
/
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
import web
import model
from utilities import JsonBadRequest
import json
class Grades:
def GET(self):
model.insert_view(web.ctx.host + web.ctx.fullpath, web.ctx.status, web.ctx.ip, web.ctx.env['HTTP_USER_AGENT'] if 'HTTP_USER_AGENT' in web.ctx.env else None, "GET")
web.header('Content-Type', 'application/json')
web.header('Access-Control-Allow-Origin', '*')
data = web.input()
options = []
if not 'professor' in data and not 'course' in data:
raise JsonBadRequest("parameters must include at least one of: \"course\", \"professor\"")
if 'professor' in data:
professor_id = model.get_professor_id(data['professor'])
if not professor_id:
raise JsonBadRequest("professor not found")
options.append("professor_id = {}".format(professor_id))
if 'course' in data:
course_id = model.get_course_id(data['course'])
if not course_id:
raise JsonBadRequest("course not found")
options.append("course_id = {}".format(course_id))
if 'semester' in data:
possible_semesters = model.get_semesters()
if not data['semester'] in possible_semesters:
raise JsonBadRequest("invalid semester parameter; semester parameter must be one of the following: " + ', '.join(possible_semesters))
options.append("semester = '{}'".format(data['semester']))
if 'section' in data:
all_sections = model.get_sections()
# todo: more efficient way of doing this?
if not any(section['section'] == data['section'] for section in all_sections):
raise JsonBadRequest("invalid section; example of a valid section: 0101")
options.append("section = '{}'".format(data['section']))
options = ' AND '.join(options)
if options:
options = ' WHERE ' + options
grades = model.get_grades(options)
grades_data = []
for course_grade in grades:
if course_grade['department'] and course_grade['course_number']:
course = course_grade['department'] + course_grade['course_number']
else:
course = None
grades_data.append({
'course': course,
'professor': course_grade['name'],
'semester': course_grade['semester'],
'section': course_grade['section'],
'A+': course_grade['APLUS'],
'A': course_grade['A'],
'A-': course_grade['AMINUS'],
'B+': course_grade['BPLUS'],
'B': course_grade['B'],
'B-': course_grade['BMINUS'],
'C+': course_grade['CPLUS'],
'C': course_grade['C'],
'C-': course_grade['CMINUS'],
'D+': course_grade['DPLUS'],
'D': course_grade['D'],
'D-': course_grade['DMINUS'],
'F': course_grade['F'],
'W': course_grade['W'],
'Other': course_grade['OTHER']
})
return json.dumps(grades_data)