From 456ffcf4432dcba0304ff3ec3e30540a65a45d6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bodor=20M=C3=A1t=C3=A9?= <bmate711@gmail.com> Date: Fri, 9 Feb 2018 15:09:41 +0100 Subject: [PATCH] update model & deadline validation --- src/homework/models.py | 23 +++------------------ src/homework/permissions.py | 1 - src/homework/serializers.py | 16 +++++++-------- src/homework/views.py | 41 ++++++++++++++++++------------------- 4 files changed, 31 insertions(+), 50 deletions(-) diff --git a/src/homework/models.py b/src/homework/models.py index 5a8b202..3f0933e 100644 --- a/src/homework/models.py +++ b/src/homework/models.py @@ -16,10 +16,6 @@ def validate_deadline(date): raise ValidationError(_('Date must be greater than now'), code='invalid') -# def validate_file_size(file): -# if file._size > __MAX_UPLOAD_SIZE: -# raise ValidationError(_('Please keep filesize under' + __MAX_UPLOAD_SIZE)) - class Task(models.Model): title = models.CharField(max_length=150) date = models.DateTimeField(auto_now_add=True, editable=False) @@ -34,17 +30,9 @@ class Task(models.Model): )], blank=True, ) - # files = myfields.RestrictedFileField( - # content_types=['image/png', 'image/jpeg', 'application/zip'], - # max_upload_size=MAX_UPLOAD_SIZE, - # blank=True, - # null=True, - # ) -# solution_file = models.BooleanField() -# -# def clean(self): -# if self.deadline <= timezone.now(): -# raise ValidationError(_('Invalid date'), code='invalid') + + def __str__(self): + return self.title class Solution(models.Model): @@ -62,8 +50,3 @@ class Solution(models.Model): blank=True, ) created_by = models.ForeignKey(User, on_delete=models.CASCADE) - # files = myfields.RestrictedFileField( - # content_types=['image/png', 'image/jpeg', 'application/zip'], - # max_upload_size=MAX_UPLOAD_SIZE, - # blank=True, - # ) diff --git a/src/homework/permissions.py b/src/homework/permissions.py index 659c3a6..0ef04b3 100644 --- a/src/homework/permissions.py +++ b/src/homework/permissions.py @@ -37,4 +37,3 @@ class IsStaffUser(BasePermission): def has_permission(self, request, view): return request.user.is_staff - \ No newline at end of file diff --git a/src/homework/serializers.py b/src/homework/serializers.py index 4ce68b4..6ca0659 100644 --- a/src/homework/serializers.py +++ b/src/homework/serializers.py @@ -17,11 +17,11 @@ class SolutionSerializer(serializers.ModelSerializer): extra_kwargs = {'created_by': {'default': serializers.CurrentUserDefault()}} fields = ('task', 'date', 'accepted', 'files', 'created_by') - def validate(self, attrs): - task = attrs['task'] - date = attrs['date'] - - if task.deadline < date: - raise serializers.ValidationError("You cannot submit homework after the deadline") - - return attrs + # def validate(self, attrs): + # task = attrs['task'] + # date = attrs['date'] + # + # if task.deadline < date: + # raise serializers.ValidationError("You cannot submit homework after the deadline") + # + # return attrs diff --git a/src/homework/views.py b/src/homework/views.py index e4da4ef..e778ca1 100644 --- a/src/homework/views.py +++ b/src/homework/views.py @@ -4,6 +4,8 @@ from rest_framework import status from rest_framework.decorators import list_route from django.http import Http404 from django.shortcuts import get_object_or_404 +import datetime +from django.utils.timezone import utc from . import serializers from . import models @@ -21,24 +23,21 @@ class SolutionsViewSet(viewsets.ModelViewSet): queryset = models.Solution.objects.all() permission_classes = (permissions.IsStaffOrReadOnlyForAuthenticated, ) - def create(self, request, *args, **kwargs): - serializer = self.get_serializer(data=request.data) - serializer.is_valid(raise_exception=True) - # serializer.validated_data['accepted'] = False - # task_id = serializer.validated_data.get('task') - # date = serializer.validated_data['date'] - # task = get_object_or_404(models.Task, pk=task_id) - # if task_id.deadline < date: - # return Http404("Deadline") - headers = self.get_success_headers(serializer.data) - return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers) - - def get_queryset(self): - user = self.request.user - if user.has_perm(permissions.IsStaffUser): - return models.Solution.objects.all() - - @list_route(methods=['get']) - def me(self, request): - serializer = self.serializer_class(request.user.profile) #request ? - return Response(serializer.data) \ No newline at end of file + def perform_create(self, serializer): + serializer.validated_data['accepted'] = False + task = serializer.validated_data['task'] + # task = get_object_or_404(models.Task, pk=task_id.id) + now = datetime.datetime.utcnow().replace(tzinfo=utc) + if task.deadline < now: + raise Http404("Deadline") + serializer.save() + + # def get_queryset(self): + # user = self.request.user + # if user.has_perm(permissions.IsStaffUser): + # return models.Solution.objects.all() + # + # @list_route(methods=['get']) + # def me(self, request): + # serializer = self.serializer_class(request.user.profile) #request ? + # return Response(serializer.data) \ No newline at end of file -- GitLab