示例#1
0
def instructor_grading_assign_grader(ctx, course, assignment_id, team_id, grader_id):
    team = get_team_or_exit(ctx, course, team_id)
    grader = get_grader_or_exit(ctx, course, grader_id)

    registration = get_assignment_registration_or_exit(ctx, team, assignment_id)

    registration.grader_username = grader.username
示例#2
0
def instructor_grading_set_grade(ctx, course, team_id, assignment_id, rubric_component_description, points):   
    assignment = get_assignment_or_exit(ctx, course, assignment_id)
    team = get_team_or_exit(ctx, course, team_id)
    registration = get_assignment_registration_or_exit(ctx, team, assignment_id)
     
    rubric_components = assignment.get_rubric_components()
    
    rubric_component = [rc for rc in rubric_components if rc.description == rubric_component_description]
    
    if len(rubric_component) == 0:
        print "No such rubric component in %s: %s" % (assignment_id, rubric_component_description)
        ctx.exit(CHISUBMIT_FAIL)
    elif len(rubric_component) > 1:
        print "ERROR: Server returned more than one rubric component for '%s' in %s" % (rubric_component_description, assignment_id)
        print "       This should not happen. Please contact the chisubmit administrator."
        ctx.exit(CHISUBMIT_FAIL)
    else:
        rc = rubric_component[0]
        
        try:
            registration.set_grade(rc, points)
            ctx.exit(CHISUBMIT_SUCCESS)
        except ValueError, ve:
            print ve.message
            ctx.exit(CHISUBMIT_FAIL)
示例#3
0
def instructor_grading_set_grade(ctx, course, team_id, assignment_id,
                                 rubric_component_description, points):
    assignment = get_assignment_or_exit(ctx, course, assignment_id)
    team = get_team_or_exit(ctx, course, team_id)
    registration = get_assignment_registration_or_exit(ctx, team,
                                                       assignment_id)

    rubric_components = assignment.get_rubric_components()

    rubric_component = [
        rc for rc in rubric_components
        if rc.description == rubric_component_description
    ]

    if len(rubric_component) == 0:
        print("No such rubric component in %s: %s" %
              (assignment_id, rubric_component_description))
        ctx.exit(CHISUBMIT_FAIL)
    elif len(rubric_component) > 1:
        print(
            "ERROR: Server returned more than one rubric component for '%s' in %s"
            % (rubric_component_description, assignment_id))
        print(
            "       This should not happen. Please contact the chisubmit administrator."
        )
        ctx.exit(CHISUBMIT_FAIL)
    else:
        rc = rubric_component[0]

        try:
            registration.set_grade(rc, points)
            ctx.exit(CHISUBMIT_SUCCESS)
        except ValueError as ve:
            print(ve)
            ctx.exit(CHISUBMIT_FAIL)
示例#4
0
def instructor_grading_assign_grader(ctx, course, assignment_id, team_id,
                                     grader_id):
    team = get_team_or_exit(ctx, course, team_id)
    grader = get_grader_or_exit(ctx, course, grader_id)

    registration = get_assignment_registration_or_exit(ctx, team,
                                                       assignment_id)

    registration.grader_username = grader.username
示例#5
0
def instructor_grading_assign_grader(ctx, course, assignment_id, team_id, grader_id, none):
    
    if none and grader_id is not None:
        print("Cannot specify a grader and also --none")
        ctx.exit(CHISUBMIT_FAIL)

    if not none and grader_id is None:
        print("You must specify a grader or use --none")
        ctx.exit(CHISUBMIT_FAIL)

    team = get_team_or_exit(ctx, course, team_id)
    registration = get_assignment_registration_or_exit(ctx, team, assignment_id)

    if none:
        registration.grader_username = None
    else:
        grader = get_grader_or_exit(ctx, course, grader_id)
        registration.grader_username = grader.username
