-
Notifications
You must be signed in to change notification settings - Fork 0
/
core_logic.py
178 lines (133 loc) · 5.86 KB
/
core_logic.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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
from canvasapi import Canvas
from student import student
from peer_review_class import peer_review
import json
from peer_review_statistics_class import Statistics
def get_courses(user):
return user.get_courses()
def get_favorite_courses(user):
return user.get_favorite_courses()
def get_course(canvas: Canvas, course_id):
return canvas.get_course(course_id)
def get_assignments(course):
return course.get_assignments()
def get_assignment(course,assignment_id):
return course.get_assignment(assignment_id)
def print_assignments(assignments):
print('\nAssignments:')
i = 1
for assignment in assignments:
print(i, ')', assignment.name, assignment.id)
i = i + 1
def print_courses(courses):
i = 1
print("Courses:")
for course in courses:
try:
print(i, ')', course.name, "course id :", course.id)
i = i + 1
except AttributeError:
pass
def print_favorite_courses(courses):
print("Favorite Courses:")
i = 1
for course in courses:
try:
print(i, ')', course.name, "course id :", course.id)
i = i + 1
except AttributeError:
pass
def get_students(course):
return course.get_users(enrollment_type='student')
def get_peer_reviews(assignment):
return assignment.get_peer_reviews()
def get_rubric(course,assignment_id):
rubric = course.get_rubrics(rubric_association_id= assignment_id, include=["peer_assessments"], style="full")[0]
rubric_id = rubric.id
rubric = course.get_rubric(rubric_id, include=["peer_assessments"], style="full")
return rubric
def make_students_dict(students,course, assignment, reviews, rubric):
students_dict = {}
for s in students :
students_dict[s.id] = (student(s.id,course,assignment, s.name,s.login_id))
submissions_dict = make_submissions_dict(assignment)
update_peer_reviews(reviews, students_dict, course, submissions_dict, rubric)
return students_dict
def make_submissions_dict(assignment):
submissions = assignment.get_submissions()
submissions_dict = {}
for s in submissions :
submissions_dict[s.user_id]= s
return submissions_dict
def generate_csv(students_dict,assignment_id):
f = open(str(assignment_id) + "_peer_review.csv", "w+")
f.write("student,id,SIS login ID,peer_reviews_assigned,peer_reviews_completed\n")
for s in students_dict.values():
f.write(str(s.name)+",")
f.write(str(s.id)+",")
f.write(str(s.login_id) + ",")
f.write(str(s.number_of_reviews_assigned)+",")
f.write(str(s.peer_reviews_completed)+"\n")
def update_peer_reviews(reviews, students_dict, course,submissions_dict,rubric):
for review in reviews:
grader = students_dict[review.assessor_id]
students_dict[review.assessor_id].peer_reviews.append(peer_review(course, submissions_dict[review.user_id], grader.id, rubric))
students_dict[review.user_id].peer_reviews_received.append(peer_review(course, submissions_dict[review.user_id], grader.id, rubric))
if review.workflow_state == 'completed':
students_dict[review.assessor_id].peer_reviews_completed = students_dict[review.assessor_id].peer_reviews_completed + 1
students_dict[review.assessor_id].number_of_reviews_assigned= students_dict[review.assessor_id].number_of_reviews_assigned + 1
students_dict[review.assessor_id].peer_reviews[-1].work_flow = review.workflow_state
students_dict[review.user_id].peer_reviews_received[-1].work_flow = review.workflow_state
def export_statistics(students_dict,rubric):
statistics = []
i = 0
for s in students_dict.values():
statistics.append({})
stats = Statistics(s,rubric)
statistics[i]["name"] = s.name
statistics[i]["id"] = s.id
statistics[i]["statistics as student "] = stats.received_statistics
statistics[i]["statistics as reviewer"] = stats.reviewer_statistics
i = i + 1
json_object = json.dumps(statistics)
print(json_object)
with open("stats.json", "w") as outfile:
outfile.write(json_object)
def creat_new_assignment(reference_assignment,course,students_dict):
assignment = {}
name = ("Peer Review For "+ reference_assignment.name)
number_of_times_name_used = 0
assignments = course.get_assignments()
for a in assignments:
if name in a.name:
number_of_times_name_used = number_of_times_name_used + 1
if number_of_times_name_used > 0:
name = ("Peer Review For " + reference_assignment.name) + "(" + str(number_of_times_name_used) + ")"
assignment['name'] = name
assignment['published'] = True
new_assignment = course.create_assignment(assignment)
new_assignment.submissions_bulk_update(grade_data= make_grade_dictionary(students_dict))
def make_grade_dictionary(students_dict):
grades_dict = {}
for s in students_dict.values():
grades_dict[s.id] = {'posted_grade' : s.peer_reviews_completed/s.number_of_reviews_assigned}
return grades_dict
def assignment_already_graded(assignment):
submissions = assignment.get_submissions()
for s in submissions:
if s.score:
return True
else:
return False
def upload_grades(assignment, grade_dict):
#if they do it on an unpublished assignment then publish it and put in the grades otherwise check the two conditions : attempts and existing grades
if assignment_already_graded(assignment):
inp = input("This assignment has existing grades; Are you sure you want to overwrite the grades? ").strip()
if inp == 'n' or inp == 'no':
return
elif inp == 'y' or inp == 'yes':
assignment.submissions_bulk_update(grade_data=grade_dict)
print("assignment graded.\n")
else:
assignment.submissions_bulk_update(grade_data=grade_dict)
print("assignment graded.\n")