def _make_base_report(env, kind): """Helper function making: SubmissionReport, ScoreReport, CompilationReport. Used ``environ`` keys: * ``status`` * ``score`` * ``compilation_result`` * ``compilation_message`` * ``submission_id`` * ``max_score`` Alters ``environ`` by adding: * ``report_id``: id of the produced :class:`~oioioi.contests.models.SubmissionReport` Returns: tuple (submission, submission_report) """ submission = Submission.objects.get(id=env['submission_id']) submission_report = SubmissionReport(submission=submission) submission_report.kind = kind submission_report.save() env['report_id'] = submission_report.id status_report = ScoreReport(submission_report=submission_report) status_report.status = env['status'] status_report.score = env['score'] status_report.max_score = env['max_score'] status_report.save() compilation_report = CompilationReport(submission_report=submission_report) compilation_report.status = env['compilation_result'] compilation_message = env['compilation_message'] if not isinstance(compilation_message, unicode): compilation_message = compilation_message.decode('utf8') compilation_report.compiler_output = compilation_message compilation_report.save() return submission, submission_report
def make_report(env, kind="NORMAL", **kwargs): """Builds entities for tests results in a database. Used ``environ`` keys: * ``tests`` * ``test_results`` * ``group_results`` * ``status`` * ``score`` Produced ``environ`` keys: * ``report_id``: id of the produced :class:`~oioioi.contests.models.SubmissionReport` """ submission = Submission.objects.get(id=env["submission_id"]) submission_report = SubmissionReport(submission=submission) submission_report.kind = kind submission_report.save() status_report = ScoreReport(submission_report=submission_report) status_report.status = env["status"] status_report.score = env["score"] status_report.save() compilation_report = CompilationReport(submission_report=submission_report) compilation_report.status = env["compilation_result"] compilation_message = env["compilation_message"] if not isinstance(compilation_message, unicode): compilation_message = compilation_message.decode("utf8") compilation_report.compiler_output = compilation_message compilation_report.save() if env["compilation_result"] != "OK": return env tests = env["tests"] test_results = env.get("test_results", {}) for test_name, result in test_results.iteritems(): test = tests[test_name] if "report_id" in result: continue test_report = TestReport(submission_report=submission_report) test_report.test_id = test.get("id") test_report.test_name = test_name test_report.test_group = test["group"] test_report.test_time_limit = test.get("exec_time_limit") test_report.test_max_score = test["max_score"] test_report.score = result["score"] test_report.status = result["status"] test_report.time_used = result["time_used"] comment = result.get("result_string", "") if comment == "ok": # Annoying comment = "" test_report.comment = comment test_report.save() result["report_id"] = test_report.id group_results = env.get("group_results", {}) for group_name, group_result in group_results.iteritems(): if "report_id" in group_result: continue group_report = GroupReport(submission_report=submission_report) group_report.group = group_name group_report.score = group_result["score"] group_report.status = group_result["status"] group_report.save() group_result["result_id"] = group_report.id return env
def make_report(env, kind='NORMAL', **kwargs): """Builds entities for tests results in a database. Used ``environ`` keys: * ``tests`` * ``test_results`` * ``group_results`` * ``status`` * ``score`` Produced ``environ`` keys: * ``report_id``: id of the produced :class:`~oioioi.contests.models.SubmissionReport` """ submission = Submission.objects.get(id=env['submission_id']) submission_report = SubmissionReport(submission=submission) submission_report.kind = kind submission_report.save() status_report = ScoreReport(submission_report=submission_report) status_report.status = env['status'] status_report.score = env['score'] status_report.save() compilation_report = CompilationReport(submission_report=submission_report) compilation_report.status = env['compilation_result'] compilation_message = env['compilation_message'] if not isinstance(compilation_message, unicode): compilation_message = compilation_message.decode('utf8') compilation_report.compiler_output = compilation_message compilation_report.save() if env['compilation_result'] != 'OK': return env tests = env['tests'] test_results = env.get('test_results', {}) for test_name, result in test_results.iteritems(): test = tests[test_name] if 'report_id' in result: continue test_report = TestReport(submission_report=submission_report) test_report.test_id = test.get('id') test_report.test_name = test_name test_report.test_group = test['group'] test_report.test_time_limit = test.get('exec_time_limit') test_report.test_max_score = test['max_score'] test_report.score = result['score'] test_report.status = result['status'] test_report.time_used = result['time_used'] comment = result.get('result_string', '') if comment == 'ok': # Annoying comment = '' test_report.comment = comment test_report.save() result['report_id'] = test_report.id group_results = env.get('group_results', {}) for group_name, group_result in group_results.iteritems(): if 'report_id' in group_result: continue group_report = GroupReport(submission_report=submission_report) group_report.group = group_name group_report.score = group_result['score'] group_report.status = group_result['status'] group_report.save() group_result['result_id'] = group_report.id return env