示例#6
0
def instructor_grading_assign_grader(ctx, course, assignment_id, team_id,
                                     grader_id, none):

    if none and grader_id is not None:
        print("Cannot specify a grader and also --none")
        ctx.exit(CHISUBMIT_FAIL)

    if not none and grader_id is None:
        print("You must specify a grader or use --none")
        ctx.exit(CHISUBMIT_FAIL)

    team = get_team_or_exit(ctx, course, team_id)
    registration = get_assignment_registration_or_exit(ctx, team,
                                                       assignment_id)

    if none:
        registration.grader_username = None
    else:
        grader = get_grader_or_exit(ctx, course, grader_id)
        registration.grader_username = grader.username
示例#7
0
def instructor_assignment_submit(ctx, course, team_id, assignment_id,
                                 commit_sha, extensions):
    team = get_team_or_exit(ctx, course, team_id)
    registration = get_assignment_registration_or_exit(ctx, team,
                                                       assignment_id)

    conn = create_connection(course, ctx.obj['config'])

    if conn is None:
        print "Could not connect to git server."
        ctx.exit(CHISUBMIT_FAIL)

    commit = conn.get_commit(course, team, commit_sha)

    if commit is None:
        print "Commit %s does not exist in repository" % commit_sha
        ctx.exit(CHISUBMIT_FAIL)

    if registration.final_submission is not None:
        prior_commit_sha = registration.final_submission.commit_sha
        prior_submitted_at_utc = registration.final_submission.submitted_at
        prior_submitted_at_local = convert_datetime_to_local(
            prior_submitted_at_utc)

        submission_commit = conn.get_commit(course, team, prior_commit_sha)

        if prior_commit_sha == commit_sha:
            print "The team has already submitted assignment %s" % registration.assignment.assignment_id
            print "They submitted the following commit on %s:" % prior_submitted_at_local
            print
            if submission_commit is None:
                print "WARNING: Previously submitted commit '%s' is not in the repository!" % prior_commit_sha
            else:
                print_commit(submission_commit)
            print
            print "You are trying to submit the same commit again (%s)" % prior_commit_sha
            print "If you want to re-submit, please specify a different commit"
            ctx.exit(CHISUBMIT_FAIL)

        print
        print "WARNING: This team has already submitted assignment %s and you" % registration.assignment.assignment_id
        print "are about to overwrite the previous submission of the following commit:"
        print
        if submission_commit is None:
            print "WARNING: Previously submitted commit '%s' is not in the repository!" % prior_commit_sha
        else:
            print_commit(submission_commit)
        print

    if registration.final_submission is not None:
        msg = "THE ABOVE SUBMISSION FOR %s (%s) WILL BE CANCELLED." % (
            registration.assignment.assignment_id,
            registration.assignment.name)

        print "!" * len(msg)
        print msg
        print "!" * len(msg)
        print
        print "If you continue, their submission for %s (%s)" % (
            registration.assignment.assignment_id,
            registration.assignment.name)
        print "will now point to the following commit:"
    else:
        print "You are going to make a submission for %s (%s)." % (
            registration.assignment.assignment_id,
            registration.assignment.name)
        print "The commit you are submitting is the following:"
    print
    print_commit(commit)
    print
    print "PLEASE VERIFY THIS IS THE EXACT COMMIT YOU WANT TO SUBMIT"
    print
    print "Are you sure you want to continue? (y/n): ",

    yesno = raw_input()

    if yesno in ('y', 'Y', 'yes', 'Yes', 'YES'):
        try:
            submit_response = registration.submit(
                commit_sha, extensions_override=extensions, dry_run=False)

            print "The submission has been completed."
            return CHISUBMIT_SUCCESS

        except BadRequestException, bre:
            print "ERROR: The submission was not completed. The server reported the following errors:"
            bre.print_errors()
            return CHISUBMIT_FAIL
