"""News app views.""" from rest_framework import generics, permissions from news import filters, models, serializers class NewsMixinView: """News mixin.""" permission_classes = (permissions.AllowAny, ) serializer_class = serializers.NewsBaseSerializer def get_queryset(self, *args, **kwargs): """Override get_queryset method.""" qs = models.News.objects.with_related().published()\ .order_by('-is_highlighted', '-created') if self.request.country_code: qs = qs.by_country_code(self.request.country_code) return qs class NewsListView(NewsMixinView, generics.ListAPIView): """News list view.""" filter_class = filters.NewsListFilterSet class NewsDetailView(NewsMixinView, generics.RetrieveAPIView): """News detail view.""" lookup_field = 'slug' serializer_class = serializers.NewsDetailSerializer class NewsTypeListView(generics.ListAPIView): """NewsType list view.""" pagination_class = None permission_classes = (permissions.AllowAny, ) queryset = models.NewsType.objects.all() serializer_class = serializers.NewsTypeSerializer class NewsBackOfficeMixinView: """News back office mixin view.""" permission_classes = (permissions.IsAuthenticated,) queryset = models.News.objects.with_related() \ .order_by('-is_highlighted', '-created') class NewsBackOfficeLCView(NewsBackOfficeMixinView, generics.ListCreateAPIView): """Resource for a list of news for back-office users.""" serializer_class = serializers.NewsBackOfficeBaseSerializer create_serializers_class = serializers.NewsBackOfficeDetailSerializer def get_serializer_class(self): if self.request.method == 'POST': return self.create_serializers_class return super().get_serializer_class() class NewsBackOfficeRUDView(NewsBackOfficeMixinView, generics.RetrieveUpdateDestroyAPIView): """Resource for detailed information about news for back-office users.""" serializer_class = serializers.NewsBackOfficeDetailSerializer