from __future__ import absolute_import from __future__ import division from __future__ import print_function from __future__ import unicode_literals # Serializers. Defines which fields from an object get to the JSON object # Also optionally define POST, PATCH methods (create, update) from rest_framework import serializers from rowers.models import Workout,Rower,FavoriteChart import datetime # Serializers define the API representation. class RowerSerializer(serializers.HyperlinkedModelSerializer): class Meta: model = Rower fields = ( 'id', 'weightcategory', 'max', 'rest', 'ut2', 'ut1', 'at', 'tr', 'an', 'ftp', 'sex', ) class FavoriteChartSerializer(serializers.ModelSerializer): class Meta: model = FavoriteChart fields = ( 'id', 'xparam', 'yparam1', 'yparam2', 'plottype', 'workouttype', 'reststrokes', 'user' ) class WorkoutSerializer(serializers.ModelSerializer): class Meta: model = Workout fields = ( 'id', 'name', 'date', 'workouttype', 'starttime', 'distance', 'duration', 'averagehr', 'maxhr', 'notes', 'summary', 'boattype', 'timezone', 'forceunit', 'inboard', 'oarlength', 'privacy', 'rankingpiece' ) def create(self, validated_data): r = Rower.objects.get(user=self.context['request'].user) d = validated_data['date'] t = validated_data['starttime'] rowdatetime = datetime.datetime(d.year, d.month, d.day, t.hour, t.minute, t.second) w = Workout(user=r, name=validated_data['name'], date=validated_data['date'], workouttype=validated_data['workouttype'], duration=validated_data['duration'], distance=validated_data['distance'], weightcategory=r.weightcategory, adaptiveclass=r.adaptiveclass, starttime=validated_data['starttime'], csvfilename='', notes=validated_data['notes'], uploadedtoc2=0, summary=validated_data['summary'], averagehr=validated_data['averagehr'], maxhr=validated_data['maxhr'], startdatetime=rowdatetime, timezone=validated_data['timezone'], forceunit=validated_data['forceunit'], inboard=validated_data['inboard'], oarlength=validated_data['oarlength'], privacy=validated_data['privacy'], rankingpiece=validated_data['rankingpiece'],) w.save() return w def update(self, instance, validated_data): d = validated_data['date'] t = validated_data['starttime'] rowdatetime = datetime.datetime(d.year, d.month, d.day, t.hour, t.minute, t.second) instance.name=validated_data['name'] instance.date=validated_data['date'] instance.workouttype=validated_data['workouttype'] instance.duration=validated_data['duration'] instance.distance=validated_data['distance'] instance.starttime=validated_data['starttime'] instance.notes=validated_data['notes'] instance.summary=validated_data['summary'] instance.averagehr=validated_data['averagehr'] instance.maxhr=validated_data['maxhr'] instance.startdatetime=rowdatetime instance.timezone=validated_data['timezone'] instance.forceunit=validated_data['forceunit'] instance.inboard=validated_data['inboard'] instance.oarlength=validated_data['oarlength'] instance.privacy=validated_data['privacy'] instance.rankingpiece=validated_data['rankingpiece'] instance.save() return instance # This is just a fake one for URL registration purposes class StrokeDataSerializer(serializers.Serializer): workoutid = serializers.IntegerField strokedata = serializers.JSONField def create(self, workoutid, strokedata): """ Create and enter a new set of stroke data into the DB """ # do something return 1