server/python/django2/renkanmanager/api/views.py
changeset 618 3051b847c124
parent 615 f3875fbe206a
child 619 d427a6db1902
--- a/server/python/django2/renkanmanager/api/views.py	Tue Jun 21 10:30:08 2016 +0200
+++ b/server/python/django2/renkanmanager/api/views.py	Tue Jun 21 17:53:06 2016 +0200
@@ -15,10 +15,14 @@
 from django.http import Http404
 from django.http.response import HttpResponse, HttpResponseBadRequest
 from django.shortcuts import get_object_or_404, redirect
+from django.utils import dateparse
 from django.views.generic import View
 from django.conf import settings
+
 from renkanmanager.models import Renkan, Revision, Workspace
 from renkanmanager.serializers import RenkanSerializer, RevisionSerializer, WorkspaceSerializer
+from renkanmanager.utils import parse_bool
+
 from rest_framework import permissions, status
 from rest_framework.response import Response
 from rest_framework.views import APIView
@@ -42,7 +46,6 @@
 
     def post(self, request, workspace_guid='', format=None):
         create_data = {key:request.data[key] for key in request.data.keys()}
-        logger.debug("HELLO %r", create_data)
 
         source_renkan_guid_str = request.GET.get("source_renkan_id", request.data.get("source_renkan_id", None))
         source_revision_guid_str = request.GET.get("source_revision_id", request.data.get("source_revision_id", None))
@@ -69,7 +72,6 @@
             create_data["source_revision_id"] = source_revision.revision_guid
             create_data["title"] = request.data.get("title", source_revision.title)
             create_data["content"] = source_revision.content
-            logger.debug("SOURCE_REVISION CONTENT %r", create_data["content"])
 
         try:
             workspace_guid_uuid =  workspace_guid and uuid.UUID(workspace_guid) or None
@@ -119,7 +121,7 @@
 
         self.check_object_permissions(request, renkan)
         serializer = RenkanSerializer(renkan)
-        if {'true': True, 'false': False, "0": False, "1": True}.get(request.GET.get("content_only", "false").lower()):
+        if parse_bool(request.GET.get("content_only", "false")):
             return Response(json.loads(serializer.data["content"]), status=status.HTTP_200_OK, content_type='application/json')
         return Response(serializer.data, status=status.HTTP_200_OK, content_type='application/json')
 
@@ -134,20 +136,23 @@
         logger.debug("RENKAN PUT: permission? %r", request.user.has_perm("change_renkan", renkan))
         self.check_object_permissions(request, renkan)
         logger.debug("RENKAN PUT: PERMISSION GRANTED")
-        if {'true': True, 'false': False, "0": False, "1": True}.get(request.GET.get("content_only", "false").lower()):
+        if parse_bool(request.GET.get("content_only", "false")):
             put_data = {}
             put_data["content"] = json.dumps(request.data)
             put_data["title"] = request.data.get("title", "")
         else:
             put_data = request.data
-        if put_data.get("validation_timestamp", None) is None and put_data.get("content", None) is not None:
-            put_data["validation_timestamp"] = json.loads(put_data["content"]).get("updated", "")
-        serializer = RenkanSerializer(renkan, data=put_data)
+        validation_timestamp = request.GET.get("validation_timestamp")
+        if validation_timestamp is None and put_data.get("content") is not None:
+            validation_timestamp =  json.loads(put_data["content"]).get("updated", "")
+        if validation_timestamp:
+            validation_timestamp =  dateparse.parse_datetime(validation_timestamp)
+        create_new_revision = parse_bool(request.GET.get('create_new_revision', 'false'))
+        serializer = RenkanSerializer(renkan, data=put_data, validation_timestamp=validation_timestamp)
         if serializer.is_valid():
-            serializer.save(updator=request.user)
-            if {'true': True, 'false': False, "0": False, "1": True}.get(request.GET.get("content_only", "false").lower()):
+            serializer.save(updator=request.user, create_new_revision=create_new_revision)
+            if parse_bool(request.GET.get("content_only", "false")):
                 return Response(json.loads(serializer.data["content"]), status=status.HTTP_200_OK, content_type='application/json')
-            logger.debug("RENKAN PUT: SERIALIZER DATA %r", serializer.data)
             return Response(serializer.data, status=status.HTTP_200_OK, content_type='application/json')
         return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)