Beispiel #1
0
 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))
Beispiel #2
0
 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)