lms.backend.canvas.courses.gradebook.fetch
1import typing 2 3import lms.backend.canvas.common 4import lms.backend.canvas.model 5import lms.model.assignments 6import lms.model.scores 7import lms.model.users 8 9BASE_ENDPOINT = "/api/v1/courses/{course_id}/students/submissions" 10 11def request(backend: typing.Any, 12 course_id: int, 13 assignment_ids: typing.List[int], 14 user_ids: typing.List[int], 15 ) -> lms.model.scores.Gradebook: 16 """ Fetch a gradebook for the given users and assignments. """ 17 18 url = backend.server + BASE_ENDPOINT.format(course_id = course_id) 19 headers = backend.get_standard_headers() 20 21 data = { 22 'per_page': lms.backend.canvas.common.DEFAULT_PAGE_SIZE, 23 'assignment_ids[]': [str(assignment_id) for assignment_id in assignment_ids], 24 'student_ids[]': 'all', 25 } 26 27 assignment_queries = [lms.model.assignments.AssignmentQuery(id = id) for id in assignment_ids] 28 user_queries = [lms.model.users.UserQuery(id = id) for id in user_ids] 29 gradebook = lms.model.scores.Gradebook(assignment_queries, user_queries) 30 31 raw_objects = lms.backend.canvas.common.make_get_request_list(url, headers = headers, data = data) 32 if (raw_objects is None): 33 identifiers = { 34 'course_id': course_id, 35 'assignment_ids': assignment_ids, 36 'user_ids': user_ids, 37 } 38 backend.not_found('fetch gradebook', identifiers) 39 40 return gradebook 41 42 for raw_object in raw_objects: 43 # Check if this is an actual submission and not just a placeholder. 44 if (raw_object.get('workflow_state', None) == 'unsubmitted'): 45 continue 46 47 user_id = int(raw_object.get('user_id', -1)) 48 if ((len(user_ids) != 0) and (user_id not in user_ids)): 49 continue 50 51 gradebook.add(lms.backend.canvas.model.assignment_score(raw_object)) 52 53 return gradebook
BASE_ENDPOINT =
'/api/v1/courses/{course_id}/students/submissions'
def
request( backend: Any, course_id: int, assignment_ids: List[int], user_ids: List[int]) -> lms.model.scores.Gradebook:
12def request(backend: typing.Any, 13 course_id: int, 14 assignment_ids: typing.List[int], 15 user_ids: typing.List[int], 16 ) -> lms.model.scores.Gradebook: 17 """ Fetch a gradebook for the given users and assignments. """ 18 19 url = backend.server + BASE_ENDPOINT.format(course_id = course_id) 20 headers = backend.get_standard_headers() 21 22 data = { 23 'per_page': lms.backend.canvas.common.DEFAULT_PAGE_SIZE, 24 'assignment_ids[]': [str(assignment_id) for assignment_id in assignment_ids], 25 'student_ids[]': 'all', 26 } 27 28 assignment_queries = [lms.model.assignments.AssignmentQuery(id = id) for id in assignment_ids] 29 user_queries = [lms.model.users.UserQuery(id = id) for id in user_ids] 30 gradebook = lms.model.scores.Gradebook(assignment_queries, user_queries) 31 32 raw_objects = lms.backend.canvas.common.make_get_request_list(url, headers = headers, data = data) 33 if (raw_objects is None): 34 identifiers = { 35 'course_id': course_id, 36 'assignment_ids': assignment_ids, 37 'user_ids': user_ids, 38 } 39 backend.not_found('fetch gradebook', identifiers) 40 41 return gradebook 42 43 for raw_object in raw_objects: 44 # Check if this is an actual submission and not just a placeholder. 45 if (raw_object.get('workflow_state', None) == 'unsubmitted'): 46 continue 47 48 user_id = int(raw_object.get('user_id', -1)) 49 if ((len(user_ids) != 0) and (user_id not in user_ids)): 50 continue 51 52 gradebook.add(lms.backend.canvas.model.assignment_score(raw_object)) 53 54 return gradebook
Fetch a gradebook for the given users and assignments.