# -*- 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 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): queryset = self.ticket.comments.all() return queryset