from rest_framework import generics from rest_framework import permissions from collection import models from utils.pagination import ProjectPageNumberPagination from django.shortcuts import get_object_or_404 from establishment.serializers import EstablishmentBaseSerializer from collection.serializers import common as serializers # Mixins class CollectionViewMixin(generics.GenericAPIView): """Mixin for Collection view""" model = models.Collection queryset = models.Collection.objects.all() class GuideViewMixin(generics.GenericAPIView): """Mixin for Guide view""" model = models.Guide queryset = models.Guide.objects.all() # Views # Collections class CollectionListView(CollectionViewMixin, generics.ListAPIView): """List Collection view""" permission_classes = (permissions.AllowAny,) serializer_class = serializers.CollectionSerializer def get_queryset(self): """Override get_queryset method""" queryset = models.Collection.objects.published()\ .by_country_code(code=self.request.country_code)\ .order_by('-on_top', '-created') return queryset class CollectionHomePageView(CollectionViewMixin, generics.ListAPIView): """List Collection view""" permission_classes = (permissions.AllowAny,) serializer_class = serializers.CollectionSerializer def get_queryset(self): """Override get_queryset method""" queryset = models.Collection.objects.published()\ .by_country_code(code=self.request.country_code)\ .filter_all_related_gt(3)\ .order_by('-on_top', '-modified') return queryset class CollectionEstablishmentListView(CollectionListView): """Retrieve list of establishment for collection.""" permission_classes = (permissions.AllowAny,) pagination_class = ProjectPageNumberPagination serializer_class = EstablishmentBaseSerializer lookup_field = 'slug' def get_queryset(self): """ Override get_queryset method. """ queryset = super(CollectionEstablishmentListView, self).get_queryset() # Perform the lookup filtering. collection = get_object_or_404(queryset, slug=self.kwargs['slug']) # May raise a permission denied self.check_object_permissions(self.request, collection) return collection.establishments.all() # Guide class GuideListView(GuideViewMixin, generics.ListAPIView): """List Guide view""" permission_classes = (permissions.AllowAny,) serializer_class = serializers.GuideSerializer class GuideRetrieveView(GuideViewMixin, generics.RetrieveAPIView): """Retrieve Guide view""" permission_classes = (permissions.AllowAny,) serializer_class = serializers.GuideSerializer