--- a/server/python2/django/renkanmanager/api/views.py Mon Jan 11 18:24:14 2016 +0100
+++ b/server/python2/django/renkanmanager/api/views.py Tue Jan 26 17:18:04 2016 +0100
@@ -20,7 +20,7 @@
CanEditWorkspace, CanDeleteWorkspace, CanCreateWorkspace, \
CanDeleteRevision
from renkanmanager.serializers import RenkanSerializer, RevisionSerializer, WorkspaceSerializer
-from renkanmanager.utils import LineNodePlacer, renkan_copier, renkan_deleter
+from renkanmanager.auth import CsrfExemptSessionAuthentication
from rest_framework import permissions, status
from rest_framework.response import Response
from rest_framework.views import APIView
@@ -43,19 +43,26 @@
else:
renkans = Renkan.objects.filter(workspace_guid=workspace_guid)
serializer = RenkanSerializer(renkans, many=True)
- return Response(serializer.data, status=status.HTTP_200_OK)
+ return Response(serializer.data, status=status.HTTP_200_OK, content_type='application/json')
def post(self, request, workspace_guid='', format=None):
create_data = request.data
# We check if the POST request is a copy request, either with ?source="id" query arg or with source_revision_guid present in the data
- source_revision_guid = request.GET.get("source", None) if request.GET.get("source", None) is not None else request.data.get("source_revision_guid", None)
+ source_renkan_guid = request.GET.get("source_renkan_guid", request.data.get("source_renkan_guid", None))
+ source_revision_guid = request.GET.get("source_revision_guid", request.data.get("source_revision_guid", None))
+ if source_renkan_guid is not None:
+ try:
+ source_renkan=Renkan.objects.get(renkan_guid=source_renkan_guid)
+ except Renkan.DoesNotExist:
+ return Response({'detail': 'Source renkan '+source_renkan_guid+' does not exist'}, status=status.HTTP_404_NOT_FOUND)
+ source_revision_guid = source_renkan.current_revision_guid
if source_revision_guid is not None:
try:
source_revision=Revision.objects.get(revision_guid=source_revision_guid)
except Revision.DoesNotExist:
return Response({'detail': 'Source revision '+source_revision_guid+' does not exist'}, status=status.HTTP_404_NOT_FOUND)
create_data["source_revision_guid"] = source_revision.revision_guid
- create_data["title"] = source_revision.title
+ create_data["title"] = request.data.get("title", source_revision.title)
create_data["content"] = source_revision.content
if workspace_guid:
try:
@@ -66,7 +73,7 @@
serializer = RenkanSerializer(data=create_data)
if serializer.is_valid():
serializer.save(creator=request.user)
- return Response(serializer.data, status=status.HTTP_201_CREATED)
+ return Response(serializer.data, status=status.HTTP_201_CREATED, content_type='application/json')
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
@@ -80,6 +87,12 @@
CanEditRenkan,
CanDeleteRenkan,
)
+ authentication_classes = (
+ CsrfExemptSessionAuthentication,
+ )
+ @csrf_exempt
+ def dispatch(self, *args, **kwargs):
+ return super(RenkanDetail, self).dispatch(*args, **kwargs)
def get_object(self, renkan_guid):
return Renkan.objects.get(renkan_guid=renkan_guid)
@@ -91,7 +104,9 @@
return Response({'detail': 'Renkan project '+renkan_guid+' does not exist'}, status=status.HTTP_404_NOT_FOUND)
self.check_object_permissions(request, renkan)
serializer = RenkanSerializer(renkan)
- return Response(serializer.data, status=status.HTTP_200_OK)
+ if {'true': True, 'false': False, "0": False, "1": True}.get(request.GET.get("content_only", "false").lower()):
+ 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')
def put(self, request, renkan_guid, format=None):
try:
@@ -99,10 +114,16 @@
except Renkan.DoesNotExist:
return Response({'detail': 'Renkan project '+renkan_guid+' does not exist'}, status=status.HTTP_404_NOT_FOUND)
self.check_object_permissions(request, renkan)
- serializer = RenkanSerializer(renkan, data=request.data)
+ if {'true': True, 'false': False, "0": False, "1": True}.get(request.GET.get("content_only", "false").lower()):
+ put_data = {}
+ put_data["content"] = json.dumps(request.data)
+ put_data["title"] = request.data.get("title", "")
+ else:
+ put_data = request.data
+ serializer = RenkanSerializer(renkan, data=put_data)
if serializer.is_valid():
serializer.save(updator=request.user)
- return Response(serializer.data, status=status.HTTP_200_OK)
+ return Response(serializer.data, status=status.HTTP_200_OK, content_type='application/json')
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def delete(self, request, renkan_guid, format=None):
@@ -139,7 +160,7 @@
serializer = WorkspaceSerializer(data=request.data)
if serializer.is_valid():
serializer.save(creator=request.user)
- return Response(serializer.data, status=status.HTTP_201_CREATED)
+ return Response(serializer.data, status=status.HTTP_201_CREATED, content_type='application/json')
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
class WorkspaceDetail(APIView):
@@ -162,7 +183,7 @@
return Response({'detail': 'Workspace '+workspace_guid+' does not exist.'}, status=status.HTTP_404_NOT_FOUND)
self.check_object_permissions(request, workspace)
serializer = WorkspaceSerializer(workspace)
- return Response(serializer.data, status=status.HTTP_200_OK)
+ return Response(serializer.data, status=status.HTTP_200_OK, content_type='application/json')
def put(self, request, workspace_guid, format=None):
try:
@@ -173,7 +194,7 @@
serializer = WorkspaceSerializer(workspace, data=request.data)
if serializer.is_valid():
serializer.save()
- return Response(serializer.data, status=status.HTTP_200_OK)
+ return Response(serializer.data, status=status.HTTP_200_OK, content_type='application/json')
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def delete(self, request, workspace_guid, format=None):
@@ -201,7 +222,7 @@
if not revisions:
return Response({'detail': 'Renkan project '+renkan_guid+' does not exist'}, status=status.HTTP_404_NOT_FOUND)
serializer = RevisionSerializer(revisions.all(), many=True)
- return Response(serializer.data, status=status.HTTP_200_OK)
+ return Response(serializer.data, status=status.HTTP_200_OK, content_type='application/json')
class RevisionDetail(APIView):
"""
@@ -225,7 +246,7 @@
return Response({'detail': 'Revision '+revision_guid+' does not exist'}, status=status.HTTP_404_NOT_FOUND)
self.check_object_permissions(request, revision)
serializer = RevisionSerializer(revision)
- return Response(serializer.data, status=status.HTTP_200_OK)
+ return Response(serializer.data, status=status.HTTP_200_OK, content_type='application/json')
def delete(self, request, renkan_guid, revision_guid, format=None):
revisions = self.get_queryset(renkan_guid)