Source code for oioioi.plagiarism.views
from django.shortcuts import redirect
from django.template.response import TemplateResponse
from oioioi.base.permissions import enforce_condition
from oioioi.contests.utils import contest_exists, is_contest_admin
from oioioi.exportszu.utils import SubmissionsWithUserDataCollector
from oioioi.plagiarism.forms import MossSubmitForm
from oioioi.plagiarism.utils import MossClient, MossException, submit_and_get_url
[docs]def _make_moss_form(request, *args, **kwargs):
form = MossSubmitForm(request.contest.probleminstance_set, *args, **kwargs)
return form
@enforce_condition(contest_exists & is_contest_admin)
[docs]def moss_submit(request):
if request.method == 'POST':
form = _make_moss_form(request, request.POST)
if form.is_valid():
problem_instance = form.cleaned_data['problem_instance']
language = form.cleaned_data['language']
only_final = form.cleaned_data['only_final']
userid = form.cleaned_data['userid']
collector = SubmissionsWithUserDataCollector(
request.contest,
problem_instance=problem_instance,
language=language,
only_final=only_final,
)
client = MossClient(userid, language)
try:
url = submit_and_get_url(client, collector)
except MossException as e:
return TemplateResponse(
request,
'plagiarism/moss_submit.html',
{'form': form, 'moss_error': e.message},
)
return redirect(url)
else:
form = _make_moss_form(request)
return TemplateResponse(request, 'plagiarism/moss_submit.html', {'form': form})