Pagination and Exception catch for RSSFeed API
This commit is contained in:
parent
7dd8b8f6e8
commit
c8097b6107
@ -11,6 +11,7 @@ from django.utils.decorators import method_decorator
|
|||||||
from django.core.files import File
|
from django.core.files import File
|
||||||
from django.core.files.base import ContentFile
|
from django.core.files.base import ContentFile
|
||||||
from django.core.files.temp import NamedTemporaryFile
|
from django.core.files.temp import NamedTemporaryFile
|
||||||
|
from django.db.utils import IntegrityError
|
||||||
from rest_framework.views import APIView
|
from rest_framework.views import APIView
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
from rest_framework import status, permissions, filters, generics
|
from rest_framework import status, permissions, filters, generics
|
||||||
@ -25,18 +26,37 @@ from .serializers import RssFeedSerializer, FeedChannelSerializer
|
|||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
class RSSFeedPagination(PageNumberPagination):
|
||||||
|
page_size = 10
|
||||||
|
page_size_query_param = "page_size"
|
||||||
|
max_page_size = 25
|
||||||
|
|
||||||
|
|
||||||
class RSSFeedList(generics.ListAPIView, generics.CreateAPIView):
|
class RSSFeedList(generics.ListAPIView, generics.CreateAPIView):
|
||||||
authentication_classes = [SessionAuthentication, TokenAuthentication]
|
authentication_classes = [SessionAuthentication, TokenAuthentication]
|
||||||
permission_classes = [permissions.IsAuthenticated]
|
permission_classes = [permissions.IsAuthenticated]
|
||||||
|
|
||||||
|
pagination_class = RSSFeedPagination
|
||||||
serializer_class = RssFeedSerializer
|
serializer_class = RssFeedSerializer
|
||||||
queryset = RSSFeed.objects.all().order_by("-created_at")
|
queryset = RSSFeed.objects.all().order_by("created_at")
|
||||||
|
|
||||||
filter_backends = [filters.SearchFilter, rest_filters.DjangoFilterBackend, filters.OrderingFilter]
|
filter_backends = [filters.SearchFilter, rest_filters.DjangoFilterBackend, filters.OrderingFilter]
|
||||||
filterset_fields = ["uuid", "name", "url", "created_at"]
|
filterset_fields = ["uuid", "name", "url", "discord_server_id", "created_at"]
|
||||||
search_fields = ["name"]
|
search_fields = ["name"]
|
||||||
ordering_fields = ["created_at"]
|
ordering_fields = ["created_at"]
|
||||||
|
|
||||||
|
def post(self, request):
|
||||||
|
serializer = self.get_serializer(data=request.data)
|
||||||
|
serializer.is_valid(raise_exception=True)
|
||||||
|
|
||||||
|
try:
|
||||||
|
self.perform_create(serializer)
|
||||||
|
except IntegrityError:
|
||||||
|
return Response({"detail": "RSS Feed name must be unique"}, status=status.HTTP_409_CONFLICT, exception=True)
|
||||||
|
|
||||||
|
headers = self.get_success_headers(serializer.data)
|
||||||
|
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
|
||||||
|
|
||||||
|
|
||||||
class RSSFeedDetail(generics.RetrieveUpdateDestroyAPIView):
|
class RSSFeedDetail(generics.RetrieveUpdateDestroyAPIView):
|
||||||
authentication_classes = [SessionAuthentication, TokenAuthentication]
|
authentication_classes = [SessionAuthentication, TokenAuthentication]
|
||||||
@ -46,14 +66,6 @@ class RSSFeedDetail(generics.RetrieveUpdateDestroyAPIView):
|
|||||||
serializer_class = RssFeedSerializer
|
serializer_class = RssFeedSerializer
|
||||||
queryset = RSSFeed.objects.all().order_by("-created_at")
|
queryset = RSSFeed.objects.all().order_by("-created_at")
|
||||||
|
|
||||||
# def delete(self, request, uuid: str):
|
|
||||||
# try:
|
|
||||||
# rss_feed = RSSFeed.objects.get(uuid=uuid)
|
|
||||||
# rss_feed.delete()
|
|
||||||
# return Response(status=status.HTTP_204_NO_CONTENT)
|
|
||||||
# except RSSFeed.DoesNotExist:
|
|
||||||
# return Response({"detail": "RSSFeed Not Found"}, status.HTTP_404_NOT_FOUND)
|
|
||||||
|
|
||||||
|
|
||||||
class FeedChannelListApiView(generics.ListAPIView):
|
class FeedChannelListApiView(generics.ListAPIView):
|
||||||
authentication_classes = [SessionAuthentication, TokenAuthentication]
|
authentication_classes = [SessionAuthentication, TokenAuthentication]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user