src/notes/api/views/core.py
changeset 119 8ff8e2aee0f9
parent 117 9864fe2067cd
child 120 892980a3af09
equal deleted inserted replaced
118:2cb8d11aa9ca 119:8ff8e2aee0f9
     1 """
     1 """
     2 Core viewsets
     2 Core viewsets
     3 """
     3 """
       
     4 import datetime
     4 import logging
     5 import logging
     5 
     6 
       
     7 from django.utils import timezone
     6 from notes.models import Note, Session
     8 from notes.models import Note, Session
     7 from rest_framework import viewsets
     9 from rest_framework import viewsets
     8 
    10 
     9 from ..permissions import NotePermission, SessionPermission
    11 from ..permissions import NotePermission, SessionPermission
    10 from ..serializers.core import (DetailNoteSerializer, UpdateNoteSerializer, DetailSessionSerializer,
    12 from ..serializers.core import (CreateNoteSerializer, CreateSessionSerializer,
    11                                 CreateNoteSerializer, ListNoteSerializer, ListSessionSerializer,
    13                                 DetailNoteSerializer, DetailSessionSerializer,
    12                                 CreateSessionSerializer)
    14                                 ListNoteSerializer, ListSessionSerializer,
       
    15                                 RootDetailNoteSerializer,
       
    16                                 RootListNoteSerializer, UpdateNoteSerializer)
    13 
    17 
    14 logger = logging.getLogger(__name__)
    18 logger = logging.getLogger(__name__)
    15 
    19 
    16 
    20 
    17 class SessionViewSet(viewsets.ModelViewSet):
    21 class SessionViewSet(viewsets.ModelViewSet):
    31 
    35 
    32     def get_serializer_class(self):
    36     def get_serializer_class(self):
    33         return self.serializers.get(self.action, ListSessionSerializer)
    37         return self.serializers.get(self.action, ListSessionSerializer)
    34 
    38 
    35     def get_queryset(self):
    39     def get_queryset(self):
    36         return Session.objects.filter(owner=self.request.user)
    40         queryset = Session.objects.filter(owner=self.request.user).order_by('created')
       
    41         modified_since_str = self.request.query_params.get('modified_since', None)
       
    42         if modified_since_str is not None:
       
    43             modified_since = datetime.datetime.fromtimestamp(
       
    44                 float(modified_since_str),
       
    45                 timezone.utc
       
    46             )
       
    47             queryset = queryset.filter(updated__gte=modified_since)
       
    48         return queryset
    37 
    49 
    38 
    50 
    39 class NoteViewSet(viewsets.ModelViewSet):
    51 class NoteViewSet(viewsets.ModelViewSet):
    40 
    52 
    41     serializers = {
    53     serializers = {
    45         'update': UpdateNoteSerializer,
    57         'update': UpdateNoteSerializer,
    46     }
    58     }
    47     lookup_field = 'ext_id'
    59     lookup_field = 'ext_id'
    48 
    60 
    49     permission_classes = (NotePermission,)
    61     permission_classes = (NotePermission,)
       
    62     pagination_class = None
    50 
    63 
    51     def get_serializer_class(self):
    64     def get_serializer_class(self):
    52         return self.serializers.get(self.action, ListNoteSerializer)
    65         return self.serializers.get(self.action, ListNoteSerializer)
    53 
    66 
    54     def get_queryset(self):
    67     def get_queryset(self):
    55         return Note.objects.filter(
    68         return Note.objects.filter(
    56             session__ext_id=self.kwargs['session_ext_id'],
    69             session__ext_id=self.kwargs['session_ext_id'],
    57             session__owner=self.request.user)
    70             session__owner=self.request.user)
       
    71 
       
    72 
       
    73 class RootNoteViewSet(viewsets.ReadOnlyModelViewSet):
       
    74 
       
    75     serializers = {
       
    76         'list': RootListNoteSerializer,
       
    77         'retrieve': RootDetailNoteSerializer,
       
    78     }
       
    79     lookup_field = 'ext_id'
       
    80 
       
    81     permission_classes = (NotePermission,)
       
    82 
       
    83     def get_serializer_class(self):
       
    84         return self.serializers.get(self.action, RootListNoteSerializer)
       
    85 
       
    86     def get_queryset(self):
       
    87         queryset = Note.objects.filter(session__owner=self.request.user).order_by('created')
       
    88         modified_since_str = self.request.query_params.get('modified_since', None)
       
    89         if modified_since_str is not None:
       
    90             modified_since = datetime.datetime.fromtimestamp(
       
    91                 float(modified_since_str),
       
    92                 timezone.utc
       
    93             )
       
    94             queryset = queryset.filter(updated__gte=modified_since)
       
    95         return queryset