diff -r 80ce81208b08 -r 3051b847c124 server/python/django2/renkanmanager/api/views.py --- 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)