server/python/django2/renkanmanager/api/views.py
changeset 610 b9edc1c1538a
parent 608 8fd40139827c
child 611 f0f07e2b841f
--- 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)