--- a/server/python/django2/renkanmanager/api/views.py Wed Apr 27 16:36:30 2016 +0200
+++ b/server/python/django2/renkanmanager/api/views.py Tue May 03 14:32:28 2016 +0200
@@ -9,6 +9,7 @@
import logging
import uuid
+from django.db import transaction
from django.core.urlresolvers import reverse
from django.http import Http404
from django.http.response import HttpResponse, HttpResponseBadRequest
@@ -34,7 +35,7 @@
if workspace_guid == '':
renkans = self.queryset.all()
else:
- renkans = self.queryset.filter(workspace_guid=workspace_guid)
+ renkans = self.queryset.filter(workspace__workspace_guid=workspace_guid)
serializer = RenkanSerializer(renkans, many=True)
return Response(serializer.data, status=status.HTTP_200_OK, content_type='application/json')
@@ -47,7 +48,7 @@
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
+ source_revision_guid = source_renkan.current_revision.revision_guid
if source_revision_guid is not None:
try:
source_revision=Revision.objects.get(revision_guid=source_revision_guid)
@@ -62,10 +63,9 @@
except Workspace.DoesNotExist:
return Response({'detail': 'Workspace '+workspace_guid+' does not exist'}, status=status.HTTP_404_NOT_FOUND)
create_data["workspace_id"] = workspace_guid
-
serializer = RenkanSerializer(data=create_data)
if serializer.is_valid():
- serializer.save(creator=request.user)
+ serializer.save(creator=request.user)
return Response(serializer.data, status=status.HTTP_201_CREATED, content_type='application/json')
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
@@ -81,7 +81,6 @@
return self.queryset.get(renkan_guid=renkan_guid)
def dispatch(self, *args, **kwargs):
- logger.debug("TEST 1 21 12 TEST")
return super(RenkanDetail, self).dispatch(*args, **kwargs)
def get(self, request, renkan_guid, format=None):
@@ -89,10 +88,7 @@
renkan = self.get_object(renkan_guid=renkan_guid)
except Renkan.DoesNotExist:
return Response({'detail': 'Renkan project %r does not exist'.format(renkan_guid)}, status=status.HTTP_404_NOT_FOUND)
- logger.debug("RENKAN GET %r : CHECKING OBJECT PERMISSION", renkan_guid)
- logger.debug("RENKAN GET: permission? %r", request.user.has_perm("view_renkan", renkan))
self.check_object_permissions(request, renkan)
- logger.debug("RENKAN GET: PERMISSION GRANTED")
serializer = RenkanSerializer(renkan)
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')
@@ -119,19 +115,13 @@
return Response(serializer.data, status=status.HTTP_200_OK, content_type='application/json')
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
+ @transaction.atomic
def delete(self, request, renkan_guid, format=None):
try:
to_delete_renkan = self.get_object(renkan_guid=renkan_guid)
except Renkan.DoesNotExist:
return Response({'detail': 'Renkan project '+renkan_guid+' does not exist'}, status=status.HTTP_404_NOT_FOUND)
self.check_object_permissions(request, to_delete_renkan)
- renkan_revisions = Revision.objects.filter(parent_renkan_guid = to_delete_renkan.renkan_guid)
- for child_revision in renkan_revisions:
- # Deleting reference to revision in renkans copied from this revision
- for related_renkan in self.queryset.filter(source_revision_guid=child_revision.revision_guid):
- related_renkan.source_revision_guid = ''
- related_renkan.save()
- child_revision.delete()
to_delete_renkan.delete()
return Response(status=status.HTTP_204_NO_CONTENT)
@@ -204,7 +194,7 @@
def get_queryset(self, renkan_guid=""):
if renkan_guid:
- return Revision.objects.filter(parent_renkan_guid=renkan_guid)
+ return Revision.objects.filter(parent_renkan__renkan_guid=renkan_guid)
else:
return Revision.objects
@@ -224,7 +214,7 @@
def get_queryset(self, renkan_guid=""):
if renkan_guid:
- return Revision.objects.filter(parent_renkan_guid=renkan_guid)
+ return Revision.objects.filter(parent_renkan__renkan_guid=renkan_guid)
else:
return Revision.objects
@@ -253,10 +243,5 @@
return Response({'detail': 'You cannot delete the last remaining revision of a renkan from the Revision API. Try deleting the parent Renkan with the Renkan API'}, status=status.HTTP_400_BAD_REQUEST)
if revision.is_current_revision:
return Response({'detail': 'You cannot delete the current revision of a renkan from the Revision API.'}, status=status.HTTP_400_BAD_REQUEST)
-
- # Deleting reference to revision in renkans copied from this revision
- for related_renkan in Renkan.objects.filter(source_revision_guid=revision_guid):
- related_renkan.source_revision_guid = ''
- related_renkan.save()
revision.delete()
return Response(status=status.HTTP_204_NO_CONTENT)