autograder.api.courses.gradebook.fetch

Fetch a gradebook for this course.

 1"""
 2Fetch a gradebook for this course.
 3"""
 4
 5import typing
 6
 7import lms.model.assignments
 8import lms.model.scores
 9import lms.model.users
10
11import autograder.api.common
12import autograder.api.config
13import autograder.model.assignment
14import autograder.model.config
15
16API_ENDPOINT: str = 'courses/gradebook/fetch'
17API_WRITE: bool = False
18API_PARAMS: typing.List[autograder.api.config.APIParam] = [
19    autograder.api.config.PARAM_SERVER,
20    autograder.api.config.PARAM_USER_EMAIL,
21    autograder.api.config.PARAM_USER_PASS,
22
23    autograder.api.config.PARAM_COURSE,
24
25    autograder.api.config.PARAM_COURSE_USER_REFERENCES,
26    autograder.api.config.PARAM_TARGET_ASSIGNMENTS,
27]
28
29def send(config: autograder.model.config.Config, **kwargs: typing.Any) -> lms.model.scores.Gradebook:
30    """ Send a request to the autograder. """
31
32    response = autograder.api.common.make_api_request(API_ENDPOINT, config, API_PARAMS, write = API_WRITE, **kwargs)
33
34    assignment_queries: typing.List[lms.model.assignments.AssignmentQuery] = []
35    user_queries: typing.List[lms.model.users.UserQuery] = []
36
37    for (assignment_id, user_scores) in response['gradebook'].items():
38        assignment_queries.append(lms.model.assignments.AssignmentQuery(id = assignment_id))
39        if (len(user_queries) == 0):
40            for user_email in user_scores:
41                user_queries.append(lms.model.users.UserQuery(id = user_email))
42
43    gradebook = lms.model.scores.Gradebook(assignment_queries, user_queries)
44
45    for user_scores in response['gradebook'].values():
46        for raw_score in user_scores.values():
47            if (raw_score is not None):
48                score = autograder.model.assignment.make_assignment_score(raw_score)
49                score.user = lms.model.users.UserQuery(id = raw_score['user'])
50                gradebook.add(score)
51
52    return gradebook
API_ENDPOINT: str = 'courses/gradebook/fetch'
API_WRITE: bool = False
def send( config: autograder.model.config.Config, **kwargs: Any) -> lms.model.scores.Gradebook:
30def send(config: autograder.model.config.Config, **kwargs: typing.Any) -> lms.model.scores.Gradebook:
31    """ Send a request to the autograder. """
32
33    response = autograder.api.common.make_api_request(API_ENDPOINT, config, API_PARAMS, write = API_WRITE, **kwargs)
34
35    assignment_queries: typing.List[lms.model.assignments.AssignmentQuery] = []
36    user_queries: typing.List[lms.model.users.UserQuery] = []
37
38    for (assignment_id, user_scores) in response['gradebook'].items():
39        assignment_queries.append(lms.model.assignments.AssignmentQuery(id = assignment_id))
40        if (len(user_queries) == 0):
41            for user_email in user_scores:
42                user_queries.append(lms.model.users.UserQuery(id = user_email))
43
44    gradebook = lms.model.scores.Gradebook(assignment_queries, user_queries)
45
46    for user_scores in response['gradebook'].values():
47        for raw_score in user_scores.values():
48            if (raw_score is not None):
49                score = autograder.model.assignment.make_assignment_score(raw_score)
50                score.user = lms.model.users.UserQuery(id = raw_score['user'])
51                gradebook.add(score)
52
53    return gradebook

Send a request to the autograder.