def create_submission(self, request, problem_instance, form_data, judge_after_create=True, **kwargs): submission = ProgramSubmission( user=form_data.get('user', request.user), problem_instance=problem_instance, kind=form_data.get( 'kind', problem_instance.controller.get_default_submission_kind( request, problem_instance=problem_instance)), date=request.timestamp) file = form_data['file'] if file is None: lang_exts = get_allowed_languages_dict(problem_instance) langs_field_name = form_field_id_for_langs(problem_instance) extension = lang_exts[form_data[langs_field_name]][0] file = ContentFile(form_data['code'], '__pasted_code.' + extension) submission.source_file.save(file.name, file) submission.save() if judge_after_create: problem_instance.controller.judge(submission) return submission
def create_submission(self, request, problem_instance, form_data): submission = ProgramSubmission(user=request.user, problem_instance=problem_instance) file = form_data['file'] submission.source_file.save(file.name, file) submission.save() self.judge(submission)
def generate_user_output_view(request, testreport_id=None, submission_report_id=None): """Prepares re-submission for generating user outputs and runs judging. If there are no test reports' ids given as argument, then all tests from reports with the ``submission_report_id`` would be used for generating user outs. In that case ``submission_report_id`` is required. Note that it uses only tests without already generated outs. Also adjusts already generated outs visibility for users on tests originally generated by admin. """ assert testreport_id or submission_report_id, \ _("Not enough information given") # taking test report with given id if testreport_id is not None: testreport = get_object_or_404(TestReport, id=testreport_id) if submission_report_id is not None: # testreport_id is not related to given submission_report_id if submission_report_id != testreport.submission_report.id: raise SuspiciousOperation else: submission_report_id = testreport.submission_report.id testreports = [testreport] # taking all test reports related to submission report elif submission_report_id is not None: testreports = TestReport.objects \ .filter(submission_report__id=submission_report_id) # check download out permission submission_report = get_object_or_404(SubmissionReport, id=submission_report_id) _check_generate_out_permission(request, submission_report) # filtering tests for judge test_ids = _testreports_to_generate_outs(request, testreports) # creating re-submission with appropriate tests s_id = submission_report.submission.id submission = get_submission_or_error(request, s_id, submission_class=ProgramSubmission) if test_ids: # Note that submission comment should not be copied to re-submission! # It will be overwritten in handler anyway. resubmission = ProgramSubmission(problem_instance=submission. problem_instance, user=request.user, date=request.timestamp, kind='USER_OUTS', source_file=submission.source_file) resubmission.save() resubmission.problem_instance.controller.judge(resubmission, extra_args={'tests_subset': test_ids, 'submission_report_id': submission_report.id}) return redirect('submission', contest_id=request.contest.id, submission_id=submission.id)
def create_submission(self, request, problem_instance, form_data, judge_after_create=True, **kwargs): submission = ProgramSubmission( user=form_data.get('user', request.user), problem_instance=problem_instance, kind=form_data.get( 'kind', problem_instance.controller.get_default_submission_kind( request, problem_instance=problem_instance)), date=request.timestamp) file = form_data['file'] if file is None: lang_exts = getattr(settings, 'SUBMITTABLE_EXTENSIONS', {}) extension = lang_exts[form_data['prog_lang']][0] file = ContentFile(form_data['code'], '__pasted_code.' + extension) submission.source_file.save(file.name, file) submission.save() if judge_after_create: problem_instance.controller.judge(submission) return submission
def create_submission(self, request, problem_instance, form_data): submission = ProgramSubmission( user=form_data.get('user', request.user), problem_instance=problem_instance, kind=form_data.get('kind', 'NORMAL')) file = form_data['file'] submission.source_file.save(file.name, file) submission.save() self.judge(submission)
def create_submission(self, request, problem_instance, form_data, judge_after_create=True, **kwargs): submission = ProgramSubmission( user=form_data.get('user', request.user), problem_instance=problem_instance, kind=form_data.get('kind', self.get_default_submission_kind(request)), date=request.timestamp) file = form_data['file'] submission.source_file.save(file.name, file) submission.save() if judge_after_create: self.judge(submission) return submission
def create_submission(self, request, problem_instance, form_data, judge_after_create=True, **kwargs): submission = ProgramSubmission( user=form_data.get('user', request.user), problem_instance=problem_instance, kind=form_data.get('kind', problem_instance.controller.get_default_submission_kind( request, problem_instance=problem_instance)), date=request.timestamp ) file = form_data['file'] if file is None: lang_exts = getattr(settings, 'SUBMITTABLE_EXTENSIONS', {}) extension = lang_exts[form_data['prog_lang']][0] file = ContentFile(form_data['code'], '__pasted_code.' + extension) submission.source_file.save(file.name, file) submission.save() if judge_after_create: problem_instance.controller.judge(submission) return submission
def sync_submission(sio1_submission_id): """Sync submission (sio1_submission_id) to SIO2.""" sql = 'SELECT s.task, s.user, s.date, s.data, b.body FROM submits as s,' \ ' submits_bodies as b WHERE s.id = b.id AND b.id = %s' sync_env['sioCursor'].execute(sql, (sio1_submission_id,)) sio1_problem_id, sio1_user_id, sio1_date, sio1_filename, sio1_source \ = sync_env['sioCursor'].fetchone() problem_id = sync_env['reversed_problems'][str(sio1_problem_id)] problem = Problem.objects.get(id=problem_id) c = Contest.objects.get(id=sync_env['sio2_contest']) r = Round.objects.get(name=sync_env['sio2_round']) pi = ProblemInstance.objects.get(problem=problem, contest=c, round=r) sio1_user = get_sio1_user(sio1_user_id) sio2_user = sync_user(sio1_user) submission_file = ContentFile(sio1_source, name=sio1_filename) sio1_date = parse_datetime(str(sio1_date)).replace(tzinfo=LocalTimezone()) submission = ProgramSubmission(user=sio2_user, problem_instance=pi) submission.source_file.save(sio1_filename, submission_file) submission.date = sio1_date submission.save() c.controller.judge(submission) sql = 'UPDATE submits SET in_sio2 = %s WHERE id = %s' sync_env['sioCursor'].execute(sql, (submission.id, sio1_submission_id)) logger.info("Submission (id: %(id1)s, u: %(login)s, p: %(pshortname)s)" " synced to SIO2 (id: %(id2)s).", {'id1': sio1_submission_id, 'login': sio1_user['username'], 'pshortname': pi.short_name, 'id2': submission.id})