Source code for oioioi.similarsubmits.views

from django.contrib import messages
from django.shortcuts import get_object_or_404, redirect
from django.template.response import TemplateResponse
from django.utils.translation import gettext_lazy as _
from django.utils.translation import ngettext_lazy
from django.views.decorators.http import require_POST

from oioioi.base.permissions import enforce_condition
from oioioi.contests.utils import contest_exists, is_contest_admin
from oioioi.similarsubmits.forms import BulkAddSubmissionsSimilarityForm
from oioioi.similarsubmits.models import (
    SubmissionsSimilarityEntry,
    SubmissionsSimilarityGroup,
)
from oioioi.similarsubmits.utils import is_correct_submissionssimilarity


@enforce_condition(contest_exists & is_contest_admin)
[docs]def bulk_add_similarities_view(request): if request.method == 'POST': form = BulkAddSubmissionsSimilarityForm(request, request.POST) if form.is_valid(): groups = form.cleaned_data['similar_groups'] for group in groups: entries = SubmissionsSimilarityEntry.objects.filter( submission__in=group ).select_related('group') if entries.exists(): groups = set([entry.group for entry in entries]) group_model = groups.pop() # If group contains submissions from multiple existing # groups then merge all of them. for g in groups: for e in g.submissions.all(): e.group = group_model e.save() g.delete() else: group_model = SubmissionsSimilarityGroup(contest=request.contest) group_model.save() for submission in group: SubmissionsSimilarityEntry.objects.get_or_create( group=group_model, submission=submission ) messages.success( request, ngettext_lazy( "Created one group", "Created %(groups_count)d groups", len(groups) ) % {'groups_count': len(groups)}, ) return redirect( 'oioioiadmin:similarsubmits_' 'submissionssimilaritygroup_changelist' ) else: form = BulkAddSubmissionsSimilarityForm(request) return TemplateResponse(request, 'similarsubmits/bulk_add.html', {'form': form})
@require_POST @enforce_condition(contest_exists & is_contest_admin) @enforce_condition(is_correct_submissionssimilarity)
[docs]def mark_guilty_view(request, entry_id): entry = get_object_or_404(SubmissionsSimilarityEntry, id=entry_id) if entry.submission.kind == 'IGNORED_HIDDEN': messages.error( request, _( "You can't mark a removed submission as" " guilty because the author will not be able" " to see it." ), ) else: entry.guilty = True entry.save() return redirect( 'submission', contest_id=request.contest.id, submission_id=entry.submission_id )
@require_POST @enforce_condition(contest_exists & is_contest_admin) @enforce_condition(is_correct_submissionssimilarity)
[docs]def mark_not_guilty_view(request, entry_id): entry = get_object_or_404(SubmissionsSimilarityEntry, id=entry_id) entry.guilty = False entry.save() return redirect( 'submission', contest_id=request.contest.id, submission_id=entry.submission_id )