def admin_course_create_individual_teams(ctx, course_id, dry_run, only): course = get_course_or_exit(ctx, course_id) if only is not None: students = [get_student_or_exit(ctx, course, only)] else: students = course.get_students() for student in students: print "Processing %s (%s, %s)" % (student.username, student.user.last_name, student.user.first_name) try: team = course.get_team(student.username) tms = team.get_team_members() if len(tms) == 0: # Incomplete team creation if not dry_run: team.add_team_member(student.username, confirmed = True) print "- Added user %s to team %s." % (student.username, team.team_id) elif len(tms) == 1 and tms[0].username == student.username: print "- User %s already has an individual team." % student.username else: print "- ERROR: Team '%s' exists but it has these team members: %s" % (team.team_id, [tm.username for tm in tms]) except UnknownObjectException, uoe: if not dry_run: team = course.create_team(student.username) team.add_team_member(student.username, confirmed = True) print "- Created individual team for user %s." % student.username print
def admin_course_create_individual_teams(ctx, course_id, dry_run, only): course = get_course_or_exit(ctx, course_id) if only is not None: students = [get_student_or_exit(ctx, course, only)] else: students = course.get_students() for student in students: print "Processing %s (%s, %s)" % ( student.username, student.user.last_name, student.user.first_name) try: team = course.get_team(student.username) tms = team.get_team_members() if len(tms) == 0: # Incomplete team creation if not dry_run: team.add_team_member(student.username, confirmed=True) print "- Added user %s to team %s." % (student.username, team.team_id) elif len(tms) == 1 and tms[0].username == student.username: print "- User %s already has an individual team." % student.username else: print "- ERROR: Team '%s' exists but it has these team members: %s" % ( team.team_id, [tm.username for tm in tms]) except UnknownObjectException, uoe: if not dry_run: team = course.create_team(student.username) team.add_team_member(student.username, confirmed=True) print "- Created individual team for user %s." % student.username print
def shared_course_set_user_attribute(ctx, course, user_type, username, attr_name, attr_value): if user_type == "instructor": user = get_instructor_or_exit(ctx, course, username) elif user_type == "grader": user = get_grader_or_exit(ctx, course, username) elif user_type == "student": user = get_student_or_exit(ctx, course, username) api_obj_set_attribute(ctx, user, attr_name, attr_value)
def instructor_grading_add_conflict(ctx, course, grader_id, student_id): grader = get_grader_or_exit(ctx, course, grader_id) student = get_student_or_exit(ctx, course, student_id) if student.username in grader.conflicts_usernames: print("Student %s is already listed as a conflict for grader %s" % (student.username, grader.username)) ctx.exit(CHISUBMIT_FAIL) conflicts_usernames = grader.conflicts_usernames[:] conflicts_usernames.append(student.username) grader.conflicts_usernames = conflicts_usernames return CHISUBMIT_SUCCESS
def student_course_show_extensions(ctx, course, username): user = ctx.obj["client"].get_user() if username is not None: try: course.get_instructor(user.username) except UnknownObjectException: print "Only instructors can use the --username option" ctx.exit(CHISUBMIT_FAIL) else: username = user.username student = get_student_or_exit(ctx, course, username) if course.extension_policy == "per-team": print "This course uses per-team extensions." print "Please use 'chisubmit student team show' to see the number of extensions" print "available for the teams you are in." ctx.exit(CHISUBMIT_SUCCESS) print "%s, %s" % (student.user.last_name, student.user.first_name) print teams = course.get_teams() extensions = student.extensions extensions_used = [] for t in teams: if username not in [tm.username for tm in t.get_team_members()]: continue registrations = t.get_assignment_registrations() for reg in registrations: if reg.final_submission is not None: ex = reg.final_submission.extensions_used if ex > 0: extensions_used.append((reg.assignment_id, t.team_id, ex)) n_extensions_used = sum([x[2] for x in extensions_used]) print "You started with %i extensions and you have %i extensions left." % ( extensions, extensions - n_extensions_used) if len(extensions_used) > 0: for aid, tid, ex in extensions_used: print "- You used %i extension(s) on %s (as '%s')" % (ex, aid, tid)
def student_course_show_extensions(ctx, course, username): user = ctx.obj["client"].get_user() if username is not None: try: course.get_instructor(user.username) except UnknownObjectException: print "Only instructors can use the --username option" ctx.exit(CHISUBMIT_FAIL) else: username = user.username student = get_student_or_exit(ctx, course, username) if course.extension_policy == "per-team": print "This course uses per-team extensions." print "Please use 'chisubmit student team show' to see the number of extensions" print "available for the teams you are in." ctx.exit(CHISUBMIT_SUCCESS) print "%s, %s" % (student.user.last_name, student.user.first_name) print teams = course.get_teams() extensions = student.extensions extensions_used = [] for t in teams: if username not in [tm.username for tm in t.get_team_members()]: continue registrations = t.get_assignment_registrations() for reg in registrations: if reg.final_submission is not None: ex = reg.final_submission.extensions_used if ex > 0: extensions_used.append((reg.assignment_id, t.team_id, ex)) n_extensions_used = sum([x[2] for x in extensions_used]) print "You started with %i extensions and you have %i extensions left." % (extensions, extensions - n_extensions_used) if len(extensions_used) > 0: for aid, tid, ex in extensions_used: print "- You used %i extension(s) on %s (as '%s')" % (ex, aid, tid)
def student_course_set_git_username(ctx, course, git_username): user = ctx.obj["client"].get_user() student = get_student_or_exit(ctx, course, user.username) api_obj_set_attribute(ctx, student, "git_username", git_username)