diff --git a/api/gitlab_classes.py b/api/gitlab_classes.py index 90ab56b513dc2c5b7b6bca88551dc78b6a7127ff..118de3e41c42314e18337e7f915d67030ab9f062 100644 --- a/api/gitlab_classes.py +++ b/api/gitlab_classes.py @@ -53,6 +53,13 @@ class GitlabUser: def get_site(self) -> str: return self.git_user.web_url + def get_projects(self) -> List["GitlabProject"]: + gitlab_projects = self.git_user.projects.list(all=True) + projects: List[GitlabProject] = [] + for project in gitlab_projects: + projects.append(GitlabProject(project)) + return projects + def __repr__(self) -> str: username = self.get_username() return f'@{username}' diff --git a/prep-code-review-and-response.py b/prep-code-review-and-response.py index d5b04a9d9a656ed007ef5f486917196558b8f0eb..4973e534ddd9b71f254544bba583b55ca330f8d4 100644 --- a/prep-code-review-and-response.py +++ b/prep-code-review-and-response.py @@ -58,7 +58,45 @@ def create_clone_script(): def validate_forks(): - print('Examining the forks (... not yet)') + old_groupset: str = input('Please provide the name of the student groupset for the previous assignment: ') + new_groupset: str = input('Please provide the name of the student groupset for the next assignment: ') + students: Set[CompositeUser] = get_students() + print('Validating the forks.') + print('This script will report anything unexpected;') + print('use judgement when grading fork requirement.') + print() + # noinspection PyPep8Naming + TAs: List[str] = (input('Enter the TAs\' gitlab usernames as a space-delimited sequence: ')).split() + course = CanvasCourse(Course.canvas_course_id) + old_groups: List[CanvasUserGroup] = list(filter(lambda g: g.get_name() == old_groupset, + course.get_user_groupsets()))[0].get_groups() + new_groups: List[CanvasUserGroup] = list(filter(lambda g: g.get_name() == new_groupset, + course.get_user_groupsets()))[0].get_groups() + for student in students: + 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] + 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.') + 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}') if __name__ == '__main__':