lms.backend.canvas.backend
1# pylint: disable=abstract-method 2 3import typing 4 5import lms.backend.canvas.courses.assignments.list 6import lms.backend.canvas.courses.assignments.scores.list 7import lms.backend.canvas.courses.assignments.scores.upload 8import lms.backend.canvas.courses.gradebook.fetch 9import lms.backend.canvas.courses.groupsets.create 10import lms.backend.canvas.courses.groupsets.delete 11import lms.backend.canvas.courses.groupsets.list 12import lms.backend.canvas.courses.groupsets.memberships.list 13import lms.backend.canvas.courses.groups.create 14import lms.backend.canvas.courses.groups.delete 15import lms.backend.canvas.courses.groups.list 16import lms.backend.canvas.courses.groups.memberships.add 17import lms.backend.canvas.courses.groups.memberships.list 18import lms.backend.canvas.courses.groups.memberships.subtract 19import lms.backend.canvas.courses.list 20import lms.backend.canvas.courses.syllabus.fetch 21import lms.backend.canvas.courses.users.list 22import lms.backend.canvas.courses.users.scores.list 23import lms.model.assignments 24import lms.model.backend 25import lms.model.constants 26import lms.model.courses 27import lms.model.groups 28import lms.model.groupsets 29import lms.model.scores 30import lms.model.users 31import lms.util.parse 32 33class CanvasBackend(lms.model.backend.APIBackend): 34 """ An API backend for Instructure's Canvas LMS. """ 35 36 def __init__(self, 37 server: str, 38 auth_token: typing.Union[str, None] = None, 39 **kwargs: typing.Any) -> None: 40 super().__init__(server, lms.model.constants.BACKEND_TYPE_CANVAS, **kwargs) 41 42 if (auth_token is None): 43 raise ValueError("Canvas backends require a token.") 44 45 self.auth_token: str = auth_token 46 """ The token to authenticate with. """ 47 48 def get_standard_headers(self) -> typing.Dict[str, str]: 49 headers = super().get_standard_headers() 50 51 headers['Authorization'] = f"Bearer {self.auth_token}" 52 53 return headers 54 55 def courses_list(self, 56 **kwargs: typing.Any) -> typing.List[lms.model.courses.Course]: 57 return lms.backend.canvas.courses.list.request(self) 58 59 def courses_assignments_list(self, 60 course_id: str, 61 **kwargs: typing.Any) -> typing.List[lms.model.assignments.Assignment]: 62 parsed_course_id = lms.util.parse.required_int(course_id, 'course_id') 63 return lms.backend.canvas.courses.assignments.list.request(self, parsed_course_id) 64 65 def courses_assignments_scores_list(self, 66 course_id: str, 67 assignment_id: str, 68 **kwargs: typing.Any) -> typing.List[lms.model.scores.AssignmentScore]: 69 parsed_course_id = lms.util.parse.required_int(course_id, 'course_id') 70 parsed_assignment_id = lms.util.parse.required_int(assignment_id, 'assignment_id') 71 return lms.backend.canvas.courses.assignments.scores.list.request(self, parsed_course_id, parsed_assignment_id) 72 73 def courses_assignments_scores_upload(self, 74 course_id: str, 75 assignment_id: str, 76 scores: typing.Dict[str, lms.model.scores.ScoreFragment], 77 **kwargs: typing.Any) -> int: 78 parsed_course_id = lms.util.parse.required_int(course_id, 'course_id') 79 parsed_assignment_id = lms.util.parse.required_int(assignment_id, 'assignment_id') 80 parsed_scores = {lms.util.parse.required_int(user_id, 'user_id'): score for (user_id, score) in scores.items()} 81 return lms.backend.canvas.courses.assignments.scores.upload.request(self, parsed_course_id, parsed_assignment_id, parsed_scores) 82 83 def courses_gradebook_fetch(self, 84 course_id: str, 85 assignment_ids: typing.Collection[str], 86 user_ids: typing.Collection[str], 87 **kwargs: typing.Any) -> lms.model.scores.Gradebook: 88 if ((len(assignment_ids) == 0) or (len(user_ids) == 0)): 89 assignment_queries = [lms.model.assignments.AssignmentQuery(id = id) for id in assignment_ids] 90 user_queries = [lms.model.users.UserQuery(id = id) for id in user_ids] 91 return lms.model.scores.Gradebook(assignment_queries, user_queries) 92 93 parsed_course_id = lms.util.parse.required_int(course_id, 'course_id') 94 parsed_assignment_ids = [lms.util.parse.required_int(assignment_id, 'assignment_id') for assignment_id in assignment_ids] 95 parsed_user_ids = [lms.util.parse.required_int(user_id, 'user_id') for user_id in user_ids] 96 97 return lms.backend.canvas.courses.gradebook.fetch.request(self, parsed_course_id, parsed_assignment_ids, parsed_user_ids) 98 99 def courses_groupsets_create(self, 100 course_id: str, 101 name: str, 102 **kwargs: typing.Any) -> lms.model.groupsets.GroupSet: 103 parsed_course_id = lms.util.parse.required_int(course_id, 'course_id') 104 return lms.backend.canvas.courses.groupsets.create.request(self, parsed_course_id, name) 105 106 def courses_groupsets_delete(self, 107 course_id: str, 108 groupset_id: str, 109 **kwargs: typing.Any) -> bool: 110 parsed_course_id = lms.util.parse.required_int(course_id, 'course_id') 111 parsed_groupset_id = lms.util.parse.required_int(groupset_id, 'groupset_id') 112 return lms.backend.canvas.courses.groupsets.delete.request(self, parsed_course_id, parsed_groupset_id) 113 114 def courses_groupsets_list(self, 115 course_id: str, 116 **kwargs: typing.Any) -> typing.List[lms.model.groupsets.GroupSet]: 117 parsed_course_id = lms.util.parse.required_int(course_id, 'course_id') 118 return lms.backend.canvas.courses.groupsets.list.request(self, parsed_course_id) 119 120 def courses_groupsets_memberships_list(self, 121 course_id: str, 122 groupset_id: str, 123 **kwargs: typing.Any) -> typing.List[lms.model.groupsets.GroupSetMembership]: 124 parsed_course_id = lms.util.parse.required_int(course_id, 'course_id') 125 parsed_groupset_id = lms.util.parse.required_int(groupset_id, 'groupset_id') 126 return lms.backend.canvas.courses.groupsets.memberships.list.request(self, parsed_course_id, parsed_groupset_id) 127 128 def courses_groups_create(self, 129 course_id: str, 130 groupset_id: str, 131 name: str, 132 **kwargs: typing.Any) -> lms.model.groups.Group: 133 parsed_course_id = lms.util.parse.required_int(course_id, 'course_id') 134 parsed_groupset_id = lms.util.parse.required_int(groupset_id, 'groupset_id') 135 return lms.backend.canvas.courses.groups.create.request(self, parsed_course_id, parsed_groupset_id, name) 136 137 def courses_groups_delete(self, 138 course_id: str, 139 groupset_id: str, 140 group_id: str, 141 **kwargs: typing.Any) -> bool: 142 parsed_course_id = lms.util.parse.required_int(course_id, 'course_id') 143 parsed_groupset_id = lms.util.parse.required_int(groupset_id, 'groupset_id') 144 parsed_group_id = lms.util.parse.required_int(group_id, 'group_id') 145 return lms.backend.canvas.courses.groups.delete.request(self, parsed_course_id, parsed_groupset_id, parsed_group_id) 146 147 def courses_groups_list(self, 148 course_id: str, 149 groupset_id: str, 150 **kwargs: typing.Any) -> typing.List[lms.model.groups.Group]: 151 parsed_course_id = lms.util.parse.required_int(course_id, 'course_id') 152 parsed_groupset_id = lms.util.parse.required_int(groupset_id, 'groupset_id') 153 return lms.backend.canvas.courses.groups.list.request(self, parsed_course_id, parsed_groupset_id) 154 155 def courses_groups_memberships_add(self, 156 course_id: str, 157 groupset_id: str, 158 group_id: str, 159 user_ids: typing.Collection[str], 160 **kwargs: typing.Any) -> int: 161 parsed_course_id = lms.util.parse.required_int(course_id, 'course_id') 162 parsed_groupset_id = lms.util.parse.required_int(groupset_id, 'groupset_id') 163 parsed_group_id = lms.util.parse.required_int(group_id, 'group_id') 164 parsed_user_ids = [lms.util.parse.required_int(user_id, 'user_id') for user_id in user_ids] 165 return lms.backend.canvas.courses.groups.memberships.add.request(self, parsed_course_id, parsed_groupset_id, parsed_group_id, parsed_user_ids) 166 167 def courses_groups_memberships_list(self, 168 course_id: str, 169 groupset_id: str, 170 group_id: str, 171 **kwargs: typing.Any) -> typing.List[lms.model.groupsets.GroupSetMembership]: 172 parsed_course_id = lms.util.parse.required_int(course_id, 'course_id') 173 parsed_groupset_id = lms.util.parse.required_int(groupset_id, 'groupset_id') 174 parsed_group_id = lms.util.parse.required_int(group_id, 'group_id') 175 return lms.backend.canvas.courses.groups.memberships.list.request(self, parsed_course_id, parsed_groupset_id, parsed_group_id) 176 177 def courses_groups_memberships_subtract(self, 178 course_id: str, 179 groupset_id: str, 180 group_id: str, 181 user_ids: typing.Collection[str], 182 **kwargs: typing.Any) -> int: 183 parsed_course_id = lms.util.parse.required_int(course_id, 'course_id') 184 parsed_groupset_id = lms.util.parse.required_int(groupset_id, 'groupset_id') 185 parsed_group_id = lms.util.parse.required_int(group_id, 'group_id') 186 parsed_user_ids = [lms.util.parse.required_int(user_id, 'user_id') for user_id in user_ids] 187 return lms.backend.canvas.courses.groups.memberships.subtract.request(self, 188 parsed_course_id, parsed_groupset_id, parsed_group_id, parsed_user_ids) 189 190 def courses_syllabus_fetch(self, 191 course_id: str, 192 **kwargs: typing.Any) -> typing.Union[str, None]: 193 parsed_course_id = lms.util.parse.required_int(course_id, 'course_id') 194 return lms.backend.canvas.courses.syllabus.fetch.request(self, parsed_course_id) 195 196 def courses_users_list(self, 197 course_id: str, 198 **kwargs: typing.Any) -> typing.List[lms.model.users.CourseUser]: 199 parsed_course_id = lms.util.parse.required_int(course_id, 'course_id') 200 return lms.backend.canvas.courses.users.list.request(self, parsed_course_id) 201 202 def courses_users_scores_list(self, 203 course_id: str, 204 user_id: str, 205 **kwargs: typing.Any) -> typing.List[lms.model.scores.AssignmentScore]: 206 parsed_course_id = lms.util.parse.required_int(course_id, 'course_id') 207 parsed_user_id = lms.util.parse.required_int(user_id, 'user_id') 208 return lms.backend.canvas.courses.users.scores.list.request(self, parsed_course_id, parsed_user_id)
34class CanvasBackend(lms.model.backend.APIBackend): 35 """ An API backend for Instructure's Canvas LMS. """ 36 37 def __init__(self, 38 server: str, 39 auth_token: typing.Union[str, None] = None, 40 **kwargs: typing.Any) -> None: 41 super().__init__(server, lms.model.constants.BACKEND_TYPE_CANVAS, **kwargs) 42 43 if (auth_token is None): 44 raise ValueError("Canvas backends require a token.") 45 46 self.auth_token: str = auth_token 47 """ The token to authenticate with. """ 48 49 def get_standard_headers(self) -> typing.Dict[str, str]: 50 headers = super().get_standard_headers() 51 52 headers['Authorization'] = f"Bearer {self.auth_token}" 53 54 return headers 55 56 def courses_list(self, 57 **kwargs: typing.Any) -> typing.List[lms.model.courses.Course]: 58 return lms.backend.canvas.courses.list.request(self) 59 60 def courses_assignments_list(self, 61 course_id: str, 62 **kwargs: typing.Any) -> typing.List[lms.model.assignments.Assignment]: 63 parsed_course_id = lms.util.parse.required_int(course_id, 'course_id') 64 return lms.backend.canvas.courses.assignments.list.request(self, parsed_course_id) 65 66 def courses_assignments_scores_list(self, 67 course_id: str, 68 assignment_id: str, 69 **kwargs: typing.Any) -> typing.List[lms.model.scores.AssignmentScore]: 70 parsed_course_id = lms.util.parse.required_int(course_id, 'course_id') 71 parsed_assignment_id = lms.util.parse.required_int(assignment_id, 'assignment_id') 72 return lms.backend.canvas.courses.assignments.scores.list.request(self, parsed_course_id, parsed_assignment_id) 73 74 def courses_assignments_scores_upload(self, 75 course_id: str, 76 assignment_id: str, 77 scores: typing.Dict[str, lms.model.scores.ScoreFragment], 78 **kwargs: typing.Any) -> int: 79 parsed_course_id = lms.util.parse.required_int(course_id, 'course_id') 80 parsed_assignment_id = lms.util.parse.required_int(assignment_id, 'assignment_id') 81 parsed_scores = {lms.util.parse.required_int(user_id, 'user_id'): score for (user_id, score) in scores.items()} 82 return lms.backend.canvas.courses.assignments.scores.upload.request(self, parsed_course_id, parsed_assignment_id, parsed_scores) 83 84 def courses_gradebook_fetch(self, 85 course_id: str, 86 assignment_ids: typing.Collection[str], 87 user_ids: typing.Collection[str], 88 **kwargs: typing.Any) -> lms.model.scores.Gradebook: 89 if ((len(assignment_ids) == 0) or (len(user_ids) == 0)): 90 assignment_queries = [lms.model.assignments.AssignmentQuery(id = id) for id in assignment_ids] 91 user_queries = [lms.model.users.UserQuery(id = id) for id in user_ids] 92 return lms.model.scores.Gradebook(assignment_queries, user_queries) 93 94 parsed_course_id = lms.util.parse.required_int(course_id, 'course_id') 95 parsed_assignment_ids = [lms.util.parse.required_int(assignment_id, 'assignment_id') for assignment_id in assignment_ids] 96 parsed_user_ids = [lms.util.parse.required_int(user_id, 'user_id') for user_id in user_ids] 97 98 return lms.backend.canvas.courses.gradebook.fetch.request(self, parsed_course_id, parsed_assignment_ids, parsed_user_ids) 99 100 def courses_groupsets_create(self, 101 course_id: str, 102 name: str, 103 **kwargs: typing.Any) -> lms.model.groupsets.GroupSet: 104 parsed_course_id = lms.util.parse.required_int(course_id, 'course_id') 105 return lms.backend.canvas.courses.groupsets.create.request(self, parsed_course_id, name) 106 107 def courses_groupsets_delete(self, 108 course_id: str, 109 groupset_id: str, 110 **kwargs: typing.Any) -> bool: 111 parsed_course_id = lms.util.parse.required_int(course_id, 'course_id') 112 parsed_groupset_id = lms.util.parse.required_int(groupset_id, 'groupset_id') 113 return lms.backend.canvas.courses.groupsets.delete.request(self, parsed_course_id, parsed_groupset_id) 114 115 def courses_groupsets_list(self, 116 course_id: str, 117 **kwargs: typing.Any) -> typing.List[lms.model.groupsets.GroupSet]: 118 parsed_course_id = lms.util.parse.required_int(course_id, 'course_id') 119 return lms.backend.canvas.courses.groupsets.list.request(self, parsed_course_id) 120 121 def courses_groupsets_memberships_list(self, 122 course_id: str, 123 groupset_id: str, 124 **kwargs: typing.Any) -> typing.List[lms.model.groupsets.GroupSetMembership]: 125 parsed_course_id = lms.util.parse.required_int(course_id, 'course_id') 126 parsed_groupset_id = lms.util.parse.required_int(groupset_id, 'groupset_id') 127 return lms.backend.canvas.courses.groupsets.memberships.list.request(self, parsed_course_id, parsed_groupset_id) 128 129 def courses_groups_create(self, 130 course_id: str, 131 groupset_id: str, 132 name: str, 133 **kwargs: typing.Any) -> lms.model.groups.Group: 134 parsed_course_id = lms.util.parse.required_int(course_id, 'course_id') 135 parsed_groupset_id = lms.util.parse.required_int(groupset_id, 'groupset_id') 136 return lms.backend.canvas.courses.groups.create.request(self, parsed_course_id, parsed_groupset_id, name) 137 138 def courses_groups_delete(self, 139 course_id: str, 140 groupset_id: str, 141 group_id: str, 142 **kwargs: typing.Any) -> bool: 143 parsed_course_id = lms.util.parse.required_int(course_id, 'course_id') 144 parsed_groupset_id = lms.util.parse.required_int(groupset_id, 'groupset_id') 145 parsed_group_id = lms.util.parse.required_int(group_id, 'group_id') 146 return lms.backend.canvas.courses.groups.delete.request(self, parsed_course_id, parsed_groupset_id, parsed_group_id) 147 148 def courses_groups_list(self, 149 course_id: str, 150 groupset_id: str, 151 **kwargs: typing.Any) -> typing.List[lms.model.groups.Group]: 152 parsed_course_id = lms.util.parse.required_int(course_id, 'course_id') 153 parsed_groupset_id = lms.util.parse.required_int(groupset_id, 'groupset_id') 154 return lms.backend.canvas.courses.groups.list.request(self, parsed_course_id, parsed_groupset_id) 155 156 def courses_groups_memberships_add(self, 157 course_id: str, 158 groupset_id: str, 159 group_id: str, 160 user_ids: typing.Collection[str], 161 **kwargs: typing.Any) -> int: 162 parsed_course_id = lms.util.parse.required_int(course_id, 'course_id') 163 parsed_groupset_id = lms.util.parse.required_int(groupset_id, 'groupset_id') 164 parsed_group_id = lms.util.parse.required_int(group_id, 'group_id') 165 parsed_user_ids = [lms.util.parse.required_int(user_id, 'user_id') for user_id in user_ids] 166 return lms.backend.canvas.courses.groups.memberships.add.request(self, parsed_course_id, parsed_groupset_id, parsed_group_id, parsed_user_ids) 167 168 def courses_groups_memberships_list(self, 169 course_id: str, 170 groupset_id: str, 171 group_id: str, 172 **kwargs: typing.Any) -> typing.List[lms.model.groupsets.GroupSetMembership]: 173 parsed_course_id = lms.util.parse.required_int(course_id, 'course_id') 174 parsed_groupset_id = lms.util.parse.required_int(groupset_id, 'groupset_id') 175 parsed_group_id = lms.util.parse.required_int(group_id, 'group_id') 176 return lms.backend.canvas.courses.groups.memberships.list.request(self, parsed_course_id, parsed_groupset_id, parsed_group_id) 177 178 def courses_groups_memberships_subtract(self, 179 course_id: str, 180 groupset_id: str, 181 group_id: str, 182 user_ids: typing.Collection[str], 183 **kwargs: typing.Any) -> int: 184 parsed_course_id = lms.util.parse.required_int(course_id, 'course_id') 185 parsed_groupset_id = lms.util.parse.required_int(groupset_id, 'groupset_id') 186 parsed_group_id = lms.util.parse.required_int(group_id, 'group_id') 187 parsed_user_ids = [lms.util.parse.required_int(user_id, 'user_id') for user_id in user_ids] 188 return lms.backend.canvas.courses.groups.memberships.subtract.request(self, 189 parsed_course_id, parsed_groupset_id, parsed_group_id, parsed_user_ids) 190 191 def courses_syllabus_fetch(self, 192 course_id: str, 193 **kwargs: typing.Any) -> typing.Union[str, None]: 194 parsed_course_id = lms.util.parse.required_int(course_id, 'course_id') 195 return lms.backend.canvas.courses.syllabus.fetch.request(self, parsed_course_id) 196 197 def courses_users_list(self, 198 course_id: str, 199 **kwargs: typing.Any) -> typing.List[lms.model.users.CourseUser]: 200 parsed_course_id = lms.util.parse.required_int(course_id, 'course_id') 201 return lms.backend.canvas.courses.users.list.request(self, parsed_course_id) 202 203 def courses_users_scores_list(self, 204 course_id: str, 205 user_id: str, 206 **kwargs: typing.Any) -> typing.List[lms.model.scores.AssignmentScore]: 207 parsed_course_id = lms.util.parse.required_int(course_id, 'course_id') 208 parsed_user_id = lms.util.parse.required_int(user_id, 'user_id') 209 return lms.backend.canvas.courses.users.scores.list.request(self, parsed_course_id, parsed_user_id)
An API backend for Instructure's Canvas LMS.
37 def __init__(self, 38 server: str, 39 auth_token: typing.Union[str, None] = None, 40 **kwargs: typing.Any) -> None: 41 super().__init__(server, lms.model.constants.BACKEND_TYPE_CANVAS, **kwargs) 42 43 if (auth_token is None): 44 raise ValueError("Canvas backends require a token.") 45 46 self.auth_token: str = auth_token 47 """ The token to authenticate with. """
49 def get_standard_headers(self) -> typing.Dict[str, str]: 50 headers = super().get_standard_headers() 51 52 headers['Authorization'] = f"Bearer {self.auth_token}" 53 54 return headers
Get standard headers for this backend. Children should take care to set the write header when performing a write operation.
56 def courses_list(self, 57 **kwargs: typing.Any) -> typing.List[lms.model.courses.Course]: 58 return lms.backend.canvas.courses.list.request(self)
List the courses associated with the context user.
60 def courses_assignments_list(self, 61 course_id: str, 62 **kwargs: typing.Any) -> typing.List[lms.model.assignments.Assignment]: 63 parsed_course_id = lms.util.parse.required_int(course_id, 'course_id') 64 return lms.backend.canvas.courses.assignments.list.request(self, parsed_course_id)
List the assignments associated with the given course.
66 def courses_assignments_scores_list(self, 67 course_id: str, 68 assignment_id: str, 69 **kwargs: typing.Any) -> typing.List[lms.model.scores.AssignmentScore]: 70 parsed_course_id = lms.util.parse.required_int(course_id, 'course_id') 71 parsed_assignment_id = lms.util.parse.required_int(assignment_id, 'assignment_id') 72 return lms.backend.canvas.courses.assignments.scores.list.request(self, parsed_course_id, parsed_assignment_id)
List the scores associated with the given assignment.
74 def courses_assignments_scores_upload(self, 75 course_id: str, 76 assignment_id: str, 77 scores: typing.Dict[str, lms.model.scores.ScoreFragment], 78 **kwargs: typing.Any) -> int: 79 parsed_course_id = lms.util.parse.required_int(course_id, 'course_id') 80 parsed_assignment_id = lms.util.parse.required_int(assignment_id, 'assignment_id') 81 parsed_scores = {lms.util.parse.required_int(user_id, 'user_id'): score for (user_id, score) in scores.items()} 82 return lms.backend.canvas.courses.assignments.scores.upload.request(self, parsed_course_id, parsed_assignment_id, parsed_scores)
Upload assignment scores (indexed by user id). A None score (ScoreFragment.score) indicates that the score should be cleared. Return the number of scores sent to the LMS.
84 def courses_gradebook_fetch(self, 85 course_id: str, 86 assignment_ids: typing.Collection[str], 87 user_ids: typing.Collection[str], 88 **kwargs: typing.Any) -> lms.model.scores.Gradebook: 89 if ((len(assignment_ids) == 0) or (len(user_ids) == 0)): 90 assignment_queries = [lms.model.assignments.AssignmentQuery(id = id) for id in assignment_ids] 91 user_queries = [lms.model.users.UserQuery(id = id) for id in user_ids] 92 return lms.model.scores.Gradebook(assignment_queries, user_queries) 93 94 parsed_course_id = lms.util.parse.required_int(course_id, 'course_id') 95 parsed_assignment_ids = [lms.util.parse.required_int(assignment_id, 'assignment_id') for assignment_id in assignment_ids] 96 parsed_user_ids = [lms.util.parse.required_int(user_id, 'user_id') for user_id in user_ids] 97 98 return lms.backend.canvas.courses.gradebook.fetch.request(self, parsed_course_id, parsed_assignment_ids, parsed_user_ids)
Get a gradebook with the specified users and assignments. If either the assignments or users is empty, an empty gradebook will be returned.
100 def courses_groupsets_create(self, 101 course_id: str, 102 name: str, 103 **kwargs: typing.Any) -> lms.model.groupsets.GroupSet: 104 parsed_course_id = lms.util.parse.required_int(course_id, 'course_id') 105 return lms.backend.canvas.courses.groupsets.create.request(self, parsed_course_id, name)
Create a group set.
107 def courses_groupsets_delete(self, 108 course_id: str, 109 groupset_id: str, 110 **kwargs: typing.Any) -> bool: 111 parsed_course_id = lms.util.parse.required_int(course_id, 'course_id') 112 parsed_groupset_id = lms.util.parse.required_int(groupset_id, 'groupset_id') 113 return lms.backend.canvas.courses.groupsets.delete.request(self, parsed_course_id, parsed_groupset_id)
Delete a group set.
115 def courses_groupsets_list(self, 116 course_id: str, 117 **kwargs: typing.Any) -> typing.List[lms.model.groupsets.GroupSet]: 118 parsed_course_id = lms.util.parse.required_int(course_id, 'course_id') 119 return lms.backend.canvas.courses.groupsets.list.request(self, parsed_course_id)
List the group sets associated with the given course.
121 def courses_groupsets_memberships_list(self, 122 course_id: str, 123 groupset_id: str, 124 **kwargs: typing.Any) -> typing.List[lms.model.groupsets.GroupSetMembership]: 125 parsed_course_id = lms.util.parse.required_int(course_id, 'course_id') 126 parsed_groupset_id = lms.util.parse.required_int(groupset_id, 'groupset_id') 127 return lms.backend.canvas.courses.groupsets.memberships.list.request(self, parsed_course_id, parsed_groupset_id)
List the membership of the group sets associated with the given course.
129 def courses_groups_create(self, 130 course_id: str, 131 groupset_id: str, 132 name: str, 133 **kwargs: typing.Any) -> lms.model.groups.Group: 134 parsed_course_id = lms.util.parse.required_int(course_id, 'course_id') 135 parsed_groupset_id = lms.util.parse.required_int(groupset_id, 'groupset_id') 136 return lms.backend.canvas.courses.groups.create.request(self, parsed_course_id, parsed_groupset_id, name)
Create a group.
138 def courses_groups_delete(self, 139 course_id: str, 140 groupset_id: str, 141 group_id: str, 142 **kwargs: typing.Any) -> bool: 143 parsed_course_id = lms.util.parse.required_int(course_id, 'course_id') 144 parsed_groupset_id = lms.util.parse.required_int(groupset_id, 'groupset_id') 145 parsed_group_id = lms.util.parse.required_int(group_id, 'group_id') 146 return lms.backend.canvas.courses.groups.delete.request(self, parsed_course_id, parsed_groupset_id, parsed_group_id)
Delete a group.
148 def courses_groups_list(self, 149 course_id: str, 150 groupset_id: str, 151 **kwargs: typing.Any) -> typing.List[lms.model.groups.Group]: 152 parsed_course_id = lms.util.parse.required_int(course_id, 'course_id') 153 parsed_groupset_id = lms.util.parse.required_int(groupset_id, 'groupset_id') 154 return lms.backend.canvas.courses.groups.list.request(self, parsed_course_id, parsed_groupset_id)
List the groups associated with the given course.
156 def courses_groups_memberships_add(self, 157 course_id: str, 158 groupset_id: str, 159 group_id: str, 160 user_ids: typing.Collection[str], 161 **kwargs: typing.Any) -> int: 162 parsed_course_id = lms.util.parse.required_int(course_id, 'course_id') 163 parsed_groupset_id = lms.util.parse.required_int(groupset_id, 'groupset_id') 164 parsed_group_id = lms.util.parse.required_int(group_id, 'group_id') 165 parsed_user_ids = [lms.util.parse.required_int(user_id, 'user_id') for user_id in user_ids] 166 return lms.backend.canvas.courses.groups.memberships.add.request(self, parsed_course_id, parsed_groupset_id, parsed_group_id, parsed_user_ids)
Add the specified users to the group.
168 def courses_groups_memberships_list(self, 169 course_id: str, 170 groupset_id: str, 171 group_id: str, 172 **kwargs: typing.Any) -> typing.List[lms.model.groupsets.GroupSetMembership]: 173 parsed_course_id = lms.util.parse.required_int(course_id, 'course_id') 174 parsed_groupset_id = lms.util.parse.required_int(groupset_id, 'groupset_id') 175 parsed_group_id = lms.util.parse.required_int(group_id, 'group_id') 176 return lms.backend.canvas.courses.groups.memberships.list.request(self, parsed_course_id, parsed_groupset_id, parsed_group_id)
List the membership of the group associated with the given group set.
178 def courses_groups_memberships_subtract(self, 179 course_id: str, 180 groupset_id: str, 181 group_id: str, 182 user_ids: typing.Collection[str], 183 **kwargs: typing.Any) -> int: 184 parsed_course_id = lms.util.parse.required_int(course_id, 'course_id') 185 parsed_groupset_id = lms.util.parse.required_int(groupset_id, 'groupset_id') 186 parsed_group_id = lms.util.parse.required_int(group_id, 'group_id') 187 parsed_user_ids = [lms.util.parse.required_int(user_id, 'user_id') for user_id in user_ids] 188 return lms.backend.canvas.courses.groups.memberships.subtract.request(self, 189 parsed_course_id, parsed_groupset_id, parsed_group_id, parsed_user_ids)
Subtract the specified users from the group.
191 def courses_syllabus_fetch(self, 192 course_id: str, 193 **kwargs: typing.Any) -> typing.Union[str, None]: 194 parsed_course_id = lms.util.parse.required_int(course_id, 'course_id') 195 return lms.backend.canvas.courses.syllabus.fetch.request(self, parsed_course_id)
Get the syllabus for a course, or None if no syllabus exists.
197 def courses_users_list(self, 198 course_id: str, 199 **kwargs: typing.Any) -> typing.List[lms.model.users.CourseUser]: 200 parsed_course_id = lms.util.parse.required_int(course_id, 'course_id') 201 return lms.backend.canvas.courses.users.list.request(self, parsed_course_id)
List the users associated with the given course.
203 def courses_users_scores_list(self, 204 course_id: str, 205 user_id: str, 206 **kwargs: typing.Any) -> typing.List[lms.model.scores.AssignmentScore]: 207 parsed_course_id = lms.util.parse.required_int(course_id, 'course_id') 208 parsed_user_id = lms.util.parse.required_int(user_id, 'user_id') 209 return lms.backend.canvas.courses.users.scores.list.request(self, parsed_course_id, parsed_user_id)
List the scores associated with the given user.
Inherited Members
- lms.model.backend.APIBackend
- server
- backend_type
- testing
- is_testing
- not_found
- courses_get
- courses_fetch
- courses_assignments_get
- courses_assignments_fetch
- courses_assignments_resolve_and_list
- courses_assignments_scores_get
- courses_assignments_scores_fetch
- courses_assignments_scores_resolve_and_list
- courses_assignments_scores_resolve_and_upload
- courses_gradebook_get
- courses_gradebook_list
- courses_gradebook_resolve_and_list
- courses_gradebook_resolve_and_upload
- courses_gradebook_upload
- courses_groupsets_resolve_and_create
- courses_groupsets_resolve_and_delete
- courses_groupsets_get
- courses_groupsets_fetch
- courses_groupsets_resolve_and_list
- courses_groupsets_memberships_resolve_and_add
- courses_groupsets_memberships_resolve_and_set
- courses_groupsets_memberships_resolve_and_subtract
- courses_groupsets_memberships_resolve_and_list
- courses_groups_resolve_and_create
- courses_groups_resolve_and_delete
- courses_groups_get
- courses_groups_fetch
- courses_groups_resolve_and_list
- courses_groups_memberships_resolve_and_add
- courses_groups_memberships_resolve_and_list
- courses_groups_memberships_resolve_and_set
- courses_groups_memberships_resolve_and_subtract
- courses_syllabus_get
- courses_users_get
- courses_users_fetch
- courses_users_resolve_and_list
- courses_users_scores_get
- courses_users_scores_fetch
- courses_users_scores_resolve_and_list
- parse_assignment_query
- parse_assignment_queries
- parse_course_query
- parse_course_queries
- parse_groupset_query
- parse_groupset_queries
- parse_group_query
- parse_group_queries
- parse_user_query
- parse_user_queries
- resolve_assignment_query
- resolve_assignment_queries
- resolve_course_query
- resolve_course_queries
- resolve_group_queries
- resolve_group_query
- resolve_groupset_queries
- resolve_groupset_query
- resolve_user_queries