From 126a4e5114be8a2f31d3325f001bc4cc68b42fcf Mon Sep 17 00:00:00 2001 From: BoYanZh <32470225+BoYanZh@users.noreply.github.com> Date: Fri, 2 Oct 2020 02:10:00 +0800 Subject: Initial commit --- worker/CanvasWorker.py | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 worker/CanvasWorker.py (limited to 'worker/CanvasWorker.py') diff --git a/worker/CanvasWorker.py b/worker/CanvasWorker.py new file mode 100644 index 0000000..1d86189 --- /dev/null +++ b/worker/CanvasWorker.py @@ -0,0 +1,67 @@ +from canvasapi import Canvas +from util import first, Logger +import json + + +class CanvasWorker(): + def __init__(self, + args, + rubric, + canvasToken, + courseID, + indvScores, + groupScores, + jojScores, + logger=Logger()): + self.args = args + self.rubric = rubric + self.canvas = Canvas("https://umjicanvas.com/", canvasToken) + self.course = self.canvas.get_course(courseID) + self.users = self.course.get_users() + self.assignments = self.course.get_assignments() + self.logger = logger + if not indvScores or not groupScores or not jojScores: + raise Exception("Not enough scores") + self.scores = indvScores + for key, value in self.scores.items(): + self.scores[key] = { + **value, + **groupScores[key], + **jojScores[key] + } + + def generateHomeworkData(self, scoreInfo): + score = 0 + comment = [] + for key, value in self.rubric: + for _ in range(scoreInfo[key]): + score -= value[0] + comment.append(value[1]) + if not comment: comment = ['good job'] + return { + 'submission': { + 'posted_grade': score + }, + 'comment': { + 'text_comment': '\n'.join(comment) + }, + } + + def grade2Canvas(self): + hwNum = self.args.hw + assignment = first(self.assignments, + lambda x: x.name.startswith(f"h{hwNum}")) + for submission in assignment.get_submissions(): + currentUser = first(self.users, + lambda user: user.id == submission.user_id) + if currentUser is None: continue + name = currentUser.name.strip() + data = self.generateHomeworkData(self.scores[name]) + submission.edit(**data) + + def exportScores(self, fileName): + json.dump(self.scores, + open(fileName, "w"), + ensure_ascii=False, + indent=4) + self.logger.debug("score dump to score.json succeed") \ No newline at end of file -- cgit v1.2.3