server/python/django2/renkanmanager/api/views.py
changeset 613 e00a24b711a0
parent 611 f0f07e2b841f
child 615 f3875fbe206a
equal deleted inserted replaced
612:aa4987fede52 613:e00a24b711a0
    21 from rest_framework import permissions, status
    21 from rest_framework import permissions, status
    22 from rest_framework.response import Response
    22 from rest_framework.response import Response
    23 from rest_framework.views import APIView
    23 from rest_framework.views import APIView
    24 
    24 
    25 logger = logging.getLogger(__name__)
    25 logger = logging.getLogger(__name__)
    26            
    26 
    27 class RenkanList(APIView):
    27 class RenkanList(APIView):
    28     """
    28     """
    29         View for listing renkans or posting new renkan
    29         View for listing renkans or posting new renkan
    30     """
    30     """
    31     
    31 
    32     queryset = Renkan.objects
    32     queryset = Renkan.objects
    33     
    33 
    34     def get(self, request, workspace_guid='', format=None):
    34     def get(self, request, workspace_guid='', format=None):
    35         if workspace_guid == '':
    35         if workspace_guid == '':
    36             renkans = self.queryset.all()
    36             renkans = self.queryset.all()
    37         else:
    37         else:
    38             renkans = self.queryset.filter(workspace__workspace_guid=workspace_guid)
    38             renkans = self.queryset.filter(workspace__workspace_guid=workspace_guid)
    39         serializer = RenkanSerializer(renkans, many=True)
    39         serializer = RenkanSerializer(renkans, many=True)
    40         return Response(serializer.data, status=status.HTTP_200_OK, content_type='application/json')    
    40         return Response(serializer.data, status=status.HTTP_200_OK, content_type='application/json')
    41     
    41 
    42     def post(self, request, workspace_guid='', format=None):
    42     def post(self, request, workspace_guid='', format=None):
    43         create_data = {key:request.data[key] for key in request.data.keys()}
    43         create_data = {key:request.data[key] for key in request.data.keys()}
    44         source_renkan_guid = request.GET.get("source_renkan_id", request.data.get("source_renkan_id", None))
    44         source_renkan_guid = request.GET.get("source_renkan_id", request.data.get("source_renkan_id", None))
    45         source_revision_guid = request.GET.get("source_revision_id", request.data.get("source_revision_id", None))
    45         source_revision_guid = request.GET.get("source_revision_id", request.data.get("source_revision_id", None))
    46         if source_renkan_guid is not None:
    46         if source_renkan_guid is not None:
    63             except Workspace.DoesNotExist:
    63             except Workspace.DoesNotExist:
    64                 return Response({'detail': 'Workspace '+workspace_guid+' does not exist'}, status=status.HTTP_404_NOT_FOUND)
    64                 return Response({'detail': 'Workspace '+workspace_guid+' does not exist'}, status=status.HTTP_404_NOT_FOUND)
    65             create_data["workspace_id"] = workspace_guid
    65             create_data["workspace_id"] = workspace_guid
    66         serializer = RenkanSerializer(data=create_data)
    66         serializer = RenkanSerializer(data=create_data)
    67         if serializer.is_valid():
    67         if serializer.is_valid():
    68             serializer.save(creator=request.user)     
    68             creator = request.user if request.user and not request.user.is_anonymous() else None
       
    69             serializer.save(creator=creator)
    69             return Response(serializer.data, status=status.HTTP_201_CREATED, content_type='application/json')
    70             return Response(serializer.data, status=status.HTTP_201_CREATED, content_type='application/json')
    70         return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
    71         return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
    71         
    72 
    72 
    73 
    73 class RenkanDetail(APIView):
    74 class RenkanDetail(APIView):
    74     """
    75     """
    75         View for retrieving, updating or deleting a single renkan
    76         View for retrieving, updating or deleting a single renkan
    76     """
    77     """
    77     lookup_field = "renkan_guid"
    78     lookup_field = "renkan_guid"
    78     queryset = Renkan.objects
    79     queryset = Renkan.objects
    79     
    80 
    80     def get_object(self, renkan_guid):
    81     def get_object(self, renkan_guid):
    81         return self.queryset.get(renkan_guid=renkan_guid)
    82         return self.queryset.get(renkan_guid=renkan_guid)
    82     
    83 
    83     def dispatch(self, *args, **kwargs):
    84     def dispatch(self, *args, **kwargs):
    84         return super(RenkanDetail, self).dispatch(*args, **kwargs)
    85         return super(RenkanDetail, self).dispatch(*args, **kwargs)
    85     
    86 
    86     def get(self, request, renkan_guid, format=None):
    87     def get(self, request, renkan_guid, format=None):
    87         try:
    88         try:
    88             renkan = self.get_object(renkan_guid=renkan_guid)
    89             renkan = self.get_object(renkan_guid=renkan_guid)
    89         except Renkan.DoesNotExist:
    90         except Renkan.DoesNotExist:
    90             return Response({'detail': 'Renkan project '+renkan_guid+' does not exist'}, status=status.HTTP_404_NOT_FOUND)
    91             return Response({'detail': 'Renkan project '+renkan_guid+' does not exist'}, status=status.HTTP_404_NOT_FOUND)
   131 
   132 
   132 class WorkspaceList(APIView):
   133 class WorkspaceList(APIView):
   133     """
   134     """
   134         View for listing workspaces or creating new workspace
   135         View for listing workspaces or creating new workspace
   135     """
   136     """
   136     
   137 
   137     queryset = Workspace.objects
   138     queryset = Workspace.objects
   138     
   139 
   139     def get(self, request, format=None):
   140     def get(self, request, format=None):
   140         workspaces = self.queryset.all()
   141         workspaces = self.queryset.all()
   141         serializer = WorkspaceSerializer(workspaces, many=True)
   142         serializer = WorkspaceSerializer(workspaces, many=True)
   142         return Response(serializer.data)
   143         return Response(serializer.data)
   143 
   144 
   144     def post(self, request, format=None):
   145     def post(self, request, format=None):
   145         serializer = WorkspaceSerializer(data=request.data)
   146         serializer = WorkspaceSerializer(data=request.data)
   146         if serializer.is_valid():
   147         if serializer.is_valid():
   147             serializer.save(creator=request.user)
   148             creator = request.user if request.user and not request.user.is_anonymous() else None
       
   149             serializer.save(creator=creator)
   148             return Response(serializer.data, status=status.HTTP_201_CREATED, content_type='application/json')
   150             return Response(serializer.data, status=status.HTTP_201_CREATED, content_type='application/json')
   149         return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
   151         return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
   150 
   152 
   151 class WorkspaceDetail(APIView):
   153 class WorkspaceDetail(APIView):
   152     """
   154     """
   153         View for retrieving, updating or deleting a single workspace
   155         View for retrieving, updating or deleting a single workspace
   154     """
   156     """
   155     
   157 
   156     lookup_field = "workspace_guid"
   158     lookup_field = "workspace_guid"
   157     queryset = Workspace.objects
   159     queryset = Workspace.objects
   158     
   160 
   159     def get_object(self, workspace_guid):
   161     def get_object(self, workspace_guid):
   160         return self.queryset.get(workspace_guid=workspace_guid)
   162         return self.queryset.get(workspace_guid=workspace_guid)
   161     
   163 
   162     def get(self, request, workspace_guid, format=None):
   164     def get(self, request, workspace_guid, format=None):
   163         try:
   165         try:
   164             workspace = self.get_object(workspace_guid=workspace_guid)
   166             workspace = self.get_object(workspace_guid=workspace_guid)
   165         except Workspace.DoesNotExist:
   167         except Workspace.DoesNotExist:
   166             return Response({'detail': 'Workspace '+workspace_guid+' does not exist.'}, status=status.HTTP_404_NOT_FOUND)
   168             return Response({'detail': 'Workspace '+workspace_guid+' does not exist.'}, status=status.HTTP_404_NOT_FOUND)
   193 
   195 
   194 class RevisionList(APIView):
   196 class RevisionList(APIView):
   195     """
   197     """
   196         View for listing revisions from a given renkan
   198         View for listing revisions from a given renkan
   197     """
   199     """
   198     
   200 
   199     def get_queryset(self, renkan_guid=""):
   201     def get_queryset(self, renkan_guid=""):
   200         if renkan_guid:
   202         if renkan_guid:
   201             return Revision.objects.filter(parent_renkan__renkan_guid=renkan_guid)
   203             return Revision.objects.filter(parent_renkan__renkan_guid=renkan_guid)
   202         else:
   204         else:
   203             return Revision.objects
   205             return Revision.objects
   204     
   206 
   205     def get(self, request, renkan_guid, format=None):
   207     def get(self, request, renkan_guid, format=None):
   206         revisions = self.get_queryset(renkan_guid)
   208         revisions = self.get_queryset(renkan_guid)
   207         if not revisions:
   209         if not revisions:
   208             return Response({'detail': 'Renkan project '+renkan_guid+' does not exist'}, status=status.HTTP_404_NOT_FOUND)
   210             return Response({'detail': 'Renkan project '+renkan_guid+' does not exist'}, status=status.HTTP_404_NOT_FOUND)
   209         serializer = RevisionSerializer(revisions.all(), many=True)
   211         serializer = RevisionSerializer(revisions.all(), many=True)
   211 
   213 
   212 class RevisionDetail(APIView):
   214 class RevisionDetail(APIView):
   213     """
   215     """
   214         View for retrieving or deleting a single revision from a given renkan
   216         View for retrieving or deleting a single revision from a given renkan
   215     """
   217     """
   216     
   218 
   217     lookup_field = "revision_guid"
   219     lookup_field = "revision_guid"
   218     
   220 
   219     def get_queryset(self, renkan_guid=""):
   221     def get_queryset(self, renkan_guid=""):
   220         if renkan_guid:
   222         if renkan_guid:
   221             return Revision.objects.filter(parent_renkan__renkan_guid=renkan_guid)
   223             return Revision.objects.filter(parent_renkan__renkan_guid=renkan_guid)
   222         else:
   224         else:
   223             return Revision.objects
   225             return Revision.objects
   224     
   226 
   225     def get(self, request, renkan_guid, revision_guid, format=None):
   227     def get(self, request, renkan_guid, revision_guid, format=None):
   226         revisions = self.get_queryset(renkan_guid)
   228         revisions = self.get_queryset(renkan_guid)
   227         if not revisions:
   229         if not revisions:
   228             return Response({'detail': 'Renkan project '+renkan_guid+' does not exist'}, status=status.HTTP_404_NOT_FOUND)
   230             return Response({'detail': 'Renkan project '+renkan_guid+' does not exist'}, status=status.HTTP_404_NOT_FOUND)
   229         try:
   231         try: