def addError(self, test, err): if isinstance(err[1], GradingComplete): self.done_grading = True self.addFailure(test, err) elif isinstance(err[1], DoNotRun): self.results[-1]['points'] = 0 self.results[-1]['max_points'] = 0 elif isinstance(err[1], UserCodeFailed): # Student code raised Exception tr_list = traceback.format_exception(*err[1].err) name = 'Your code raised an Exception' self.done_grading = True if isinstance(err[1].err[1], SyntaxError) or isinstance( err[1].err[1], NameError): self.grading_succeeded = False self.format_errors.append('Your code has a syntax error.') Feedback.set_main_output() else: self.results.append({ 'name': name, 'filename': 'error', 'max_points': 1, 'points': 0 }) Feedback.set_name('error') Feedback.add_feedback(''.join(tr_list)) Feedback.add_feedback('\n\nYour code:\n\n') print_student_code(st_code=Feedback.test.student_code_abs_path, ipynb_key=Feedback.test.ipynb_key) else: tr_list = traceback.format_exception(*err) test_id = test.id().split()[0] if not test_id.startswith('test'): # Error in setup code -- not recoverable self.done_grading = True self.grading_succeeded = False self.results = [] self.results.append({ 'name': 'Internal Grading Error', 'filename': 'error', 'max_points': 1, 'points': 0 }) Feedback.set_name('error') Feedback.add_feedback(self.major_error_message + ''.join(tr_list)) else: # Error in a single test -- keep going unittest.TestResult.addError(self, test, err) self.results[-1]['points'] = 0 Feedback.add_feedback(self.error_message + ''.join(tr_list))
def wrapped(Test_instance): Feedback.set_name(f.__name__) if (Test_instance.total_iters > 1 and getattr( Test_instance, 'print_iteration_prefix', True)): Feedback.add_iteration_prefix(Test_instance.iter_num) f(Test_instance)