From 1b1a19ae9d02d8ee73827f9df09277a22e12a67b Mon Sep 17 00:00:00 2001 From: bglacial Date: Thu, 18 Apr 2019 21:43:22 +0200 Subject: [PATCH] Add routes and custom serialiser Add requirements --- db.sqlite3 | Bin 172032 -> 172032 bytes requirements.txt | 2 ++ timelaps/models.py | 13 +++++----- timelaps/serializers.py | 21 ++++++++++++++-- timelaps/urls.py | 16 ++++++------- timelaps/views.py | 52 ++++++++++++++++++++++++++++++++-------- 6 files changed, 78 insertions(+), 26 deletions(-) diff --git a/db.sqlite3 b/db.sqlite3 index d94076c9821a47496521901d0d1f46e49e5f5220..6745bff74c0e443cee2ef6cba77e041e49ed5bc6 100644 GIT binary patch delta 414 zcmZoTz}0YoYl5`kECvP!Eg)6_Vn!e?n5bjSIBR3V5`Jb0F8;~v0{To`{F@yGu5;R0 zNw6}=8atL`=BDN(78Dy87+A&^Bo-y+7RM*&=jNv7l^7WqTIw2@=o(rm7@Audnp&9{ z>lv7s8z?ceN~xD*6wDTai8Np&`YVT+iP2y!kEQ4pD^%<`?LA5 z0gY>73Sbx4)@E$Bo*v!Dq&!`)mq}v!v_7VJ(;xLSi8&i+D){+_DENi?_-OJpF?<#` zHDzpOE=f$vNyX*`Y+}>v`k3UVZ|G#Qntrj5DRujeE~Yh%OiY`nzfNR~+y117Nk$j| DP;`0o delta 303 zcmZoTz}0YoYl5_34+8^(77(igF(VM?PSi1G?Ae&Ggr8ZQ%X>1rfc|Dh1yQce-cn~- z+4#ly-txWOtY~naZ}M9`Ek=>a68aX*%%+Uf4f>cw7+EK0=uc-9Z!%~zVC3Qj8OZ;Q zf&bfP!Gt&b+rQZ}aVZD@1z|vqe*^z~pj%7PkNYSgaK6qQFj0U diff --git a/requirements.txt b/requirements.txt index bd9e27d..ad2e21b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,8 @@ Django==2.0.3 +django-cors-headers==2.5.2 djangorestframework==3.7.7 djangorestframework-jwt==1.11.0 +djangorestframework-stubs==0.4.2 gunicorn==19.7.1 PyJWT==1.6.1 pytz==2018.3 diff --git a/timelaps/models.py b/timelaps/models.py index 8fa454a..0c1766f 100644 --- a/timelaps/models.py +++ b/timelaps/models.py @@ -33,6 +33,7 @@ class Params(models.Model): autonomy = models.IntegerField() default_relay = models.IntegerField() stand_minimum_time = models.IntegerField() + comment = models.CharField(max_length=250) class Relay(models.Model): @@ -40,16 +41,16 @@ class Relay(models.Model): driver = models.ForeignKey(Driver, on_delete=models.CASCADE) # Fk kart kart = models.ForeignKey(Kart, on_delete=models.CASCADE) - #Starting timestamp for the relay + # Starting timestamp for the relay relay_start = models.DateTimeField() - #ending timestamp for the relay + # ending timestamp for the relay relay_end = models.DateTimeField(default=None, blank=True, null=True) - #Does the previous pilot refuel + # Does the previous pilot refuel has_refuel = models.BooleanField(default=False) - #Average chrono for the pulot on this relay + # Average chrono for the pulot on this relay driver_chrono = models.IntegerField(default=None, blank=True, null=True) - #ending timestamp for the relay + # ending timestamp for the relay relay_autonomy = models.IntegerField(default=None, blank=True, null=True) - #comment the relay + # comment the relay comment = models.CharField(max_length=256, default=None, blank=True, null=True) diff --git a/timelaps/serializers.py b/timelaps/serializers.py index 9dcff12..1435494 100644 --- a/timelaps/serializers.py +++ b/timelaps/serializers.py @@ -1,5 +1,4 @@ from rest_framework import serializers -from django.contrib.auth.models import User from .models import Driver, Kart, Params, Relay @@ -41,6 +40,23 @@ class KartSerializer(serializers.ModelSerializer): return Kart.objects.create(**validated_data) +class KartSimpleSerializer(serializers.ModelSerializer): + + class Meta: + model = Kart + fields = ('id', 'name', 'autonomy') + + def update(self, instance, validated_data): + instance.name = validated_data.get("name", instance.name) + instance.autonomy = validated_data.get("autonomy", instance.autonomy) + instance.comment = validated_data.get("comment", instance.comment) + instance.save() + return instance + + def create(self, validated_data): + return Kart.objects.create(**validated_data) + + class RelaySerializer(serializers.ModelSerializer): class Meta: model = Relay @@ -66,12 +82,13 @@ class RelaySerializer(serializers.ModelSerializer): class ParamSerializer(serializers.ModelSerializer): class Meta: model = Params - fields = ('id', 'default_relay', 'autonomy', 'stand_minimum_time') + fields = ('id', 'default_relay', 'autonomy', 'stand_minimum_time', 'comment') def update(self, instance, validated_data): instance.default_relay = validated_data.get("default_relay", instance.default_relay) instance.autonomy = validated_data.get("autonomy", instance.autonomy) instance.stand_minimum_time = validated_data.get("stand_minimum_time", instance.stand_minimum_time) + instance.comment = validated_data.get("comment", instance.comment) instance.save() return instance diff --git a/timelaps/urls.py b/timelaps/urls.py index 1ead2df..9dec02f 100644 --- a/timelaps/urls.py +++ b/timelaps/urls.py @@ -1,5 +1,5 @@ from django.urls import path -from .views import ListCreateDriversView, DriversDetailView, KartsDetailView, ListCreateKartsView#, ListCreateRulesView, RulesDetailView, \ +from .views import ListCreateDriversView, DriversDetailView, KartsDetailView, ListCreateKartsView, ParamsDetailView#, ListCreateRulesView, RulesDetailView, \ #ListCreateKartsView, KartsDetailView, ListCreateRelaysView, RelaysDetailView, ListCreateRacesView, \ #RacesDetailView @@ -8,11 +8,11 @@ urlpatterns = [ path('drivers//', DriversDetailView.as_view(), name="drivers-detail"), path('karts/', ListCreateKartsView.as_view(), name="karts-list-create"), path('karts//', KartsDetailView.as_view(), name="drivers-detail"), - # path('karts//', KartsDetailView.as_view(), name="karts-detail"), - # path('rules/', ListCreateRulesView.as_view(), name="rules-list-create"), - # path('rules//', RulesDetailView.as_view(), name="rules-detail"), - # path('relays/', ListCreateRelaysView.as_view(), name="relays-list-create"), - # path('relays//', RelaysDetailView.as_view(), name="relays-detail"), - # path('races/', ListCreateRacesView.as_view(), name="races-list-create"), - # path('races//', RacesDetailView.as_view(), name="races-detail"), + # path('karts//', KartsDetailView.as_view(), name="karts-detail"), + # path('rules/', ListCreateRulesView.as_view(), name="rules-list-create"), + path('params//', ParamsDetailView.as_view(), name="rules-detail"), + # path('relays/', ListCreateRelaysView.as_view(), name="relays-list-create"), + # path('relays//', RelaysDetailView.as_view(), name="relays-detail"), + # path('races/', ListCreateRacesView.as_view(), name="races-list-create"), + # path('races//', RacesDetailView.as_view(), name="races-detail"), ] diff --git a/timelaps/views.py b/timelaps/views.py index 7bbcc8d..da0d625 100644 --- a/timelaps/views.py +++ b/timelaps/views.py @@ -9,7 +9,7 @@ from rest_framework.views import status from .decorators import validate_request_driver_data from .models import Driver, Kart, Params, Relay -from .serializers import DriverSerializer, RelaySerializer, ParamSerializer, KartSerializer +from .serializers import DriverSerializer, RelaySerializer, ParamSerializer, KartSerializer, KartSimpleSerializer import logging logger = logging.getLogger(__name__) @@ -113,6 +113,42 @@ class KartsDetailView(generics.ListAPIView): ) +class ParamsDetailView(generics.ListAPIView): + """ + Provides a get method handler. + """ + queryset = Params.objects.all() + serializer_class = ParamSerializer + #permission_classes = (permissions.IsAuthenticated,) + + def get(self, request, *args, **kwargs): + try: + a_param = self.queryset.get(pk=kwargs["pk"]) + return Response(ParamSerializer(a_param).data) + except Params.DoesNotExist: + return Response( + data={ + "message": "Param with id: {} does not exist".format(kwargs["pk"]) + }, + status=status.HTTP_404_NOT_FOUND + ) + + #@validate_request_driver_data + def put(self, request, *args, **kwargs): + try: + a_param = self.queryset.get(pk=kwargs["pk"]) + serializer = ParamSerializer(instance=a_param, data=request.data, partial=True) + updated_param = serializer.update(a_param, request.data) + return Response(ParamSerializer(updated_param).data) + except Params.DoesNotExist: + return Response( + data={ + "message": "Param with id: {} does not exist".format(kwargs["pk"]) + }, + status=status.HTTP_404_NOT_FOUND + ) + + class ListCreateDriversView(generics.ListCreateAPIView): """ GET songs/ @@ -145,20 +181,16 @@ class ListCreateKartsView(generics.ListCreateAPIView): """ queryset = Kart.objects.all() serializer_class = KartSerializer - #permission_classes = (permissions.IsAuthenticated,) #@validate_request_driver_data def post(self, request, *args, **kwargs): - logger.error('ListCreateKartsView => post') - a_song = Kart.objects.create( - first_name=request.data["first_name"], - last_name=request.data["last_name"], - order=request.data["order"], - ref_time=request.data["ref_time"], - kart_id=request.data["kart_id"] + a_kart = Kart.objects.create( + name=request.data["name"], + autonomy=request.data["last_name"], + comment=request.data["order"] ) return Response( - data=DriverSerializer(a_song).data, + data=DriverSerializer(a_kart).data, status=status.HTTP_201_CREATED )