Commit 137ad427603c9232c88a28e272345b48f45076ea

Authored by Andrew Buss
1 parent 5a36efa897
Exists in master

refactor feed pagination; make it optionaller

Showing 3 changed files with 14 additions and 5 deletions Side-by-side Diff

flashcards/models.py View file @ 137ad42
... ... @@ -531,8 +531,8 @@
531 531 def short_name(self):
532 532 return '%s %s' % (self.department_abbreviation, self.course_num)
533 533  
534   - def get_feed_for_user(self, user, page=1):
535   - cards = self.get_cards_for_user(user).order_by('-score')[(page - 1) * self.PAGE_SIZE:page * self.PAGE_SIZE]
  534 + def get_feed_for_user(self, user):
  535 + cards = self.get_cards_for_user(user).order_by('-score')
536 536 return cards
537 537  
538 538 def get_cards_for_user(self, user):
flashcards/views.py View file @ 137ad42
... ... @@ -10,7 +10,8 @@
10 10 PasswordResetSerializer, PasswordResetRequestSerializer, EmailPasswordSerializer, FlashcardSerializer, \
11 11 FlashcardUpdateSerializer, QuizRequestSerializer, QuizResponseSerializer, SubscribeViewSerializer, \
12 12 QuizAnswerRequestSerializer, DeepSectionSerializer, EmailVerificationSerializer, FeedRequestSerializer
13   -from rest_framework.decorators import detail_route, permission_classes, api_view, list_route, throttle_classes
  13 +from flashy.settings import FEED_PAGE_SIZE
  14 +from rest_framework.decorators import detail_route, permission_classes, api_view, list_route
14 15 from rest_framework.generics import ListAPIView, GenericAPIView
15 16 from rest_framework.mixins import CreateModelMixin, RetrieveModelMixin, UpdateModelMixin
16 17 from rest_framework.permissions import IsAuthenticated
17 18  
18 19  
... ... @@ -25,13 +26,16 @@
25 26 from simple_email_confirmation import EmailAddress
26 27 from rest_framework.throttling import UserRateThrottle
27 28  
  29 +
28 30 def log_event(request, event=''):
29 31 logstr = u'%s %s %s %s' % (request.META['REMOTE_ADDR'], request.user, request.path, event)
30 32 getLogger('flashy.events').info(logstr)
31 33  
  34 +
32 35 class LimitFlashcardPushThrottle(UserRateThrottle):
33 36 rate = '10/min'
34 37  
  38 +
35 39 class SectionViewSet(ReadOnlyModelViewSet):
36 40 queryset = Section.objects.all()
37 41 serializer_class = DeepSectionSerializer
... ... @@ -129,8 +133,10 @@
129 133 feed_serializer = FeedRequestSerializer(data=request.data)
130 134 feed_serializer.is_valid(raise_exception=True)
131 135 page = feed_serializer.validated_data['page']
132   - serializer = FlashcardSerializer(self.get_object().get_feed_for_user(request.user, page=page),
133   - many=True, context={'user': request.user})
  136 + feed = self.get_object().get_feed_for_user(request.user)
  137 + if page:
  138 + feed = feed[(page - 1) * FEED_PAGE_SIZE:page * FEED_PAGE_SIZE]
  139 + serializer = FlashcardSerializer(feed, many=True, context={'user': request.user})
134 140 log_event(request, str(self.get_object()))
135 141 return Response(serializer.data)
136 142  
... ... @@ -244,6 +250,7 @@
244 250 serializer.is_valid(raise_exception=True)
245 251 request.user.set_registration_id(serializer.validated_data['registration_id'])
246 252 return Response(status=HTTP_204_NO_CONTENT)
  253 +
247 254  
248 255 @api_view(['POST'])
249 256 def unsubscribe(request, format=None):
flashy/settings.py View file @ 137ad42
... ... @@ -189,4 +189,6 @@
189 189  
190 190 WS4REDIS_EXPIRE = 0
191 191 SESSION_ENGINE = 'redis_sessions.session'
  192 +
  193 +FEED_PAGE_SIZE = 50