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)
def test_no_zip_file_uploaded_is_handled_correctly(self): z = UploadZipForm(data={}, files={}) self.assertFalse(z.is_valid())
def test_zip_extension_check_is_case_insensitive(self): z = UploadZipForm( data={}, files={"file": SimpleUploadedFile("file.ZIP", b"abc")}) self.assertTrue(z.is_valid())
def test_only_zip_extension_is_valid(self): z = UploadZipForm( data={}, files={"file": SimpleUploadedFile("file.wtf", b"abc")}) self.assertFalse(z.is_valid())
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)