Ejemplo n.º 1
0
    def submit_autograding(self, docker):
        # create the autograded assignment file path
        self.autograded_assignment_path = os.path.join(self.grader_repo_path, self.grader_local_autograded_folder)
        self.autograde_fail_flag_path = os.path.join(self.grader_repo_path, 'autograde_failed_'+self.asgn.name+'-'+self.stu.canvas_id)

        print('Autograding submission ' + self.asgn.name+':'+self.stu.canvas_id)

        if os.path.exists(self.autograde_fail_flag_path):
            print('Autograde failed previously. Returning')
            return SubmissionStatus.AUTOGRADE_FAILED_PREVIOUSLY

        if os.path.exists(self.autograded_assignment_path):
            print('Assignment previously autograded & validated.')
            return SubmissionStatus.AUTOGRADED
        else:
            print('Removing old autograding result from DB if it exists')
            try:
                gb = Gradebook('sqlite:///'+self.grader_repo_path +'/gradebook.db')
                gb.remove_submission(self.asgn.name, self.student_prefix+self.stu.canvas_id)
            except MissingEntry as e:
                pass
            finally:
                gb.close()
            print('Submitting job to docker pool for autograding')
            self.autograde_docker_job_id = docker.submit('nbgrader autograde --force --assignment=' + self.asgn.name + ' --student='+self.student_prefix+self.stu.canvas_id, self.grader_repo_path)
            return SubmissionStatus.NEEDS_AUTOGRADE