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: |