talentmap_api/glossary/views/glossary.py
from rest_framework.permissions import IsAuthenticatedOrReadOnly from rest_framework.viewsets import GenericViewSetfrom rest_framework import mixins from talentmap_api.common.common_helpers import get_prefetched_filtered_querysetfrom talentmap_api.common.mixins import FieldLimitableSerializerMixinfrom talentmap_api.common.common_helpers import in_group_or_403 from talentmap_api.glossary.models import GlossaryEntryfrom talentmap_api.glossary.filters import GlossaryEntryFilterfrom talentmap_api.glossary.serializers import GlossaryEntrySerializer import logginglogger = logging.getLogger(__name__) class GlossaryView(FieldLimitableSerializerMixin, GenericViewSet, mixins.CreateModelMixin, mixins.ListModelMixin, mixins.RetrieveModelMixin, mixins.UpdateModelMixin): """ retrieve: Return the given glossary entry. list: Return a list of all glossary entries. partial_update: Update a glossary entry. create: Creates a glossary entry. """ serializer_class = GlossaryEntrySerializer permission_classes = (IsAuthenticatedOrReadOnly,) filter_class = GlossaryEntryFilter def perform_create(self, serializer): in_group_or_403(self.request.user, f"glossary_editors") instance = serializer.save(last_editing_user=self.request.user.profile) logger.info(f"User {self.request.user.id}:{self.request.user} creating glossary entry {instance}") def perform_update(self, serializer): in_group_or_403(self.request.user, f"glossary_editors") instance = serializer.save(last_editing_user=self.request.user.profile) logger.info(f"User {self.request.user.id}:{self.request.user} updating glossary entry {instance}") def get_queryset(self): return get_prefetched_filtered_queryset(GlossaryEntry, self.serializer_class)