1
+ from typing import List , Dict , Union
2
+ from canvasapi import Canvas
3
+ from config import PROD_KEY , PROD_URL
4
+ from pprint import pprint
5
+
6
+ # This is a script to grab and analyze assignment rubrics and assignment scores.
7
+
8
+ def build_assignment_rubric_results (canvas : Canvas , course_id : int , assignment_id : int ) -> List [Dict ]:
9
+ """ Look up rubric results for a specific Canvas assignment
10
+
11
+ :param canvas: <Canvas> instance
12
+ :param course_id: Valid Canvas course ID
13
+ :param assignment_id: Valid Canvas assignment ID
14
+
15
+ :return: Named dictionary of outcomes and rubric results for an assignment
16
+ :rtype: dict of list of ints
17
+ """
18
+ course = canvas .get_course (course_id )
19
+ assignment = course .get_assignment (assignment_id )
20
+
21
+ rubric = assignment .rubric
22
+
23
+ # build a list to use as headers in the view
24
+ columns = []
25
+
26
+ for criteria in rubric :
27
+ if "outcome_id" in criteria :
28
+
29
+ column = {}
30
+ column ["id" ] = criteria ["id" ]
31
+ column ["name" ] = criteria ["description" ]
32
+ column ["outcome_id" ] = criteria ["outcome_id" ]
33
+ columns .append (column )
34
+
35
+ # Create a list to store all results
36
+ student_results = get_assignment_scores (canvas , assignment )
37
+
38
+ return {"columns" : columns , "student_results" : student_results }
39
+
40
+ def get_assignment_scores (canvas , assignment ):
41
+ """ Request assignment scores from Canvas
42
+
43
+ :param assignment: <Assignment> instance
44
+ :type assignment: Class
45
+
46
+ :return: A list of student dicts with results for the assigment
47
+ :rtype: list of dict
48
+ """
49
+ student_results = []
50
+
51
+ # Get submissions for the assignment to get rubric evaluation
52
+ submissions = assignment .get_submissions (include = ("rubric_assessment" , "user" ))
53
+
54
+ for submission in list (submissions ):
55
+
56
+ student_result = {}
57
+ student_result ["id" ] = submission .user_id
58
+ student_result ["name" ] = submission .user ["sortable_name" ]
59
+ student_result ["score" ] = submission .score
60
+ if hasattr (submission , "rubric_assessment" ):
61
+ student_result ["rubric" ] = submission .rubric_assessment
62
+ student_results .append (student_result )
63
+
64
+ student_results = sorted (student_results , key = lambda x : x ["name" ].split (" " ))
65
+
66
+ return student_results
67
+
68
+ def main ():
69
+ canvas = Canvas (PROD_URL , PROD_KEY )
70
+
71
+ data = build_assignment_rubric_results (canvas , 36756 , 176135 )
72
+
73
+ pprint (data )
74
+
75
+ if __name__ == "__main__" :
76
+ main ()
0 commit comments