Skip to content

Commit 2a0401e

Browse files
ignore another directory
1 parent 6ac6028 commit 2a0401e

File tree

2 files changed

+81
-0
lines changed

2 files changed

+81
-0
lines changed

.gitignore

+5
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,11 @@ wheels/
2424
*.egg-info/
2525
.installed.cfg
2626
*.egg
27+
.vscode
28+
29+
# Other directories
30+
/subaccount_csv
31+
/csv
2732

2833
# PyInstaller
2934
# Usually these files are written by a python script from a template

assignment_rubrics.py

+76
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
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

Comments
 (0)