示例#8
0
def instructor_assignment_cancel_submit(ctx, course, team_id, assignment_id,
                                        yes):
    assignment = get_assignment_or_exit(ctx, course, assignment_id)
    team = get_team_or_exit(ctx, course, team_id)
    registration = get_assignment_registration_or_exit(
        ctx, team, assignment.assignment_id)

    if registration.final_submission is None:
        print("Team %s has not made a submission for assignment %s," %
              (team.team_id, assignment_id))
        print("so there is nothing to cancel.")
        ctx.exit(CHISUBMIT_FAIL)

    if registration.grader_username is not None:
        print("This submission has already been assigned a grader (%s)" %
              registration.grader_username)
        print(
            "Make sure the grader has been notified to discard this submission."
        )
        print(
            "You must also remove the existing grading branch from the staging server."
        )

        print("Are you sure you want to proceed? (y/n): ", end=' ')

        if not yes:
            yesno = input()
        else:
            yesno = 'y'
            print('y')

        if yesno not in ('y', 'Y', 'yes', 'Yes', 'YES'):
            ctx.exit(CHISUBMIT_FAIL)
        else:
            print()

    if is_submission_ready_for_grading(
            assignment_deadline=registration.assignment.deadline,
            submission_date=registration.final_submission.submitted_at,
            extensions_used=registration.final_submission.extensions_used):
        print(
            "WARNING: You are canceling a submission that is ready for grading!"
        )

    conn = create_connection(course, ctx.obj['config'])

    if conn is None:
        print("Could not connect to git server.")
        ctx.exit(CHISUBMIT_FAIL)

    submission_commit = conn.get_commit(
        course, team, registration.final_submission.commit_sha)

    print()
    print("This is the existing submission for assignment %s:" % assignment_id)
    print()
    if submission_commit is None:
        print(
            "WARNING: Previously submitted commit '%s' is not in the repository!"
            % registration.final_submission.commit_sha)
    else:
        print_commit(submission_commit)
    print()

    print("Are you sure you want to cancel this submission? (y/n): ", end=' ')

    if not yes:
        yesno = input()
    else:
        yesno = 'y'
        print('y')

    if yesno in ('y', 'Y', 'yes', 'Yes', 'YES'):
        registration.final_submission_id = None
        registration.grader_username = None
        registration.grading_started = False

        print()
        print("The submission has been cancelled.")
示例#9
0
def instructor_assignment_cancel_submit(ctx, course, team_id, assignment_id, yes):
    assignment = get_assignment_or_exit(ctx, course, assignment_id)
    team = get_team_or_exit(ctx, course, team_id)
    registration = get_assignment_registration_or_exit(ctx, team, assignment.assignment_id)
        
    if registration.final_submission is None:
        print("Team %s has not made a submission for assignment %s," % (team.team_id, assignment_id))
        print("so there is nothing to cancel.")
        ctx.exit(CHISUBMIT_FAIL)
        
    if registration.grader_username is not None:
        print("This submission has already been assigned a grader (%s)" % registration.grader_username)
        print("Make sure the grader has been notified to discard this submission.")
        print("You must also remove the existing grading branch from the staging server.")
        
        print("Are you sure you want to proceed? (y/n): ", end=' ') 
        
        if not yes:
            yesno = input()
        else:
            yesno = 'y'
            print('y')
        
        if yesno not in ('y', 'Y', 'yes', 'Yes', 'YES'):
            ctx.exit(CHISUBMIT_FAIL)
        else:
            print()
        
    if is_submission_ready_for_grading(assignment_deadline=registration.assignment.deadline, 
                                       submission_date=registration.final_submission.submitted_at,
                                       extensions_used=registration.final_submission.extensions_used):
        print("WARNING: You are canceling a submission that is ready for grading!")
            
    conn = create_connection(course, ctx.obj['config'])
    
    if conn is None:
        print("Could not connect to git server.")
        ctx.exit(CHISUBMIT_FAIL)
        
    submission_commit = conn.get_commit(course, team, registration.final_submission.commit_sha)
        
    print()
    print("This is the existing submission for assignment %s:" % assignment_id)
    print()
    if submission_commit is None:
        print("WARNING: Previously submitted commit '%s' is not in the repository!" % registration.final_submission.commit_sha)
    else:
        print_commit(submission_commit)
    print()    

    print("Are you sure you want to cancel this submission? (y/n): ", end=' ') 
    
    if not yes:
        yesno = input()
    else:
        yesno = 'y'
        print('y')
    
    if yesno in ('y', 'Y', 'yes', 'Yes', 'YES'):
        registration.final_submission_id = None
        registration.grader_username = None
        registration.grading_started = False
        
        print()
        print("The submission has been cancelled.")
