-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathcreatecourse.py
60 lines (49 loc) · 2.24 KB
/
createcourse.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
from django.core.management.base import BaseCommand, CommandError
from ohq.invite import parse_and_send_invites
from ohq.models import Course, Membership, Semester
class Command(BaseCommand):
help = "Creates a course with default settings and invites users to course"
def add_arguments(self, parser):
parser.add_argument("department", type=str)
parser.add_argument("course_code", type=str)
parser.add_argument("course_title", type=str)
parser.add_argument(
"term", type=str, choices=[choice[0] for choice in Semester.TERM_CHOICES]
)
parser.add_argument("year", type=int)
parser.add_argument("--emails", nargs="+", type=str)
parser.add_argument(
"--roles",
nargs="+",
choices=[Membership.KIND_PROFESSOR, Membership.KIND_HEAD_TA],
)
def handle(self, *args, **kwargs):
course_code = kwargs["course_code"]
department = kwargs["department"]
course_title = kwargs["course_title"]
term = kwargs["term"]
year = kwargs["year"]
emails = kwargs["emails"]
roles = kwargs["roles"]
if len(emails) != len(roles):
raise CommandError("Length of emails and roles do not match")
semester = Semester.objects.get(year=year, term=term)
new_course = Course.objects.create(
course_code=course_code,
department=department,
course_title=course_title,
semester=semester,
)
self.stdout.write(f"Created new course '{new_course}'")
role_map = {email: role for role, email in zip(roles, emails)}
groups = {Membership.KIND_PROFESSOR: [], Membership.KIND_HEAD_TA: []}
for email in emails:
groups[role_map[email]].append(email)
added, invited = parse_and_send_invites(
new_course, groups[Membership.KIND_PROFESSOR], Membership.KIND_PROFESSOR
)
self.stdout.write(f"Added {added} professor(s) and invited {invited} professor(s)")
added, invited = parse_and_send_invites(
new_course, groups[Membership.KIND_HEAD_TA], Membership.KIND_HEAD_TA
)
self.stdout.write(f"Added {added} Head TA(s) and invited {invited} Head TA(s)")