Files
mayan-edms/mayan/apps/document_comments/api_views.py
Roberto Rosario ffeb580c15 Add event tests to document comments app
Switch view to return an HTTP 404 on lack of authorization
instead of an HTTP 403.

Signed-off-by: Roberto Rosario <Roberto.Rosario@mayan-edms.com>
2018-12-30 16:25:32 -04:00

83 lines
2.4 KiB
Python

from __future__ import absolute_import, unicode_literals
from rest_framework import generics
from mayan.apps.common.mixins import ExternalObjectViewMixin
from mayan.apps.documents.models import Document
from .permissions import (
permission_comment_create, permission_comment_delete,
permission_comment_view
)
from .serializers import CommentSerializer, WritableCommentSerializer
class APICommentListView(ExternalObjectViewMixin, generics.ListCreateAPIView):
"""
get: Returns a list of all the document comments.
post: Create a new document comment.
"""
external_object_pk_url_kwarg = 'document_pk'
external_object_class = Document
def get_document(self):
return self.get_external_object()
def get_external_object_permission(self):
if self.request.method == 'GET':
return permission_comment_view
else:
return permission_comment_create
def get_queryset(self):
return self.get_document().comments.all()
def get_serializer(self, *args, **kwargs):
if not self.request:
return None
return super(APICommentListView, self).get_serializer(*args, **kwargs)
def get_serializer_class(self):
if self.request.method == 'GET':
return CommentSerializer
else:
return WritableCommentSerializer
def get_serializer_context(self):
"""
Extra context provided to the serializer class.
"""
context = super(APICommentListView, self).get_serializer_context()
if self.kwargs:
context.update(
{
'document': self.get_document(),
}
)
return context
class APICommentView(ExternalObjectViewMixin, generics.RetrieveDestroyAPIView):
"""
delete: Delete the selected document comment.
get: Returns the details of the selected document comment.
"""
external_object_pk_url_kwarg = 'document_pk'
external_object_class = Document
lookup_url_kwarg = 'comment_pk'
serializer_class = CommentSerializer
def get_document(self):
return self.get_external_object()
def get_external_object_permission(self):
if self.request.method == 'GET':
return permission_comment_view
else:
return permission_comment_delete
def get_queryset(self):
return self.get_document().comments.all()