diff -r 2cb8d11aa9ca -r 8ff8e2aee0f9 src/notes/api/views/core.py --- a/src/notes/api/views/core.py Tue Jul 18 17:59:28 2017 +0200 +++ b/src/notes/api/views/core.py Wed Jul 19 15:57:13 2017 +0200 @@ -1,15 +1,19 @@ """ Core viewsets """ +import datetime import logging +from django.utils import timezone from notes.models import Note, Session from rest_framework import viewsets from ..permissions import NotePermission, SessionPermission -from ..serializers.core import (DetailNoteSerializer, UpdateNoteSerializer, DetailSessionSerializer, - CreateNoteSerializer, ListNoteSerializer, ListSessionSerializer, - CreateSessionSerializer) +from ..serializers.core import (CreateNoteSerializer, CreateSessionSerializer, + DetailNoteSerializer, DetailSessionSerializer, + ListNoteSerializer, ListSessionSerializer, + RootDetailNoteSerializer, + RootListNoteSerializer, UpdateNoteSerializer) logger = logging.getLogger(__name__) @@ -33,7 +37,15 @@ return self.serializers.get(self.action, ListSessionSerializer) def get_queryset(self): - return Session.objects.filter(owner=self.request.user) + queryset = Session.objects.filter(owner=self.request.user).order_by('created') + modified_since_str = self.request.query_params.get('modified_since', None) + if modified_since_str is not None: + modified_since = datetime.datetime.fromtimestamp( + float(modified_since_str), + timezone.utc + ) + queryset = queryset.filter(updated__gte=modified_since) + return queryset class NoteViewSet(viewsets.ModelViewSet): @@ -47,6 +59,7 @@ lookup_field = 'ext_id' permission_classes = (NotePermission,) + pagination_class = None def get_serializer_class(self): return self.serializers.get(self.action, ListNoteSerializer) @@ -55,3 +68,28 @@ return Note.objects.filter( session__ext_id=self.kwargs['session_ext_id'], session__owner=self.request.user) + + +class RootNoteViewSet(viewsets.ReadOnlyModelViewSet): + + serializers = { + 'list': RootListNoteSerializer, + 'retrieve': RootDetailNoteSerializer, + } + lookup_field = 'ext_id' + + permission_classes = (NotePermission,) + + def get_serializer_class(self): + return self.serializers.get(self.action, RootListNoteSerializer) + + def get_queryset(self): + queryset = Note.objects.filter(session__owner=self.request.user).order_by('created') + modified_since_str = self.request.query_params.get('modified_since', None) + if modified_since_str is not None: + modified_since = datetime.datetime.fromtimestamp( + float(modified_since_str), + timezone.utc + ) + queryset = queryset.filter(updated__gte=modified_since) + return queryset