# -*- coding: utf-8 -*- # from django.contrib.auth.mixins import UserPassesTestMixin from rest_framework import permissions from rest_framework.decorators import action from rest_framework.request import Request from rest_framework.response import Response from common.permissions import IsValidUser __all__ = ["PermissionsMixin", "SuggestionMixin"] class PermissionsMixin(UserPassesTestMixin): permission_classes = [permissions.IsAuthenticated] request: Request def get_permissions(self): return self.permission_classes def test_func(self): permission_classes = self.get_permissions() for permission_class in permission_classes: if not permission_class().has_permission(self.request, self): return False return True class SuggestionMixin: suggestion_mini_count = 10 @action(methods=['get'], detail=False, permission_classes=(IsValidUser,)) def suggestions(self, request, *args, **kwargs): queryset = self.filter_queryset(self.get_queryset()) queryset = queryset[:self.suggestion_mini_count] page = self.paginate_queryset(queryset) if page is not None: serializer = self.get_serializer(page, many=True) return self.get_paginated_response(serializer.data) serializer = self.get_serializer(queryset, many=True) return Response(serializer.data)