# -*- coding: utf-8 -*- from django.shortcuts import get_object_or_404 from rest_framework import viewsets, views from rest_framework.decorators import action from rest_framework.response import Response from rest_framework.schemas.openapi import AutoSchema from core import models from babybuddy import models as babybuddy_models from . import serializers, filters class BMIViewSet(viewsets.ModelViewSet): queryset = models.BMI.objects.all() serializer_class = serializers.BMISerializer filterset_fields = ("child", "date") ordering_fields = ("child", "date") ordering = "-date" def get_view_name(self): """ Gets the view name without changing the case of the model verbose name. """ name = models.BMI._meta.verbose_name if self.suffix: name += " " + self.suffix return name class ChildViewSet(viewsets.ModelViewSet): queryset = models.Child.objects.all() serializer_class = serializers.ChildSerializer lookup_field = "slug" filterset_fields = ("id", "first_name", "last_name", "slug", "birth_date") ordering_fields = ("birth_date", "first_name", "last_name", "slug") ordering = "-birth_date" class DiaperChangeViewSet(viewsets.ModelViewSet): queryset = models.DiaperChange.objects.all() serializer_class = serializers.DiaperChangeSerializer filterset_class = filters.DiaperChangeFilter ordering_fields = ("amount", "time") ordering = "-time" class FeedingViewSet(viewsets.ModelViewSet): queryset = models.Feeding.objects.all() serializer_class = serializers.FeedingSerializer filterset_class = filters.FeedingFilter ordering_fields = ("amount", "duration", "end", "start") ordering = "-end" class HeadCircumferenceViewSet(viewsets.ModelViewSet): queryset = models.HeadCircumference.objects.all() serializer_class = serializers.HeadCircumferenceSerializer filterset_fields = ("child", "date") ordering_fields = ("date", "head_circumference") ordering = "-date" class HeightViewSet(viewsets.ModelViewSet): queryset = models.Height.objects.all() serializer_class = serializers.HeightSerializer filterset_fields = ("child", "date") ordering_fields = ("date", "height") ordering = "-date" class NoteViewSet(viewsets.ModelViewSet): queryset = models.Note.objects.all() serializer_class = serializers.NoteSerializer filterset_class = filters.NoteFilter ordering_fields = "time" ordering = "-time" class PumpingViewSet(viewsets.ModelViewSet): queryset = models.Pumping.objects.all() serializer_class = serializers.PumpingSerializer filterset_class = filters.PumpingFilter ordering_fields = ("amount", "duration", "end", "start") ordering = "-end" class SleepViewSet(viewsets.ModelViewSet): queryset = models.Sleep.objects.all() serializer_class = serializers.SleepSerializer filterset_class = filters.SleepFilter ordering_fields = ("duration", "end", "start") ordering = "-end" class TagViewSet(viewsets.ModelViewSet): queryset = models.Tag.objects.all() serializer_class = serializers.TagSerializer lookup_field = "slug" filterset_fields = ("last_used", "name") ordering_fields = ("last_used", "name", "slug") ordering = "name" class TemperatureViewSet(viewsets.ModelViewSet): queryset = models.Temperature.objects.all() serializer_class = serializers.TemperatureSerializer filterset_class = filters.TemperatureFilter ordering_fields = ("temperature", "time") ordering = "-time" class TimerViewSet(viewsets.ModelViewSet): queryset = models.Timer.objects.all() serializer_class = serializers.TimerSerializer filterset_class = filters.TimerFilter ordering_fields = ("duration", "end", "start") ordering = "-start" @action(detail=True, methods=["patch"]) def restart(self, request, pk=None): timer = self.get_object() timer.restart() return Response(self.serializer_class(timer).data) class TummyTimeViewSet(viewsets.ModelViewSet): queryset = models.TummyTime.objects.all() serializer_class = serializers.TummyTimeSerializer filterset_class = filters.TummyTimeFilter ordering_fields = ("duration", "end", "start") ordering = "-start" class WeightViewSet(viewsets.ModelViewSet): queryset = models.Weight.objects.all() serializer_class = serializers.WeightSerializer filterset_fields = ("child", "date") ordering_fields = ("date", "weight") ordering = "-date" class ProfileView(views.APIView): schema = AutoSchema(operation_id_base="CurrentProfile") action = "get" basename = "profile" queryset = babybuddy_models.Settings.objects.all() serializer_class = serializers.ProfileSerializer def get(self, request): settings = get_object_or_404( babybuddy_models.Settings.objects, user=request.user ) serializer = self.serializer_class(settings) return Response(serializer.data)