Commit 137ad427603c9232c88a28e272345b48f45076ea
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): |