diff --git a/prep_assignment.py b/prep_assignment.py index fddf03047e420084261d07fc0433e321156e7395..bb359ca942cecdef31d6efa8d9058c5d47b578f7 100644 --- a/prep_assignment.py +++ b/prep_assignment.py @@ -9,9 +9,7 @@ from api.composite_user import CompositeUser from course import Course -# TODO: assign_partners for arbitrarily-sized teams -def create_pairs(groupset_name: str = 'Unknown Assignment') -> \ - Tuple[Set[CompositeUser], List[Tuple[int, CompositeUser, CompositeUser, Optional[CompositeUser]]]]: +def get_students() -> Set[CompositeUser]: filename: str students: Set[CompositeUser] file_not_found = True @@ -22,6 +20,12 @@ def create_pairs(groupset_name: str = 'Unknown Assignment') -> \ file_not_found = False except FileNotFoundError: print(f'File "{filename}" not found.') + return students + + +# TODO: assign_partners for arbitrarily-sized teams +def create_pairs(students: Set[CompositeUser], groupset_name: str = 'Unknown Assignment') -> \ + List[Tuple[int, CompositeUser, CompositeUser, Optional[CompositeUser]]]: students_with_blacklist: Set[CompositeUser] = sorted(list(filter(lambda s: s.has_blacklist(), students)), key=lambda t: len(t.blacklist), reverse=True) preassigned_students: Set[CompositeUser] = set() @@ -108,7 +112,7 @@ def create_pairs(groupset_name: str = 'Unknown Assignment') -> \ potential_partner = random.choice(tuple(unassigned_students)) if attempts > len(unassigned_students): print(f'NO MATCH POSSIBLE FOR {student}! YOU REALLY SHOULD WRITE CODE TO SWAP PARTNERS.') - exit(1) # TODO: write code to swap partners + exit(1) # TODO: write code to swap partners unassigned_students.remove(potential_partner) student_pairs.append((pair_number, student, potential_partner, None)) print(f'\t{student.readable_name} partnered with {potential_partner.readable_name}') @@ -135,7 +139,7 @@ def create_pairs(groupset_name: str = 'Unknown Assignment') -> \ for student in pair[1:]: if student is not None: student.assign_partners(groupset_name, usernames - {student.canvas_username}) - return students, student_pairs + return student_pairs def save_student_roster(students: Set[CompositeUser]): @@ -195,10 +199,9 @@ def create_groups(assignment_number, student_pairs): if __name__ == '__main__': groupset: str = input('Please provide the name of the student groupset: ') - student_set: Set[CompositeUser] - partners: List[Tuple[int, CompositeUser, CompositeUser, Optional[CompositeUser]]] - # noinspection PyRedeclaration - student_set, partners = create_pairs(groupset) + student_set: Set[CompositeUser] = get_students() + partners: List[Tuple[int, CompositeUser, CompositeUser, Optional[CompositeUser]]] = create_pairs(student_set, + groupset) print() save_student_roster(student_set) # zero_padding = ceil(log10(len(partners)))