Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 35 additions & 1 deletion backend/djangoindia/api/views/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
from rest_framework.exceptions import APIException
from rest_framework.filters import SearchFilter
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
from rest_framework.settings import api_settings
from rest_framework.views import APIView
from rest_framework.viewsets import ModelViewSet

Expand Down Expand Up @@ -42,7 +44,39 @@ def initial(self, request, *args, **kwargs):
timezone.deactivate()


class BaseViewSet(TimezoneMixin, ModelViewSet):
class PaginationMixin:
@property
def paginator(self):
"""
The paginator instance associated with the view, or `None`.
"""
if not hasattr(self, "_paginator"):
if self.pagination_class is None:
self._paginator = None
else:
self._paginator = self.pagination_class()
return self._paginator

def paginate_queryset(self, queryset):
"""
Return a single page of results, or `None` if pagination
is disabled.
"""
if self.paginator is None:
return queryset
return self.paginator.paginate_queryset(queryset, self.request, view=self)

def get_paginated_response(self, data):
"""
Return a paginated style `Response` object for the given
output data.
"""
if self.paginator is None:
return Response(data)
return self.paginator.get_paginated_response(data)


class BaseViewSet(TimezoneMixin, PaginationMixin, ModelViewSet):
"""
Base viewset that provides default configurations for API views.

Expand Down
10 changes: 6 additions & 4 deletions backend/djangoindia/api/views/event.py
Original file line number Diff line number Diff line change
Expand Up @@ -146,12 +146,13 @@ def list(self, request, *args, **kwargs):
"""
queryset = self.get_queryset()
all_community_partners = CommunityPartner.objects.all()
page = self.paginate_queryset(queryset)
serializer = self.get_serializer(
queryset,
page,
many=True,
context={"all_community_partners": all_community_partners},
)
return Response(serializer.data)
return self.get_paginated_response(serializer.data)

def retrieve(self, request, *args, **kwargs):
"""
Expand Down Expand Up @@ -471,5 +472,6 @@ def get(self, request, event_slug):
{"message": "No registration found"}, status=status.HTTP_404_NOT_FOUND
)

serializer = self.serializer_class(registrations, many=True)
return Response(serializer.data)
page = self.paginate_queryset(registrations)
serializer = self.serializer_class(page, many=True)
return self.get_paginated_response(serializer.data)
5 changes: 3 additions & 2 deletions backend/djangoindia/api/views/media_library.py
Original file line number Diff line number Diff line change
Expand Up @@ -99,8 +99,9 @@ def list(self, request, *args, **kwargs):
Response: JSON response containing a list of serialized folder data.
"""
queryset = self.filter_queryset(self.get_queryset())
serializer = self.get_serializer(queryset, many=True)
return Response(serializer.data)
page = queryset
serializer = self.get_serializer(page, many=True)
return self.get_paginated_response(serializer.data)

def retrieve(self, request, *args, **kwargs):
"""
Expand Down
5 changes: 3 additions & 2 deletions backend/djangoindia/api/views/partner_and_sponsor.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,5 +57,6 @@ def get(self, request):
Response: Serialized data containing both partners and sponsors.
"""
queryset = self.get_queryset()
serializer = self.serializer_class(queryset)
return Response(serializer.data)
page = queryset
serializer = CommunityPartnerAndSponsorSerializer(page)
return self.get_paginated_response(serializer.data)
2 changes: 2 additions & 0 deletions backend/djangoindia/settings/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,8 @@
),
"DEFAULT_PERMISSION_CLASSES": ("rest_framework.permissions.IsAuthenticated",),
"DEFAULT_SCHEMA_CLASS": "drf_spectacular.openapi.AutoSchema",
"DEFAULT_PAGINATION_CLASS": "rest_framework.pagination.PageNumberPagination",
"PAGE_SIZE": 2,
}

SPECTACULAR_SETTINGS = {
Expand Down