| author | ymh <ymh.work@gmail.com> |
| Mon, 20 Jun 2016 14:44:40 +0200 | |
| changeset 615 | f3875fbe206a |
| parent 613 | e00a24b711a0 |
| child 618 | 3051b847c124 |
| permissions | -rw-r--r-- |
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
1 |
# -*- coding: utf-8 -*- |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
2 |
''' |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
3 |
Created on Jul 01, 2014 |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
4 |
|
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
5 |
@author: tc |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
6 |
''' |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
7 |
from datetime import datetime |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
8 |
import json |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
9 |
import logging |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
10 |
import uuid |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
11 |
|
|
610
b9edc1c1538a
reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents:
608
diff
changeset
|
12 |
from django.db import transaction |
|
615
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
13 |
from django.core.exceptions import ObjectDoesNotExist |
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
14 |
from django.core.urlresolvers import reverse |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
15 |
from django.http import Http404 |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
16 |
from django.http.response import HttpResponse, HttpResponseBadRequest |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
17 |
from django.shortcuts import get_object_or_404, redirect |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
18 |
from django.views.generic import View |
|
608
8fd40139827c
permission implementation has to be client-side and not in the generic api package + deleted duplicate migration
durandn
parents:
602
diff
changeset
|
19 |
from django.conf import settings |
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
20 |
from renkanmanager.models import Renkan, Revision, Workspace |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
21 |
from renkanmanager.serializers import RenkanSerializer, RevisionSerializer, WorkspaceSerializer |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
22 |
from rest_framework import permissions, status |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
23 |
from rest_framework.response import Response |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
24 |
from rest_framework.views import APIView |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
25 |
|
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
26 |
logger = logging.getLogger(__name__) |
|
613
e00a24b711a0
make renkanmanager test run locally
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
27 |
|
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
28 |
class RenkanList(APIView): |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
29 |
""" |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
30 |
View for listing renkans or posting new renkan |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
31 |
""" |
|
613
e00a24b711a0
make renkanmanager test run locally
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
32 |
|
|
608
8fd40139827c
permission implementation has to be client-side and not in the generic api package + deleted duplicate migration
durandn
parents:
602
diff
changeset
|
33 |
queryset = Renkan.objects |
|
613
e00a24b711a0
make renkanmanager test run locally
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
34 |
|
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
35 |
def get(self, request, workspace_guid='', format=None): |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
36 |
if workspace_guid == '': |
|
608
8fd40139827c
permission implementation has to be client-side and not in the generic api package + deleted duplicate migration
durandn
parents:
602
diff
changeset
|
37 |
renkans = self.queryset.all() |
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
38 |
else: |
|
610
b9edc1c1538a
reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents:
608
diff
changeset
|
39 |
renkans = self.queryset.filter(workspace__workspace_guid=workspace_guid) |
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
40 |
serializer = RenkanSerializer(renkans, many=True) |
|
613
e00a24b711a0
make renkanmanager test run locally
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
41 |
return Response(serializer.data, status=status.HTTP_200_OK, content_type='application/json') |
|
e00a24b711a0
make renkanmanager test run locally
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
42 |
|
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
43 |
def post(self, request, workspace_guid='', format=None): |
|
608
8fd40139827c
permission implementation has to be client-side and not in the generic api package + deleted duplicate migration
durandn
parents:
602
diff
changeset
|
44 |
create_data = {key:request.data[key] for key in request.data.keys()} |
|
615
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
45 |
logger.debug("HELLO %r", create_data) |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
46 |
|
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
47 |
source_renkan_guid_str = request.GET.get("source_renkan_id", request.data.get("source_renkan_id", None)) |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
48 |
source_revision_guid_str = request.GET.get("source_revision_id", request.data.get("source_revision_id", None)) |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
49 |
try: |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
50 |
source_renkan_guid = source_renkan_guid_str and uuid.UUID(source_renkan_guid_str) or None |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
51 |
source_revision_guid = source_revision_guid_str and uuid.UUID(source_revision_guid_str) or None |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
52 |
except ValueError: |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
53 |
return Response({'detail': 'Source renkan guid %s or source revision guid %s not correctly formatted'%(source_revision_guid_str, source_revision_guid_str)}, status=status.HTTP_400_BAD_REQUEST) |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
54 |
|
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
55 |
source_revision = None |
|
588
95536fa18d0d
Minor adjustements to properly interact with Renkan client
durandn
parents:
587
diff
changeset
|
56 |
if source_renkan_guid is not None: |
|
95536fa18d0d
Minor adjustements to properly interact with Renkan client
durandn
parents:
587
diff
changeset
|
57 |
try: |
|
95536fa18d0d
Minor adjustements to properly interact with Renkan client
durandn
parents:
587
diff
changeset
|
58 |
source_renkan=Renkan.objects.get(renkan_guid=source_renkan_guid) |
|
95536fa18d0d
Minor adjustements to properly interact with Renkan client
durandn
parents:
587
diff
changeset
|
59 |
except Renkan.DoesNotExist: |
|
615
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
60 |
return Response({'detail': 'Source renkan %s does not exist'%source_renkan_guid}, status=status.HTTP_404_NOT_FOUND) |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
61 |
source_revision = source_renkan.current_revision |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
62 |
elif source_revision_guid is not None: |
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
63 |
try: |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
64 |
source_revision=Revision.objects.get(revision_guid=source_revision_guid) |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
65 |
except Revision.DoesNotExist: |
|
615
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
66 |
return Response({'detail': 'Source revision %s does not exist'%source_revision_guid}, status=status.HTTP_404_NOT_FOUND) |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
67 |
|
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
68 |
if source_revision: |
|
589
0ae11aa255a3
Moved python2/django into a django2 folder for consistency + clarified serializers fields name
durandn
parents:
588
diff
changeset
|
69 |
create_data["source_revision_id"] = source_revision.revision_guid |
|
588
95536fa18d0d
Minor adjustements to properly interact with Renkan client
durandn
parents:
587
diff
changeset
|
70 |
create_data["title"] = request.data.get("title", source_revision.title) |
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
71 |
create_data["content"] = source_revision.content |
|
615
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
72 |
logger.debug("SOURCE_REVISION CONTENT %r", create_data["content"]) |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
73 |
|
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
74 |
try: |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
75 |
workspace_guid_uuid = workspace_guid and uuid.UUID(workspace_guid) or None |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
76 |
except ValueError: |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
77 |
return Response({'detail': 'workspace guid %r not correctly formatted'%workspace_guid}, status=status.HTTP_400_BAD_REQUEST) |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
78 |
|
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
79 |
if workspace_guid_uuid: |
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
80 |
try: |
|
615
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
81 |
workspace = Workspace.objects.get(workspace_guid=workspace_guid_uuid) |
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
82 |
except Workspace.DoesNotExist: |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
83 |
return Response({'detail': 'Workspace '+workspace_guid+' does not exist'}, status=status.HTTP_404_NOT_FOUND) |
|
589
0ae11aa255a3
Moved python2/django into a django2 folder for consistency + clarified serializers fields name
durandn
parents:
588
diff
changeset
|
84 |
create_data["workspace_id"] = workspace_guid |
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
85 |
serializer = RenkanSerializer(data=create_data) |
|
615
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
86 |
logger.debug("BEFORE SERIALIZER VALID %r", create_data) |
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
87 |
if serializer.is_valid(): |
|
613
e00a24b711a0
make renkanmanager test run locally
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
88 |
creator = request.user if request.user and not request.user.is_anonymous() else None |
|
e00a24b711a0
make renkanmanager test run locally
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
89 |
serializer.save(creator=creator) |
|
615
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
90 |
logger.debug("AFTER SAVE SERIALIZER DATA %r", serializer.data) |
|
588
95536fa18d0d
Minor adjustements to properly interact with Renkan client
durandn
parents:
587
diff
changeset
|
91 |
return Response(serializer.data, status=status.HTTP_201_CREATED, content_type='application/json') |
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
92 |
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) |
|
613
e00a24b711a0
make renkanmanager test run locally
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
93 |
|
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
94 |
|
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
95 |
class RenkanDetail(APIView): |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
96 |
""" |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
97 |
View for retrieving, updating or deleting a single renkan |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
98 |
""" |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
99 |
lookup_field = "renkan_guid" |
|
608
8fd40139827c
permission implementation has to be client-side and not in the generic api package + deleted duplicate migration
durandn
parents:
602
diff
changeset
|
100 |
queryset = Renkan.objects |
|
613
e00a24b711a0
make renkanmanager test run locally
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
101 |
|
|
608
8fd40139827c
permission implementation has to be client-side and not in the generic api package + deleted duplicate migration
durandn
parents:
602
diff
changeset
|
102 |
def get_object(self, renkan_guid): |
|
615
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
103 |
try: |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
104 |
renkan_uuid = uuid.UUID(renkan_guid) |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
105 |
except: |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
106 |
raise ValueError('renkan guid %r bad format'%renkan_guid) |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
107 |
return self.queryset.get(renkan_guid=renkan_uuid) |
|
613
e00a24b711a0
make renkanmanager test run locally
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
108 |
|
|
588
95536fa18d0d
Minor adjustements to properly interact with Renkan client
durandn
parents:
587
diff
changeset
|
109 |
def dispatch(self, *args, **kwargs): |
|
95536fa18d0d
Minor adjustements to properly interact with Renkan client
durandn
parents:
587
diff
changeset
|
110 |
return super(RenkanDetail, self).dispatch(*args, **kwargs) |
|
613
e00a24b711a0
make renkanmanager test run locally
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
111 |
|
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
112 |
def get(self, request, renkan_guid, format=None): |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
113 |
try: |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
114 |
renkan = self.get_object(renkan_guid=renkan_guid) |
|
615
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
115 |
except ValueError: |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
116 |
return Response({'detail': 'Renkan project %r guid badly formatted'%renkan_guid}, status=status.HTTP_400_BAD_REQUEST) |
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
117 |
except Renkan.DoesNotExist: |
|
615
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
118 |
return Response({'detail': 'Renkan project %r does not exist'%renkan_guid}, status=status.HTTP_404_NOT_FOUND) |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
119 |
|
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
120 |
self.check_object_permissions(request, renkan) |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
121 |
serializer = RenkanSerializer(renkan) |
|
588
95536fa18d0d
Minor adjustements to properly interact with Renkan client
durandn
parents:
587
diff
changeset
|
122 |
if {'true': True, 'false': False, "0": False, "1": True}.get(request.GET.get("content_only", "false").lower()): |
|
95536fa18d0d
Minor adjustements to properly interact with Renkan client
durandn
parents:
587
diff
changeset
|
123 |
return Response(json.loads(serializer.data["content"]), status=status.HTTP_200_OK, content_type='application/json') |
|
95536fa18d0d
Minor adjustements to properly interact with Renkan client
durandn
parents:
587
diff
changeset
|
124 |
return Response(serializer.data, status=status.HTTP_200_OK, content_type='application/json') |
| 598 | 125 |
|
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
126 |
def put(self, request, renkan_guid, format=None): |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
127 |
try: |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
128 |
renkan = self.get_object(renkan_guid=renkan_guid) |
|
615
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
129 |
except ValueError: |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
130 |
return Response({'detail': 'Renkan project %r guid badly formatted'%renkan_guid}, status=status.HTTP_400_BAD_REQUEST) |
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
131 |
except Renkan.DoesNotExist: |
|
615
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
132 |
return Response({'detail': 'Renkan project %r does not exist'%renkan_guid}, status=status.HTTP_404_NOT_FOUND) |
|
608
8fd40139827c
permission implementation has to be client-side and not in the generic api package + deleted duplicate migration
durandn
parents:
602
diff
changeset
|
133 |
logger.debug("RENKAN PUT %r : CHECKING OBJECT PERMISSION", renkan_guid) |
|
8fd40139827c
permission implementation has to be client-side and not in the generic api package + deleted duplicate migration
durandn
parents:
602
diff
changeset
|
134 |
logger.debug("RENKAN PUT: permission? %r", request.user.has_perm("change_renkan", renkan)) |
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
135 |
self.check_object_permissions(request, renkan) |
|
608
8fd40139827c
permission implementation has to be client-side and not in the generic api package + deleted duplicate migration
durandn
parents:
602
diff
changeset
|
136 |
logger.debug("RENKAN PUT: PERMISSION GRANTED") |
|
588
95536fa18d0d
Minor adjustements to properly interact with Renkan client
durandn
parents:
587
diff
changeset
|
137 |
if {'true': True, 'false': False, "0": False, "1": True}.get(request.GET.get("content_only", "false").lower()): |
|
95536fa18d0d
Minor adjustements to properly interact with Renkan client
durandn
parents:
587
diff
changeset
|
138 |
put_data = {} |
|
95536fa18d0d
Minor adjustements to properly interact with Renkan client
durandn
parents:
587
diff
changeset
|
139 |
put_data["content"] = json.dumps(request.data) |
|
95536fa18d0d
Minor adjustements to properly interact with Renkan client
durandn
parents:
587
diff
changeset
|
140 |
put_data["title"] = request.data.get("title", "") |
| 598 | 141 |
else: |
|
588
95536fa18d0d
Minor adjustements to properly interact with Renkan client
durandn
parents:
587
diff
changeset
|
142 |
put_data = request.data |
|
611
f0f07e2b841f
serverside: translation + timestamp handling + logging
durandn
parents:
610
diff
changeset
|
143 |
if put_data.get("validation_timestamp", None) is None and put_data.get("content", None) is not None: |
|
f0f07e2b841f
serverside: translation + timestamp handling + logging
durandn
parents:
610
diff
changeset
|
144 |
put_data["validation_timestamp"] = json.loads(put_data["content"]).get("updated", "") |
|
588
95536fa18d0d
Minor adjustements to properly interact with Renkan client
durandn
parents:
587
diff
changeset
|
145 |
serializer = RenkanSerializer(renkan, data=put_data) |
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
146 |
if serializer.is_valid(): |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
147 |
serializer.save(updator=request.user) |
|
611
f0f07e2b841f
serverside: translation + timestamp handling + logging
durandn
parents:
610
diff
changeset
|
148 |
if {'true': True, 'false': False, "0": False, "1": True}.get(request.GET.get("content_only", "false").lower()): |
|
f0f07e2b841f
serverside: translation + timestamp handling + logging
durandn
parents:
610
diff
changeset
|
149 |
return Response(json.loads(serializer.data["content"]), status=status.HTTP_200_OK, content_type='application/json') |
|
615
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
150 |
logger.debug("RENKAN PUT: SERIALIZER DATA %r", serializer.data) |
|
588
95536fa18d0d
Minor adjustements to properly interact with Renkan client
durandn
parents:
587
diff
changeset
|
151 |
return Response(serializer.data, status=status.HTTP_200_OK, content_type='application/json') |
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
152 |
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) |
| 598 | 153 |
|
|
610
b9edc1c1538a
reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents:
608
diff
changeset
|
154 |
@transaction.atomic |
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
155 |
def delete(self, request, renkan_guid, format=None): |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
156 |
try: |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
157 |
to_delete_renkan = self.get_object(renkan_guid=renkan_guid) |
|
615
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
158 |
except ValueError: |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
159 |
return Response({'detail': 'Renkan project %r guid badly formatted'%renkan_guid}, status=status.HTTP_400_BAD_REQUEST) |
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
160 |
except Renkan.DoesNotExist: |
|
615
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
161 |
return Response({'detail': 'Renkan project %r does not exist'%renkan_guid}, status=status.HTTP_404_NOT_FOUND) |
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
162 |
self.check_object_permissions(request, to_delete_renkan) |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
163 |
to_delete_renkan.delete() |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
164 |
return Response(status=status.HTTP_204_NO_CONTENT) |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
165 |
|
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
166 |
class WorkspaceList(APIView): |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
167 |
""" |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
168 |
View for listing workspaces or creating new workspace |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
169 |
""" |
|
613
e00a24b711a0
make renkanmanager test run locally
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
170 |
|
|
608
8fd40139827c
permission implementation has to be client-side and not in the generic api package + deleted duplicate migration
durandn
parents:
602
diff
changeset
|
171 |
queryset = Workspace.objects |
|
613
e00a24b711a0
make renkanmanager test run locally
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
172 |
|
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
173 |
def get(self, request, format=None): |
|
608
8fd40139827c
permission implementation has to be client-side and not in the generic api package + deleted duplicate migration
durandn
parents:
602
diff
changeset
|
174 |
workspaces = self.queryset.all() |
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
175 |
serializer = WorkspaceSerializer(workspaces, many=True) |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
176 |
return Response(serializer.data) |
| 598 | 177 |
|
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
178 |
def post(self, request, format=None): |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
179 |
serializer = WorkspaceSerializer(data=request.data) |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
180 |
if serializer.is_valid(): |
|
613
e00a24b711a0
make renkanmanager test run locally
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
181 |
creator = request.user if request.user and not request.user.is_anonymous() else None |
|
e00a24b711a0
make renkanmanager test run locally
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
182 |
serializer.save(creator=creator) |
|
588
95536fa18d0d
Minor adjustements to properly interact with Renkan client
durandn
parents:
587
diff
changeset
|
183 |
return Response(serializer.data, status=status.HTTP_201_CREATED, content_type='application/json') |
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
184 |
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) |
| 598 | 185 |
|
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
186 |
class WorkspaceDetail(APIView): |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
187 |
""" |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
188 |
View for retrieving, updating or deleting a single workspace |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
189 |
""" |
|
613
e00a24b711a0
make renkanmanager test run locally
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
190 |
|
|
608
8fd40139827c
permission implementation has to be client-side and not in the generic api package + deleted duplicate migration
durandn
parents:
602
diff
changeset
|
191 |
lookup_field = "workspace_guid" |
|
8fd40139827c
permission implementation has to be client-side and not in the generic api package + deleted duplicate migration
durandn
parents:
602
diff
changeset
|
192 |
queryset = Workspace.objects |
|
613
e00a24b711a0
make renkanmanager test run locally
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
193 |
|
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
194 |
def get_object(self, workspace_guid): |
|
615
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
195 |
try: |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
196 |
workspace_uuid = uuid.UUID(workspace_guid) |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
197 |
except: |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
198 |
raise ValueError('workspace guid %r bad format'%workspace_guid) |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
199 |
|
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
200 |
return self.queryset.get(workspace_guid=workspace_uuid) |
|
613
e00a24b711a0
make renkanmanager test run locally
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
201 |
|
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
202 |
def get(self, request, workspace_guid, format=None): |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
203 |
try: |
|
608
8fd40139827c
permission implementation has to be client-side and not in the generic api package + deleted duplicate migration
durandn
parents:
602
diff
changeset
|
204 |
workspace = self.get_object(workspace_guid=workspace_guid) |
|
615
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
205 |
except ValueError: |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
206 |
return Response({'detail': 'Workspace %r guid badly formatted'%workspace_guid}, status=status.HTTP_400_BAD_REQUEST) |
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
207 |
except Workspace.DoesNotExist: |
|
615
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
208 |
return Response({'detail': 'Workspace %r does not exist.'%workspace_guid}, status=status.HTTP_404_NOT_FOUND) |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
209 |
|
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
210 |
|
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
211 |
self.check_object_permissions(request, workspace) |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
212 |
serializer = WorkspaceSerializer(workspace) |
|
588
95536fa18d0d
Minor adjustements to properly interact with Renkan client
durandn
parents:
587
diff
changeset
|
213 |
return Response(serializer.data, status=status.HTTP_200_OK, content_type='application/json') |
| 598 | 214 |
|
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
215 |
def put(self, request, workspace_guid, format=None): |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
216 |
try: |
|
608
8fd40139827c
permission implementation has to be client-side and not in the generic api package + deleted duplicate migration
durandn
parents:
602
diff
changeset
|
217 |
workspace = self.get_object(workspace_guid=workspace_guid) |
|
615
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
218 |
except ValueError: |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
219 |
return Response({'detail': 'Workspace %r guid badly formatted'%workspace_guid}, status=status.HTTP_400_BAD_REQUEST) |
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
220 |
except Workspace.DoesNotExist: |
|
615
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
221 |
return Response({'detail': 'Workspace %r does not exist.'%workspace_guid}, status=status.HTTP_404_NOT_FOUND) |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
222 |
|
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
223 |
self.check_object_permissions(request, workspace) |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
224 |
serializer = WorkspaceSerializer(workspace, data=request.data) |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
225 |
if serializer.is_valid(): |
| 598 | 226 |
serializer.save() |
|
588
95536fa18d0d
Minor adjustements to properly interact with Renkan client
durandn
parents:
587
diff
changeset
|
227 |
return Response(serializer.data, status=status.HTTP_200_OK, content_type='application/json') |
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
228 |
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) |
| 598 | 229 |
|
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
230 |
def delete(self, request, workspace_guid, format=None): |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
231 |
try: |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
232 |
to_delete_workspace = self.get_object(workspace_guid=workspace_guid) |
|
615
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
233 |
except ValueError: |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
234 |
return Response({'detail': 'Workspace %r guid badly formatted'%workspace_guid}, status=status.HTTP_400_BAD_REQUEST) |
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
235 |
except Workspace.DoesNotExist: |
|
615
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
236 |
return Response({'detail': 'Workspace %r does not exist.'%workspace_guid}, status=status.HTTP_404_NOT_FOUND) |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
237 |
|
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
238 |
self.check_object_permissions(request, to_delete_workspace) |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
239 |
if to_delete_workspace.renkan_count != 0: |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
240 |
return Response({'detail': 'Workspace '+workspace_guid+' cannot be deleted because it is not empty'}, status=status.HTTP_400_BAD_REQUEST) |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
241 |
to_delete_workspace.delete() |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
242 |
return Response(status=status.HTTP_204_NO_CONTENT) |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
243 |
|
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
244 |
class RevisionList(APIView): |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
245 |
""" |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
246 |
View for listing revisions from a given renkan |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
247 |
""" |
|
613
e00a24b711a0
make renkanmanager test run locally
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
248 |
|
|
608
8fd40139827c
permission implementation has to be client-side and not in the generic api package + deleted duplicate migration
durandn
parents:
602
diff
changeset
|
249 |
def get_queryset(self, renkan_guid=""): |
|
8fd40139827c
permission implementation has to be client-side and not in the generic api package + deleted duplicate migration
durandn
parents:
602
diff
changeset
|
250 |
if renkan_guid: |
|
610
b9edc1c1538a
reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents:
608
diff
changeset
|
251 |
return Revision.objects.filter(parent_renkan__renkan_guid=renkan_guid) |
|
608
8fd40139827c
permission implementation has to be client-side and not in the generic api package + deleted duplicate migration
durandn
parents:
602
diff
changeset
|
252 |
else: |
|
8fd40139827c
permission implementation has to be client-side and not in the generic api package + deleted duplicate migration
durandn
parents:
602
diff
changeset
|
253 |
return Revision.objects |
|
613
e00a24b711a0
make renkanmanager test run locally
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
254 |
|
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
255 |
def get(self, request, renkan_guid, format=None): |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
256 |
revisions = self.get_queryset(renkan_guid) |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
257 |
if not revisions: |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
258 |
return Response({'detail': 'Renkan project '+renkan_guid+' does not exist'}, status=status.HTTP_404_NOT_FOUND) |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
259 |
serializer = RevisionSerializer(revisions.all(), many=True) |
|
588
95536fa18d0d
Minor adjustements to properly interact with Renkan client
durandn
parents:
587
diff
changeset
|
260 |
return Response(serializer.data, status=status.HTTP_200_OK, content_type='application/json') |
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
261 |
|
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
262 |
class RevisionDetail(APIView): |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
263 |
""" |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
264 |
View for retrieving or deleting a single revision from a given renkan |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
265 |
""" |
|
613
e00a24b711a0
make renkanmanager test run locally
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
266 |
|
|
608
8fd40139827c
permission implementation has to be client-side and not in the generic api package + deleted duplicate migration
durandn
parents:
602
diff
changeset
|
267 |
lookup_field = "revision_guid" |
|
613
e00a24b711a0
make renkanmanager test run locally
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
268 |
|
|
608
8fd40139827c
permission implementation has to be client-side and not in the generic api package + deleted duplicate migration
durandn
parents:
602
diff
changeset
|
269 |
def get_queryset(self, renkan_guid=""): |
|
615
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
270 |
try: |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
271 |
renkan_uuid = renkan_guid and uuid.UUID(renkan_guid) |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
272 |
except: |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
273 |
raise ValueError("renkan guid %r not correctly formatted"%renkan_guid) |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
274 |
|
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
275 |
|
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
276 |
def get_revision(self, renkan_guid, revision_guid): |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
277 |
try: |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
278 |
renkan_uuid = renkan_guid and uuid.UUID(renkan_guid) |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
279 |
except: |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
280 |
raise ValueError('Renkan project %r guid bad format'%renkan_guid) |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
281 |
try: |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
282 |
revision_uuid = revision_guid and uuid.UUID(revision_guid) |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
283 |
except: |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
284 |
raise ValueError('Revision %r guid bad format'%revision_guid) |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
285 |
|
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
286 |
revisions = None |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
287 |
if renkan_uuid: |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
288 |
revisions = Revision.objects.filter(parent_renkan__renkan_guid=renkan_uuid) |
|
608
8fd40139827c
permission implementation has to be client-side and not in the generic api package + deleted duplicate migration
durandn
parents:
602
diff
changeset
|
289 |
else: |
|
615
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
290 |
revisions = Revision.objects |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
291 |
if not revisions: |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
292 |
raise ObjectDoesNotExist('Renkan project %r does not exist'%renkan_guid) |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
293 |
try: |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
294 |
revision = revisions.get(revision_guid=revision_uuid) |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
295 |
except Revision.DoesNotExist: |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
296 |
raise ObjectDoesNotExist('Revision %r does not exist'%revision_guid) |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
297 |
return revisions, revision |
|
613
e00a24b711a0
make renkanmanager test run locally
ymh <ymh.work@gmail.com>
parents:
611
diff
changeset
|
298 |
|
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
299 |
def get(self, request, renkan_guid, revision_guid, format=None): |
|
615
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
300 |
|
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
301 |
try: |
|
615
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
302 |
_, revision = self.get_revision(renkan_guid, revision_guid) |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
303 |
except ValueError as e: |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
304 |
return Response({'detail': e.args[0]}, status=status.HTTP_400_BAD_REQUEST) |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
305 |
except ObjectDoesNotExist as e: |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
306 |
return Response({'detail': e.args[0]}, status=status.HTTP_404_NOT_FOUND) |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
307 |
|
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
308 |
self.check_object_permissions(request, revision) |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
309 |
serializer = RevisionSerializer(revision) |
|
588
95536fa18d0d
Minor adjustements to properly interact with Renkan client
durandn
parents:
587
diff
changeset
|
310 |
return Response(serializer.data, status=status.HTTP_200_OK, content_type='application/json') |
| 598 | 311 |
|
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
312 |
def delete(self, request, renkan_guid, revision_guid, format=None): |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
313 |
try: |
|
615
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
314 |
revisions, revision = self.get_revision(renkan_guid, revision_guid) |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
315 |
except ValueError as e: |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
316 |
return Response({'detail': e.args[0]}, status=status.HTTP_400_BAD_REQUEST) |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
317 |
except ObjectDoesNotExist as e: |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
318 |
return Response({'detail': e.args[0]}, status=status.HTTP_404_NOT_FOUND) |
|
f3875fbe206a
redo foreign key for renkanmanager, optimize property access, correct unit tests
ymh <ymh.work@gmail.com>
parents:
613
diff
changeset
|
319 |
|
|
587
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
320 |
self.check_object_permissions(request, revision) |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
321 |
if revisions.count() == 1: |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
322 |
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) |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
323 |
if revision.is_current_revision: |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
324 |
return Response({'detail': 'You cannot delete the current revision of a renkan from the Revision API.'}, status=status.HTTP_400_BAD_REQUEST) |
|
fb0041aa74d3
transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff
changeset
|
325 |
revision.delete() |
| 598 | 326 |
return Response(status=status.HTTP_204_NO_CONTENT) |