Source code for store.views

from django.utils.dateparse import parse_datetime
import django_filters.rest_framework
from rest_framework import status
from rest_framework.response import Response
from rest_framework import generics

from .models import Vote
from .serializers import VoteSerializer
from base.perms import UserIsStaff
from . import utils

VOTING_TYPES = {
    'preference': utils.classic_store,
    'yesno': utils.classic_store,
    'choices': utils.choices_store,
    'comment': utils.classic_store,
    'classic': utils.classic_store,
}


[docs]class StoreView(generics.ListAPIView): """ API view for listing and creating votes. Inherits from Django Rest Framework's ListAPIView to provide a method for listing existing votes and a method for creating new votes based on the voting type. Attributes: queryset: A queryset that includes all Vote objects. serializer_class: Serializer class used to serialize Vote objects. filter_backends: Set of filter backends to be used for the queryset. filterset_fields: Fields of the Vote model that can be filtered. """ queryset = Vote.objects.all() serializer_class = VoteSerializer filter_backends = (django_filters.rest_framework.DjangoFilterBackend,) filterset_fields = ('voting_id', 'voter_id')
[docs] def get(self, request): """ Handles GET requests to retrieve a list of votes. Args: request: HttpRequest object. Returns: Response object containing serialized Vote data. Raises: PermissionDenied: If the user is not staff. """ self.permission_classes = (UserIsStaff,) self.check_permissions(request) return super().get(request)
[docs] def post(self, request): """ Handles POST requests to create a new vote based on the voting type. Args: request: HttpRequest object containing voting_type and vote data. Returns: Response object with an HTTP status code. Raises: HTTP_400_BAD_REQUEST: If voting_type is not in the predefined voting types. """ voting_type = request.data.get('voting_type') if voting_type not in VOTING_TYPES.keys(): return Response({}, status=status.HTTP_400_BAD_REQUEST) status_code = VOTING_TYPES[voting_type](request) return Response({}, status=status_code)