website/announcements/api/v2/views.py
"""API v2 views of the announcements app."""
from oauth2_provider.contrib.rest_framework import IsAuthenticatedOrTokenHasScope
from rest_framework.generics import ListAPIView, RetrieveAPIView
from announcements.api.v2.serializers import FrontpageArticleSerializer, SlideSerializer
from announcements.models import FrontpageArticle, Slide
class AnnouncementsAPIViewMixin:
permission_classes = [
IsAuthenticatedOrTokenHasScope,
]
required_scopes = ["announcements:read"]
class SlideListView(AnnouncementsAPIViewMixin, ListAPIView):
"""Returns an overview of all slides that are currently active."""
serializer_class = SlideSerializer
queryset = Slide.visible_objects.order_by("order")
class SlideDetailView(AnnouncementsAPIViewMixin, RetrieveAPIView):
"""Returns details of a slide."""
serializer_class = SlideSerializer
queryset = Slide.visible_objects.order_by("order")
class FrontpageArticleListView(AnnouncementsAPIViewMixin, ListAPIView):
"""Returns an overview of all frontpage articles that are currently active."""
serializer_class = FrontpageArticleSerializer
queryset = FrontpageArticle.visible_objects.all()
class FrontpageArticleDetailView(AnnouncementsAPIViewMixin, RetrieveAPIView):
"""Returns details of a frontpage article."""
serializer_class = FrontpageArticleSerializer
queryset = FrontpageArticle.visible_objects.all()