From 7276dc331a4ce1d4f1624cfe693be8cf602b34f7 Mon Sep 17 00:00:00 2001 From: "Christopher C. Wells" Date: Sat, 14 Mar 2020 13:15:14 -0700 Subject: [PATCH] Add "timer" field information to OPTIONS (#131) --- api/mixins.py | 27 +++++++++++++++++++++++++++ api/views.py | 7 ++++--- 2 files changed, 31 insertions(+), 3 deletions(-) create mode 100644 api/mixins.py diff --git a/api/mixins.py b/api/mixins.py new file mode 100644 index 00000000..ae6a07fe --- /dev/null +++ b/api/mixins.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +from collections import OrderedDict + +from rest_framework.response import Response + + +class TimerFieldSupportMixin: + def options(self, request, *args, **kwargs): + """ + Add information about the optional "timer" field. + """ + meta = self.metadata_class() + data = meta.determine_metadata(request, self) + post = data.get('actions').get('POST') # type: OrderedDict + post['timer'] = OrderedDict({ + "type": "integer", + "required": False, + "read_only": False, + "label": "Timer", + "details": "ID for an existing Timer, may be used in place of the " + "`start`, `end`, and/or `child` fields. " + }) + details = "Required unless a value is provided in the `timer` field." + post['child']['details'] = details + post['start']['details'] = details + post['end']['details'] = details + return Response(data) diff --git a/api/views.py b/api/views.py index 2f67f5d3..0435ffde 100644 --- a/api/views.py +++ b/api/views.py @@ -4,6 +4,7 @@ from rest_framework import viewsets from core import models from . import serializers +from .mixins import TimerFieldSupportMixin class ChildViewSet(viewsets.ModelViewSet): @@ -19,7 +20,7 @@ class DiaperChangeViewSet(viewsets.ModelViewSet): filterset_fields = ('child', 'wet', 'solid', 'color', 'amount') -class FeedingViewSet(viewsets.ModelViewSet): +class FeedingViewSet(TimerFieldSupportMixin, viewsets.ModelViewSet): queryset = models.Feeding.objects.all() serializer_class = serializers.FeedingSerializer filterset_fields = ('child', 'type', 'method') @@ -31,7 +32,7 @@ class NoteViewSet(viewsets.ModelViewSet): filterset_fields = ('child',) -class SleepViewSet(viewsets.ModelViewSet): +class SleepViewSet(TimerFieldSupportMixin, viewsets.ModelViewSet): queryset = models.Sleep.objects.all() serializer_class = serializers.SleepSerializer filterset_fields = ('child',) @@ -49,7 +50,7 @@ class TimerViewSet(viewsets.ModelViewSet): filterset_fields = ('child', 'active', 'user') -class TummyTimeViewSet(viewsets.ModelViewSet): +class TummyTimeViewSet(TimerFieldSupportMixin, viewsets.ModelViewSet): queryset = models.TummyTime.objects.all() serializer_class = serializers.TummyTimeSerializer filterset_fields = ('child',)