src/notes/api/views/core.py
changeset 119 8ff8e2aee0f9
parent 117 9864fe2067cd
child 120 892980a3af09
--- 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