lms.backend.canvas.courses.groups.memberships.add

 1import os
 2import typing
 3
 4import edq.util.dirent
 5
 6import lms.backend.canvas.common
 7
 8BASE_ENDPOINT = "/api/v1/group_categories/{groupset_id}/import"
 9
10def request(backend: typing.Any,
11        course_id: int,
12        groupset_id: int,
13        group_id: int,
14        user_ids: typing.List[int],
15        ) -> int:
16    """ Add users to a group. """
17
18    url = backend.server + BASE_ENDPOINT.format(groupset_id = groupset_id)
19    headers = backend.get_standard_headers(write = True)
20
21    # Build a CSV.
22    rows = ["canvas_user_id,canvas_group_id"]
23    for user_id in sorted(user_ids):
24        rows.append(f"{user_id},{group_id}")
25
26    # Write CSV.
27    temp_dir = edq.util.dirent.get_temp_dir('edq-lms-canvas-')
28    temp_path = os.path.join(temp_dir, 'data.csv')
29    edq.util.dirent.write_file_bytes(temp_path, "\n".join(rows).encode(edq.util.dirent.DEFAULT_ENCODING))
30
31    files = {
32        'attachment': open(temp_path, 'rb'),  # pylint: disable=consider-using-with
33    }
34
35    raw_object = lms.backend.canvas.common.make_post_request(url, headers = headers, files = files)
36    if (raw_object is None):
37        identifiers = {
38            'course_id': course_id,
39            'groupset_id': groupset_id,
40            'group_id': group_id,
41            'user_ids': user_ids,
42        }
43        backend.not_found('add group memberships', identifiers)
44
45        return 0
46
47    return len(user_ids)
BASE_ENDPOINT = '/api/v1/group_categories/{groupset_id}/import'
def request( backend: Any, course_id: int, groupset_id: int, group_id: int, user_ids: List[int]) -> int:
11def request(backend: typing.Any,
12        course_id: int,
13        groupset_id: int,
14        group_id: int,
15        user_ids: typing.List[int],
16        ) -> int:
17    """ Add users to a group. """
18
19    url = backend.server + BASE_ENDPOINT.format(groupset_id = groupset_id)
20    headers = backend.get_standard_headers(write = True)
21
22    # Build a CSV.
23    rows = ["canvas_user_id,canvas_group_id"]
24    for user_id in sorted(user_ids):
25        rows.append(f"{user_id},{group_id}")
26
27    # Write CSV.
28    temp_dir = edq.util.dirent.get_temp_dir('edq-lms-canvas-')
29    temp_path = os.path.join(temp_dir, 'data.csv')
30    edq.util.dirent.write_file_bytes(temp_path, "\n".join(rows).encode(edq.util.dirent.DEFAULT_ENCODING))
31
32    files = {
33        'attachment': open(temp_path, 'rb'),  # pylint: disable=consider-using-with
34    }
35
36    raw_object = lms.backend.canvas.common.make_post_request(url, headers = headers, files = files)
37    if (raw_object is None):
38        identifiers = {
39            'course_id': course_id,
40            'groupset_id': groupset_id,
41            'group_id': group_id,
42            'user_ids': user_ids,
43        }
44        backend.not_found('add group memberships', identifiers)
45
46        return 0
47
48    return len(user_ids)

Add users to a group.