Update the document app API endpoints.
Use resource/<pk>/subresource/<pk> scheme.
This commit is contained in:
@@ -15,25 +15,24 @@ from rest_api.permissions import MayanPermission
|
||||
|
||||
from .literals import DOCUMENT_IMAGE_TASK_TIMEOUT
|
||||
from .models import (
|
||||
Document, DocumentPage, DocumentType, DocumentVersion, RecentDocument
|
||||
Document, DocumentType, RecentDocument
|
||||
)
|
||||
from .permissions import (
|
||||
permission_document_create, permission_document_delete,
|
||||
permission_document_download, permission_document_edit,
|
||||
permission_document_new_version, permission_document_properties_edit,
|
||||
permission_document_restore, permission_document_trash,
|
||||
permission_document_version_revert, permission_document_view,
|
||||
permission_document_type_create, permission_document_type_delete,
|
||||
permission_document_type_edit, permission_document_type_view
|
||||
permission_document_view, permission_document_type_create,
|
||||
permission_document_type_delete, permission_document_type_edit,
|
||||
permission_document_type_view
|
||||
)
|
||||
from .runtime import cache_storage_backend
|
||||
from .serializers import (
|
||||
DeletedDocumentSerializer, DocumentPageSerializer, DocumentSerializer,
|
||||
DocumentTypeSerializer, DocumentVersionSerializer,
|
||||
DocumentVersionRevertSerializer, NewDocumentSerializer,
|
||||
NewDocumentVersionSerializer, RecentDocumentSerializer,
|
||||
WritableDocumentSerializer, WritableDocumentTypeSerializer,
|
||||
WritableDocumentVersionSerializer
|
||||
NewDocumentSerializer, NewDocumentVersionSerializer,
|
||||
RecentDocumentSerializer, WritableDocumentSerializer,
|
||||
WritableDocumentTypeSerializer, WritableDocumentVersionSerializer
|
||||
)
|
||||
from .tasks import task_generate_document_page_image
|
||||
|
||||
@@ -158,12 +157,15 @@ class APIDocumentVersionDownloadView(DownloadMixin, generics.RetrieveAPIView):
|
||||
paramType: path
|
||||
type: number
|
||||
"""
|
||||
lookup_url_kwarg = 'version_pk'
|
||||
|
||||
mayan_object_permissions = {
|
||||
'GET': (permission_document_download,)
|
||||
}
|
||||
permission_classes = (MayanPermission,)
|
||||
queryset = DocumentVersion.objects.all()
|
||||
def get_document(self):
|
||||
document = get_object_or_404(Document, pk=self.kwargs['pk'])
|
||||
|
||||
AccessControlList.objects.check_access(
|
||||
permission_document_view, self.request.user, document
|
||||
)
|
||||
return document
|
||||
|
||||
def get_file(self):
|
||||
instance = self.get_object()
|
||||
@@ -172,6 +174,9 @@ class APIDocumentVersionDownloadView(DownloadMixin, generics.RetrieveAPIView):
|
||||
def get_serializer_class(self):
|
||||
return None
|
||||
|
||||
def get_queryset(self):
|
||||
return self.get_document().versions.all()
|
||||
|
||||
def retrieve(self, request, *args, **kwargs):
|
||||
return self.render_to_response()
|
||||
|
||||
@@ -204,6 +209,13 @@ class APIDocumentView(generics.RetrieveUpdateDestroyAPIView):
|
||||
|
||||
return super(APIDocumentView, self).get(*args, **kwargs)
|
||||
|
||||
def get_serializer_context(self):
|
||||
return {
|
||||
'format': self.format_kwarg,
|
||||
'request': self.request,
|
||||
'view': self
|
||||
}
|
||||
|
||||
def get_serializer_class(self):
|
||||
if self.request.method == 'GET':
|
||||
return DocumentSerializer
|
||||
@@ -242,12 +254,28 @@ class APIDocumentPageImageView(generics.RetrieveAPIView):
|
||||
type: number
|
||||
"""
|
||||
|
||||
mayan_object_permissions = {
|
||||
'GET': (permission_document_view,),
|
||||
}
|
||||
mayan_permission_attribute_check = 'document'
|
||||
permission_classes = (MayanPermission,)
|
||||
queryset = DocumentPage.objects.all()
|
||||
lookup_url_kwarg = 'page_pk'
|
||||
|
||||
def get_document(self):
|
||||
if self.request.method == 'GET':
|
||||
permission_required = permission_document_view
|
||||
else:
|
||||
permission_required = permission_document_edit
|
||||
|
||||
document = get_object_or_404(Document, pk=self.kwargs['pk'])
|
||||
|
||||
AccessControlList.objects.check_access(
|
||||
permission_required, self.request.user, document
|
||||
)
|
||||
return document
|
||||
|
||||
def get_document_version(self):
|
||||
return get_object_or_404(
|
||||
self.get_document().versions.all(), pk=self.kwargs['version_pk']
|
||||
)
|
||||
|
||||
def get_queryset(self):
|
||||
return self.get_document_version().pages.all()
|
||||
|
||||
def get_serializer_class(self):
|
||||
return None
|
||||
@@ -281,14 +309,7 @@ class APIDocumentPageView(generics.RetrieveUpdateAPIView):
|
||||
Returns the selected document page details.
|
||||
"""
|
||||
|
||||
mayan_object_permissions = {
|
||||
'GET': (permission_document_view,),
|
||||
'PUT': (permission_document_edit,),
|
||||
'PATCH': (permission_document_edit,)
|
||||
}
|
||||
mayan_permission_attribute_check = 'document'
|
||||
permission_classes = (MayanPermission,)
|
||||
queryset = DocumentPage.objects.all()
|
||||
lookup_url_kwarg = 'page_pk'
|
||||
serializer_class = DocumentPageSerializer
|
||||
|
||||
def get(self, *args, **kwargs):
|
||||
@@ -298,6 +319,27 @@ class APIDocumentPageView(generics.RetrieveUpdateAPIView):
|
||||
|
||||
return super(APIDocumentPageView, self).get(*args, **kwargs)
|
||||
|
||||
def get_document(self):
|
||||
if self.request.method == 'GET':
|
||||
permission_required = permission_document_view
|
||||
else:
|
||||
permission_required = permission_document_edit
|
||||
|
||||
document = get_object_or_404(Document, pk=self.kwargs['pk'])
|
||||
|
||||
AccessControlList.objects.check_access(
|
||||
permission_required, self.request.user, document
|
||||
)
|
||||
return document
|
||||
|
||||
def get_document_version(self):
|
||||
return get_object_or_404(
|
||||
self.get_document().versions.all(), pk=self.kwargs['version_pk']
|
||||
)
|
||||
|
||||
def get_queryset(self):
|
||||
return self.get_document_version().pages.all()
|
||||
|
||||
def patch(self, *args, **kwargs):
|
||||
"""
|
||||
Edit the selected document page.
|
||||
@@ -424,6 +466,33 @@ class APIRecentDocumentListView(generics.ListAPIView):
|
||||
return super(APIRecentDocumentListView, self).get(*args, **kwargs)
|
||||
|
||||
|
||||
class APIDocumentVersionPageListView(generics.ListAPIView):
|
||||
serializer_class = DocumentPageSerializer
|
||||
|
||||
def get_document(self):
|
||||
document = get_object_or_404(Document, pk=self.kwargs['pk'])
|
||||
|
||||
AccessControlList.objects.check_access(
|
||||
permission_document_view, self.request.user, document
|
||||
)
|
||||
return document
|
||||
|
||||
def get_document_version(self):
|
||||
return get_object_or_404(
|
||||
self.get_document().versions.all(), pk=self.kwargs['version_pk']
|
||||
)
|
||||
|
||||
def get_queryset(self):
|
||||
return self.get_document_version().pages.all()
|
||||
|
||||
def get_serializer_context(self):
|
||||
return {
|
||||
'format': self.format_kwarg,
|
||||
'request': self.request,
|
||||
'view': self
|
||||
}
|
||||
|
||||
|
||||
class APIDocumentVersionsListView(generics.ListCreateAPIView):
|
||||
"""
|
||||
Return a list of the selected document's versions.
|
||||
@@ -468,19 +537,35 @@ class APIDocumentVersionsListView(generics.ListCreateAPIView):
|
||||
return Response(status=status.HTTP_202_ACCEPTED, headers=headers)
|
||||
|
||||
|
||||
class APIDocumentVersionView(generics.RetrieveUpdateAPIView):
|
||||
class APIDocumentVersionView(generics.RetrieveUpdateDestroyAPIView):
|
||||
"""
|
||||
Returns the selected document version details.
|
||||
"""
|
||||
|
||||
mayan_object_permissions = {
|
||||
'GET': (permission_document_view,),
|
||||
'PATCH': (permission_document_edit,),
|
||||
'PUT': (permission_document_edit,),
|
||||
}
|
||||
mayan_permission_attribute_check = 'document'
|
||||
permission_classes = (MayanPermission,)
|
||||
queryset = DocumentVersion.objects.all()
|
||||
lookup_url_kwarg = 'version_pk'
|
||||
|
||||
def delete(self, *args, **kwargs):
|
||||
"""
|
||||
Delete the selected document version.
|
||||
"""
|
||||
|
||||
return super(APIDocumentVersionView, self).delete(*args, **kwargs)
|
||||
|
||||
def get_document(self):
|
||||
if self.request.method == 'GET':
|
||||
permission_required = permission_document_view
|
||||
else:
|
||||
permission_required = permission_document_edit
|
||||
|
||||
document = get_object_or_404(Document, pk=self.kwargs['pk'])
|
||||
|
||||
AccessControlList.objects.check_access(
|
||||
permission_required, self.request.user, document
|
||||
)
|
||||
return document
|
||||
|
||||
def get_queryset(self):
|
||||
return self.get_document().versions.all()
|
||||
|
||||
def get_serializer_class(self):
|
||||
if self.request.method == 'GET':
|
||||
@@ -488,6 +573,13 @@ class APIDocumentVersionView(generics.RetrieveUpdateAPIView):
|
||||
else:
|
||||
return WritableDocumentVersionSerializer
|
||||
|
||||
def get_serializer_context(self):
|
||||
return {
|
||||
'format': self.format_kwarg,
|
||||
'request': self.request,
|
||||
'view': self
|
||||
}
|
||||
|
||||
def patch(self, *args, **kwargs):
|
||||
"""
|
||||
Edit the selected document version.
|
||||
@@ -501,21 +593,3 @@ class APIDocumentVersionView(generics.RetrieveUpdateAPIView):
|
||||
"""
|
||||
|
||||
return super(APIDocumentVersionView, self).put(*args, **kwargs)
|
||||
|
||||
|
||||
class APIDocumentVersionRevertView(generics.GenericAPIView):
|
||||
"""
|
||||
Revert to an earlier document version.
|
||||
"""
|
||||
|
||||
mayan_object_permissions = {
|
||||
'POST': (permission_document_version_revert,)
|
||||
}
|
||||
mayan_permission_attribute_check = 'document'
|
||||
permission_classes = (MayanPermission,)
|
||||
queryset = DocumentVersion.objects.all()
|
||||
serializer_class = DocumentVersionRevertSerializer
|
||||
|
||||
def post(self, *args, **kwargs):
|
||||
self.get_object().revert(_user=self.request.user)
|
||||
return Response(status=status.HTTP_200_OK)
|
||||
|
||||
Reference in New Issue
Block a user