From deff280556d9b812de107382d78dd17b8132ee30 Mon Sep 17 00:00:00 2001 From: Christopher Bohn <bohn@unl.edu> Date: Tue, 30 Jun 2020 07:12:14 -0500 Subject: [PATCH] Handled edge case of student excused from project used for code review --- prep-code-review-and-response.py | 56 +++++++++++++++++--------------- prep_assignment.py | 5 +-- 2 files changed, 33 insertions(+), 28 deletions(-) diff --git a/prep-code-review-and-response.py b/prep-code-review-and-response.py index 7c3cd05..7d833c6 100644 --- a/prep-code-review-and-response.py +++ b/prep-code-review-and-response.py @@ -73,33 +73,37 @@ def validate_forks(): new_groups: List[CanvasUserGroup] = list(filter(lambda g: g.get_name() == new_groupset, course.get_user_groupsets()))[0].get_groups() for student in sorted(students, key=lambda s: s.get_canvas_user().get_sortable_name()): - print(f'Validating {student.get_canvas_user().get_name()}') - old_group_name: str = list(filter(lambda g: student.get_canvas_user() in g.get_students(), - old_groups))[0].get_name().strip().replace(" ", "") - new_group = list(filter(lambda g: student.get_canvas_user() in g.get_students(), new_groups))[0] - projects: List[GitlabProject] = student.get_gitlab_user().get_projects() - project_names: List[str] = list(map(lambda p: p.get_name(), projects)) - if old_group_name in project_names: - project: GitlabProject = list(filter(lambda p: p.get_name() == old_group_name, projects))[0] - if project.get_visibility() != 'private': - print(f'\t{student.get_canvas_user().get_name()} has not set {old_group_name}.git to "private" ' - f'(access level is {project.get_visibility()}).') - users: List[GitlabUser] = project.get_all_users() - usernames: List[str] = list(map(lambda u: u.get_username(), users)) - for TA in TAs: - if TA not in usernames: - print(f'\t{student.get_canvas_user().get_name()} did not add @{TA} to repo.') - for partner in new_group.get_students(): - composite_student: CompositeUser = list(filter(lambda s: s.get_canvas_user() == partner, students))[0] - if composite_student.get_gitlab_user().get_username() not in usernames: - print(f'\t{student.get_canvas_user().get_name()} did not add {partner.get_name()} to repo.') + student_canvas_name = student.get_canvas_user().get_name() + print(f'Validating {student_canvas_name}') + old_group_name_list = list(filter(lambda g: student.get_canvas_user() in g.get_students(), old_groups)) + if len(old_group_name_list) > 0: + old_group_name: str = old_group_name_list[0].get_name().strip().replace(" ", "") + new_group = list(filter(lambda g: student.get_canvas_user() in g.get_students(), new_groups))[0] + projects: List[GitlabProject] = student.get_gitlab_user().get_projects() + project_names: List[str] = list(map(lambda p: p.get_name(), projects)) + if old_group_name in project_names: + project: GitlabProject = list(filter(lambda p: p.get_name() == old_group_name, projects))[0] + if project.get_visibility() != 'private': + print(f'\t{student_canvas_name} has not set {old_group_name}.git to "private" ' + f'(access level is {project.get_visibility()}).') + users: List[GitlabUser] = project.get_all_users() + usernames: List[str] = list(map(lambda u: u.get_username(), users)) + for TA in TAs: + if TA not in usernames: + print(f'\t{student_canvas_name} did not add @{TA} to repo.') + for partner in new_group.get_students(): + composite_student: CompositeUser = list(filter(lambda s: s.get_canvas_user() == partner, students))[0] + if composite_student.get_gitlab_user().get_username() not in usernames: + print(f'\t{student_canvas_name} did not add {partner.get_name()} to repo.') + else: + print(f'\t{student_canvas_name}: Could not locate {old_group_name}.git') + print('\t\tThis may be because the student hasn\'t forked their repository, or') + print('\t\tbecause they haven\'t given you access, or because they renamed it.') + print(f'\t\t\t{student_canvas_name}\'s repositories:') + for project in project_names: + print(f'\t\t\t{project}') else: - print(f'\t{student.get_canvas_user().get_name()}: Could not locate {old_group_name}.git') - print('\t\tThis may be because the student hasn\'t forked their repository, or') - print('\t\tbecause they haven\'t given you access, or because they renamed it.') - print(f'\t\t\t{student.get_canvas_user().get_name()}\'s repositories:') - for project in project_names: - print(f'\t\t\t{project}') + print(f'\t{student_canvas_name} does not have an old Canvas group.') if __name__ == '__main__': diff --git a/prep_assignment.py b/prep_assignment.py index 3bfc9cc..29bc55a 100644 --- a/prep_assignment.py +++ b/prep_assignment.py @@ -140,9 +140,10 @@ def create_pairs(students: Set[CompositeUser], groupset_name: str = 'Unknown Ass print('Next we shall assign partners to students with blacklists.') else: print('There are no students with blacklists.') - for student in students_with_blacklist: + for student in students_with_blacklist: # TODO: there's a bug here when students with blacklists make requests pair_number += 1 - unassigned_students.remove(student) + if student in unassigned_students: # TODO: can probably fix bug by putting ALL the code under this "if" + unassigned_students.remove(student) potential_partner: CompositeUser = random.choice(tuple(unassigned_students)) while not (student.is_blacklist_compatible(potential_partner) and student.is_graylist_compatible(potential_partner)): -- GitLab