You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

41 lines
1.3 KiB

# -*- coding: utf-8 -*-
#
from rest_framework import viewsets, mixins
from common.exceptions import JMSException
from common.utils import lazyproperty
from rbac.permissions import RBACPermission
from tickets import serializers
from tickets.models import Ticket, Comment
from tickets.permissions.comment import IsAssignee, IsApplicant, IsSwagger
__all__ = ['CommentViewSet']
class CommentViewSet(mixins.CreateModelMixin, viewsets.ReadOnlyModelViewSet):
serializer_class = serializers.CommentSerializer
permission_classes = (RBACPermission, IsSwagger | IsAssignee | IsApplicant)
rbac_perms = {
'*': 'tickets.view_ticket'
}
@lazyproperty
def ticket(self):
if getattr(self, 'swagger_fake_view', False):
return None
ticket_id = self.request.query_params.get('ticket_id')
ticket = Ticket.all().filter(pk=ticket_id).first()
if not ticket:
raise JMSException('Not found Ticket object about `id={}`'.format(ticket_id))
return ticket
def get_serializer_context(self):
context = super().get_serializer_context()
context['ticket'] = self.ticket
return context
def get_queryset(self):
if getattr(self, 'swagger_fake_view', False):
return Comment.objects.none()
queryset = self.ticket.comments.all()
return queryset