Newer
Older
#!/usr/bin/env python3
"""
Get roster of students for a Canvas course.
"""
import csv
import click
try:
import common
except:
from . import common
@click.command(context_settings={'help_option_names': ['-h', '--help']})
@click.argument(
'course_id',
)
@click.option(
'--output',
'-o',
help='Output file.',
)
def main(course_id, output=None):
api_token = common.get_api_token()
roster = get_roster(api_token, course_id)
write_roster(roster, output)
def get_user(api_token, course_id, user_id):
url = f'{common.API_URL_BASE}/courses/{course_id}/users/{user_id}'
return common.get_unpaginated(api_token, url)
def get_roster(api_token, course_id):
"""Returns list of students for the given course."""
# Request parameters
params = {'enrollment_type': ['student']}
url = f'{common.API_URL_BASE}/courses/{course_id}/users'
return common.get_paginated(api_token, url, params)
def write_roster(roster, output):
if output is None:
for item in roster:
print(f'{item["login_id"]}@umich.edu')
return
filtered = ((item['sortable_name'],
f'{item["login_id"]}@umich.edu',
item['sis_user_id'])
for item in roster)
with open(output, 'w') as csvfile:
writer = csv.writer(csvfile)
writer.writerow(('Full Name', 'Email', 'SID'))
for item in filtered:
writer.writerow(item)
if __name__ == '__main__':
main()