示例#10
0
def instructor_assignment_submit(ctx, course, team_id, assignment_id, commit_sha, extensions):
    team = get_team_or_exit(ctx, course, team_id)
    registration = get_assignment_registration_or_exit(ctx, team, assignment_id)
            
    conn = create_connection(course, ctx.obj['config'])
    
    if conn is None:
        print("Could not connect to git server.")
        ctx.exit(CHISUBMIT_FAIL)
    
    commit = conn.get_commit(course, team, commit_sha)
    
    if commit is None:
        print("Commit %s does not exist in repository" % commit_sha)
        ctx.exit(CHISUBMIT_FAIL)
    
    if registration.final_submission is not None:
        prior_commit_sha = registration.final_submission.commit_sha
        prior_submitted_at_utc = registration.final_submission.submitted_at
        prior_submitted_at_local = convert_datetime_to_local(prior_submitted_at_utc)            
        
        submission_commit = conn.get_commit(course, team, prior_commit_sha)            
        
        if prior_commit_sha == commit_sha:
            print("The team has already submitted assignment %s" % registration.assignment.assignment_id)
            print("They submitted the following commit on %s:" % prior_submitted_at_local)
            print()
            if submission_commit is None:
                print("WARNING: Previously submitted commit '%s' is not in the repository!" % prior_commit_sha)
            else:
                print_commit(submission_commit)
            print()
            print("You are trying to submit the same commit again (%s)" % prior_commit_sha)
            print("If you want to re-submit, please specify a different commit")
            ctx.exit(CHISUBMIT_FAIL)
            
        print()
        print("WARNING: This team has already submitted assignment %s and you" % registration.assignment.assignment_id) 
        print("are about to overwrite the previous submission of the following commit:")
        print()
        if submission_commit is None:
            print("WARNING: Previously submitted commit '%s' is not in the repository!" % prior_commit_sha)
        else:
            print_commit(submission_commit)
        print()

    if registration.final_submission is not None:
        msg = "THE ABOVE SUBMISSION FOR %s (%s) WILL BE CANCELLED." % (registration.assignment.assignment_id, registration.assignment.name)
        
        print("!"*len(msg))
        print(msg)
        print("!"*len(msg))
        print()
        print("If you continue, their submission for %s (%s)" % (registration.assignment.assignment_id, registration.assignment.name))
        print("will now point to the following commit:")                
    else:
        print("You are going to make a submission for %s (%s)." % (registration.assignment.assignment_id, registration.assignment.name))
        print("The commit you are submitting is the following:")
    print()
    print_commit(commit)
    print()
    print("PLEASE VERIFY THIS IS THE EXACT COMMIT YOU WANT TO SUBMIT")
    print()
    print("Are you sure you want to continue? (y/n): ", end=' ') 
    
    yesno = input()
    
    if yesno in ('y', 'Y', 'yes', 'Yes', 'YES'):
        try:
            submit_response = registration.submit(commit_sha, extensions_override = extensions, dry_run=False)
                        
            print("The submission has been completed.")
            return CHISUBMIT_SUCCESS

        except BadRequestException as bre:        
            print("ERROR: The submission was not completed. The server reported the following errors:")
            bre.print_errors()
            ctx.exit(CHISUBMIT_FAIL)