def download_best_solutions(api: ApiClient, download_dir, assignment_id): """ Download the best solution of this assignment from each user. """ if download_dir is None: download_dir = "." if not os.path.exists(download_dir) or not os.path.isdir(download_dir): click.echo("Download path '{}' must exist and must be a directory.".format(download_dir)) return # Get assignment metadata and best solution for each student ... assignment = api.get_assignment(assignment_id) if assignment is None: click.echo("Assignment not found.") return click.echo("Downloading best solutions of '{}' to '{}' ...".format( getAssignmentName(assignment), download_dir)) best_solutions = api.get_assignment_best_solutions(assignment_id) # Iterate over students for student in api.get_group_students(assignment["groupId"]): # Try to find best solution for the student best = best_solutions[student["id"]] if best: # File name comprise user name in plain ASCII and its ID for uniqueness file_name = "{}-{}-{}.zip".format( asciiize_string(student["name"]["lastName"]), asciiize_string(student["name"]["firstName"]), student["id"]) points = safe_get_solution_points(best) created = datetime.datetime.fromtimestamp(best["createdAt"]).strftime('%Y-%m-%d %H:%M:%S') click.echo("Saving {} ... {} points, {}".format(file_name, points, created)) api.download_solution(best['id'], "{}/{}".format(download_dir, file_name))
def download(api: ApiClient, solution_id, download_as): """ Download files of given solution in a ZIP archive. """ api.download_solution(solution_id, download_as)