def save(self, task): users = get_latest_submits_for_task(task) for form_data in self.cleaned_data: user = form_data["user"] if user in users: value = users[user] if form_data["points"] is not None: if "review" in value: edit_review( None, None, value["review"], user, form_data["points"], form_data["reviewer_comment"], ) else: submit_review( None, None, task, user, form_data["points"], form_data["reviewer_comment"], value["description"], ) else: if "review" in value: submit = value["review"] submit.points = 0 submit.testing_status = SUBMIT_STATUS_IN_QUEUE submit.save()
def test_empty_points(self): form_set = self.form_set_class( self.data, form_kwargs={"max_points": self.task.description_points}) self.assertTrue(form_set.is_valid()) form_set.save(self.task) users = helpers.get_latest_submits_for_task(self.task) self.assertNotIn("review", users[self.user1])
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_add_new_reviews(self): self.data["form-0-points"] = 4 self.data["form-0-reviewer_comment"] = "Nic moc" form_set = self.form_set_class( self.data, form_kwargs={"max_points": self.task.description_points} ) self.assertTrue(form_set.is_valid()) form_set.save(self.task) users = helpers.get_latest_submits_for_task(self.task) self.assertEqual(users[self.user1]["review"].points, 4) self.assertEqual(users[self.user1]["review"].reviewer_comment, "Nic moc")
def test_add_new_reviews(self): self.data['form-0-points'] = 4 self.data['form-0-reviewer_comment'] = 'Nic moc' form_set = self.form_set_class( self.data, form_kwargs={'max_points': self.task.description_points}) self.assertTrue(form_set.is_valid()) form_set.save(self.task) users = helpers.get_latest_submits_for_task(self.task) self.assertEqual(users[self.user1]['review'].points, 4) self.assertEqual(users[self.user1]['review'].reviewer_comment, 'Nic moc')
def test_empty_points_with_review(self): Submit.objects.create( task=self.task, user=self.user1, submit_type=submit_constants.SUBMIT_TYPE_DESCRIPTION, points=7, testing_status=submit_constants.SUBMIT_STATUS_REVIEWED, reviewer_comment='First comment') form_set = self.form_set_class( self.data, form_kwargs={'max_points': self.task.description_points}) self.assertTrue(form_set.is_valid()) form_set.save(self.task) users = helpers.get_latest_submits_for_task(self.task) self.assertNotIn('review', users[self.user1])
def test_edit_review(self): Submit.objects.create( task=self.task, user=self.user1, submit_type=submit_constants.SUBMIT_TYPE_DESCRIPTION, points=7, testing_status=submit_constants.SUBMIT_STATUS_REVIEWED, reviewer_comment="First comment", ) self.data["form-0-points"] = 9 self.data["form-0-reviewer_comment"] = "Second comment" form_set = self.form_set_class( self.data, form_kwargs={"max_points": self.task.description_points} ) self.assertTrue(form_set.is_valid()) form_set.save(self.task) users = helpers.get_latest_submits_for_task(self.task) self.assertEqual(users[self.user1]["review"].points, 9) self.assertEqual(users[self.user1]["review"].reviewer_comment, "Second comment")
def save(self, task): users = get_latest_submits_for_task(task) for form_data in self.cleaned_data: user = form_data['user'] if user in users: value = users[user] if form_data['points'] is not None: if 'review' in value: edit_review(None, None, value['review'], user, form_data['points'], form_data['reviewer_comment']) else: submit_review(None, None, task, user, form_data['points'], form_data['reviewer_comment'], value['description']) else: if 'review' in value: submit = value['review'] submit.points = 0 submit.testing_status = SUBMIT_STATUS_IN_QUEUE submit.save()
def download_all_submits(request, task_pk, download_reviews=False): task = get_object_or_404(Task, pk=task_pk) submits = get_latest_submits_for_task(task).values() if (not request.user.is_superuser and task.round.semester.competition.organizers_group not in request.user.groups.all()): raise PermissionDenied path = os.path.join(settings.SUBMIT_PATH, "reviews") if not os.path.isdir(path): os.makedirs(path) os.chmod(path, 0o777) path = os.path.join( path, "Uloha-%s-%s-%s.zip" % (slugify(task.name), int(time()), slugify(request.user.username)), ) errors = [] with zipfile.ZipFile(path, "w") as zipper: for i, user in enumerate(submits): if "description" in user: submit = (user["review"] if download_reviews and "review" in user else user["description"]) description_submit_id = submit.pk if not os.path.isfile(submit.filepath): errors += [ _("Missing file of user %s") % submit.user.get_full_name() ] else: zipper.write(submit.filepath, submit_download_filename(submit, i)) last_review_points = str(int( user["review"].points)) if "review" in user else "" last_review_comment = user[ "review"].reviewer_comment if "review" in user else "" zipper.writestr( submit_directory(submit, i) + REVIEW_POINTS_FILENAME, last_review_points) zipper.writestr( submit_directory(submit, i) + REVIEW_COMMENT_FILENAME, last_review_comment.encode("utf-8"), ) if "sources" in user: for submit in user["sources"]: if os.path.isfile(submit.filepath): zipper.write( submit.filepath, submit_source_download_filename( submit, description_submit_id, i), ) else: errors += [ _("Missing source file of user %s") % submit.user.get_full_name() ] if submit.protocol: zipper.writestr( submit.protocol, submit_protocol_download_filename( submit, description_submit_id, i), ) else: errors += [ _("Missing protocol of user %s") % submit.user.get_full_name() ] if errors: zipper.writestr(REVIEW_ERRORS_FILENAME, "\n".join(errors).encode("utf8")) return sendfile(request, path, attachment=True)
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)