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