lms.backend.canvas.courses.assignments.scores.upload

 1import typing
 2
 3import lms.backend.canvas.common
 4import lms.model.constants
 5import lms.model.scores
 6
 7BASE_ENDPOINT = "/api/v1/courses/{course_id}/assignments/{assignment_id}/submissions/update_grades"
 8
 9def request(backend: typing.Any,
10        course_id: int,
11        assignment_id: int,
12        scores: typing.Dict[int, lms.model.scores.ScoreFragment],
13        ) -> int:
14    """ Upload scores and return the number of scores sent. """
15
16    if (len(scores) == 0):
17        return 0
18
19    url = backend.server + BASE_ENDPOINT.format(course_id = course_id, assignment_id = assignment_id)
20    headers = backend.get_standard_headers()
21
22    headers[lms.model.constants.HEADER_KEY_WRITE] = 'true'
23
24    data = {}
25    for (user_id, score) in scores.items():
26        text_score = ''
27        if (score.score is not None):
28            text_score = str(score.score)
29
30        data[f"grade_data[{user_id}][posted_grade]"] = text_score
31
32        if ((score.comment is not None) and (len(score.comment) > 0)):
33            data[f"grade_data[{user_id}][text_comment]"] = score.comment
34
35    response = lms.backend.canvas.common.make_post_request(url, headers = headers, data = data)
36    if (response is None):
37        return 0
38
39    return len(scores)
BASE_ENDPOINT = '/api/v1/courses/{course_id}/assignments/{assignment_id}/submissions/update_grades'
def request( backend: Any, course_id: int, assignment_id: int, scores: Dict[int, lms.model.scores.ScoreFragment]) -> int:
10def request(backend: typing.Any,
11        course_id: int,
12        assignment_id: int,
13        scores: typing.Dict[int, lms.model.scores.ScoreFragment],
14        ) -> int:
15    """ Upload scores and return the number of scores sent. """
16
17    if (len(scores) == 0):
18        return 0
19
20    url = backend.server + BASE_ENDPOINT.format(course_id = course_id, assignment_id = assignment_id)
21    headers = backend.get_standard_headers()
22
23    headers[lms.model.constants.HEADER_KEY_WRITE] = 'true'
24
25    data = {}
26    for (user_id, score) in scores.items():
27        text_score = ''
28        if (score.score is not None):
29            text_score = str(score.score)
30
31        data[f"grade_data[{user_id}][posted_grade]"] = text_score
32
33        if ((score.comment is not None) and (len(score.comment) > 0)):
34            data[f"grade_data[{user_id}][text_comment]"] = score.comment
35
36    response = lms.backend.canvas.common.make_post_request(url, headers = headers, data = data)
37    if (response is None):
38        return 0
39
40    return len(scores)

Upload scores and return the number of scores sent.