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

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

Add users to a group.