Exemple #1
0
def review_task(request, task_pk):
    task = get_object_or_404(Task, pk=task_pk)
    PointsFormSet = formset_factory(BasePointForm, formset=BasePointFormSet, extra=0)

    if (
        not request.user.is_superuser
        and task.round.semester.competition.organizers_group not in request.user.groups.all()
    ):
        raise PermissionDenied

    form = None
    form_set = None

    if request.method == "POST":
        if request.POST.get("Upload", None):
            form = UploadZipForm(request.POST, request.FILES)
            if form.is_valid():
                path_to_zip = form.save(request.user, task)

                if path_to_zip:
                    request.session["review_archive"] = path_to_zip
                    messages.add_message(
                        request, messages.SUCCESS, _("Successfully uploaded a zip file.")
                    )
                    return redirect("admin:review_submit_zip", task.pk)
        if "points_submit" in request.POST:
            form_set = PointsFormSet(
                request.POST, form_kwargs={"max_points": task.description_points}
            )
            if form_set.is_valid():
                form_set.save(task)
                messages.add_message(
                    request, messages.SUCCESS, _("Points and comments were successfully updated.")
                )
                return redirect("admin:review_task", task.pk)

    users = get_latest_submits_for_task(task)
    users_list = list(users.keys())

    if not form:
        form = UploadZipForm()
    if not form_set:
        data = []
        for user in users_list:
            value = users[user]
            form_data = {"user": user}
            if "review" in value:
                form_data["points"] = value["review"].points
                form_data["reviewer_comment"] = value["review"].reviewer_comment
            data.append(form_data)
        form_set = PointsFormSet(initial=data, form_kwargs={"max_points": task.description_points})
    for i in range(0, len(users_list)):
        users[users_list[i]]["form"] = form_set.forms[i]

    context = {"task": task, "users": users, "form": form, "form_set": form_set}

    return render(request, "admin/review_form.html", context)
Exemple #2
0
 def test_no_zip_file_uploaded_is_handled_correctly(self):
     z = UploadZipForm(data={}, files={})
     self.assertFalse(z.is_valid())
Exemple #3
0
 def test_zip_extension_check_is_case_insensitive(self):
     z = UploadZipForm(
         data={}, files={"file": SimpleUploadedFile("file.ZIP", b"abc")})
     self.assertTrue(z.is_valid())
Exemple #4
0
 def test_only_zip_extension_is_valid(self):
     z = UploadZipForm(
         data={}, files={"file": SimpleUploadedFile("file.wtf", b"abc")})
     self.assertFalse(z.is_valid())
Exemple #5
0
def review_task(request, task_pk):
    task = get_object_or_404(Task, pk=task_pk)
    PointsFormSet = formset_factory(BasePointForm,
                                    formset=BasePointFormSet,
                                    extra=0)

    if (not request.user.is_superuser
            and task.round.semester.competition.organizers_group
            not in request.user.groups.all()):
        raise PermissionDenied

    form = None
    form_set = None

    if request.method == 'POST':
        if request.POST.get('Upload', None):
            form = UploadZipForm(request.POST, request.FILES)
            if form.is_valid():
                path_to_zip = form.save(request.user, task)

                if path_to_zip:
                    request.session['review_archive'] = path_to_zip
                    messages.add_message(
                        request, messages.SUCCESS,
                        _('Successfully uploaded a zip file.'))
                    return redirect('admin:review_submit_zip', task.pk)
        if 'points_submit' in request.POST:
            form_set = PointsFormSet(
                request.POST,
                form_kwargs={'max_points': task.description_points})
            if form_set.is_valid():
                form_set.save(task)
                messages.add_message(
                    request, messages.SUCCESS,
                    _('Points and comments were successfully updated.'))
                return redirect('admin:review_task', task.pk)

    users = get_latest_submits_for_task(task)
    users_list = list(users.keys())

    if not form:
        form = UploadZipForm()
    if not form_set:
        data = []
        for user in users_list:
            value = users[user]
            form_data = {'user': user}
            if 'review' in value:
                form_data['points'] = value['review'].points
                form_data['reviewer_comment'] = value[
                    'review'].reviewer_comment
            data.append(form_data)
        form_set = PointsFormSet(
            initial=data, form_kwargs={'max_points': task.description_points})
    for i in range(0, len(users_list)):
        users[users_list[i]]['form'] = form_set.forms[i]

    context = {
        'task': task,
        'users': users,
        'form': form,
        'form_set': form_set,
    }

    return render(request, 'admin/review_form.html', context)