src/notes/api/views/core.py
author ymh <ymh.work@gmail.com>
Thu, 20 Jul 2017 11:23:08 +0200
changeset 124 c77570164050
parent 120 892980a3af09
child 128 34a75bd8d0b9
permissions -rw-r--r--
implement soft delete and indicator that session and notes have been modiied

"""
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 (CreateNoteSerializer, CreateSessionSerializer,
                                DetailNoteSerializer, DetailSessionSerializer,
                                ListNoteSerializer, ListSessionSerializer,
                                RootDetailNoteSerializer,
                                RootListNoteSerializer, UpdateNoteSerializer)

logger = logging.getLogger(__name__)


class SessionViewSet(viewsets.ModelViewSet):
    """
    API endpoint that allow sessions ro be viewed or edited
    """
    serializer_class = ListSessionSerializer
    lookup_field = 'ext_id'

    serializers = {
        'list': ListSessionSerializer,
        'retrieve':  DetailSessionSerializer,
        'create':  CreateSessionSerializer,
    }

    permission_classes = (SessionPermission,)

    def get_serializer_class(self):
        return self.serializers.get(self.action, ListSessionSerializer)

    def get_queryset(self):
        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):

    serializers = {
        'list': ListNoteSerializer,
        'retrieve': DetailNoteSerializer,
        'create': CreateNoteSerializer,
        'update': UpdateNoteSerializer,
    }
    lookup_field = 'ext_id'

    permission_classes = (NotePermission,)
    pagination_class = None

    def get_serializer_class(self):
        return self.serializers.get(self.action, ListNoteSerializer)

    def get_queryset(self):
        return Note.objects.filter(
            session__ext_id=self.kwargs['session_ext_id'],
            session__owner=self.request.user)


class RootNoteViewSet(viewsets.ReadOnlyModelViewSet):

    lookup_field = 'ext_id'

    permission_classes = (NotePermission,)
    serializer_class = RootDetailNoteSerializer

    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