def get_question_scores(self, result, total_results, max_allowed_wrong, max_allowed_duration): percentage = TestManager.score_percentage(result.correctly_answered, result.wrong_attempts, max_allowed_wrong, total_results, result.duration, max_allowed_duration ) competitive = TestManager.score_competitive(result.correctly_answered, result.wrong_attempts, max_allowed_wrong, total_results, result.duration, max_allowed_duration ) answer_help = None try: try: # if questionset was removed, this will still allow people to view old tests. answer_help = QuestionSets.by(result.question_sets_id).first().answer_help except exc.SQLAlchemyError as e: pass # defensive except Exception as e: pass # defensive return { 'question' : str(result.question), 'question_textonly' : RemoveImages(result.question), 'correctly_answered' : result.correctly_answered, 'wrong_attempts' : result.wrong_attempts, 'duration' : result.duration, 'duration_passed_fmt' : Seconds2Str((max_allowed_duration-result.duration)), 'duration_remaining_fmt' : Seconds2Str(result.duration), 'percentage' : percentage, 'competitive' : competitive, 'answer_help': str(answer_help), 'attempted': result.attempted, 'answer_choices': str(result.get_answers()), 'had_wrong_attempts': (result.wrong_attempts!=0 and result.attempted), 'had_more_than_one_wrong': (result.wrong_attempts>1), 'had_no_time_remaining': (result.duration<1 and result.attempted), }
def _test_calculator(self,test,results,result): percentage = TestManager.score_percentage(result.correctly_answered, result.wrong_attempts, test.max_wrong_answer_allowed, len(results), result.duration, test.question_time_allowed ) competitive = TestManager.score_competitive(result.correctly_answered, result.wrong_attempts, test.max_wrong_answer_allowed, len(results), result.duration, test.question_time_allowed ) test.total_percentage += percentage test.base_competitive += competitive['score'] test.bonus_competitive += competitive['bonus'] test.total_competitive += competitive['combined'] test.time_remaining += result.duration test.time_spent += (test.question_time_allowed - result.duration) DBSession.flush() return { 'competitive': competitive, 'percentage': percentage }