commit
This commit is contained in:
@@ -8,16 +8,18 @@ from __future__ import unicode_literals
|
||||
|
||||
from rest_framework import serializers
|
||||
from rowers.models import (
|
||||
Workout,Rower,FavoriteChart,VirtualRaceResult,
|
||||
VirtualRace,GeoCourse,StandardCollection, CourseStandard,
|
||||
GeoCourse, GeoPolygon, GeoPoint,PlannedSession,
|
||||
)
|
||||
Workout, Rower, FavoriteChart, VirtualRaceResult,
|
||||
VirtualRace, GeoCourse, StandardCollection, CourseStandard,
|
||||
GeoCourse, GeoPolygon, GeoPoint, PlannedSession,
|
||||
)
|
||||
|
||||
from django.core.exceptions import PermissionDenied
|
||||
|
||||
import datetime
|
||||
|
||||
# Serializers define the API representation.
|
||||
|
||||
|
||||
class RowerSerializer(serializers.HyperlinkedModelSerializer):
|
||||
class Meta:
|
||||
model = Rower
|
||||
@@ -33,14 +35,15 @@ class RowerSerializer(serializers.HyperlinkedModelSerializer):
|
||||
'an',
|
||||
'hrzones',
|
||||
'powerzones',
|
||||
'pw_ut2','pw_ut1','pw_at','pw_tr','pw_an',
|
||||
'pw_ut2', 'pw_ut1', 'pw_at', 'pw_tr', 'pw_an',
|
||||
'ftp',
|
||||
'hrftp',
|
||||
'sex',
|
||||
'defaulttimezone',
|
||||
'getimportantemails',
|
||||
'adaptiveclass',
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
class FavoriteChartSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
@@ -54,11 +57,7 @@ class FavoriteChartSerializer(serializers.ModelSerializer):
|
||||
'workouttype',
|
||||
'reststrokes',
|
||||
'user'
|
||||
)
|
||||
|
||||
|
||||
|
||||
|
||||
)
|
||||
|
||||
|
||||
class CourseStandardSerializer(serializers.ModelSerializer):
|
||||
@@ -81,8 +80,10 @@ class CourseStandardSerializer(serializers.ModelSerializer):
|
||||
'standardcollection',
|
||||
)
|
||||
|
||||
|
||||
class StandardCollectionSerializer(serializers.ModelSerializer):
|
||||
standards = CourseStandardSerializer(many=True,read_only=True)
|
||||
standards = CourseStandardSerializer(many=True, read_only=True)
|
||||
|
||||
class Meta:
|
||||
model = StandardCollection
|
||||
fields = (
|
||||
@@ -93,8 +94,10 @@ class StandardCollectionSerializer(serializers.ModelSerializer):
|
||||
'standards'
|
||||
)
|
||||
|
||||
|
||||
class ShortEntrySerializer(serializers.ModelSerializer):
|
||||
entrycategory = CourseStandardSerializer(read_only=True)
|
||||
|
||||
class Meta:
|
||||
model = VirtualRaceResult
|
||||
fields = (
|
||||
@@ -113,9 +116,11 @@ class ShortEntrySerializer(serializers.ModelSerializer):
|
||||
'entrycategory',
|
||||
)
|
||||
|
||||
|
||||
class VirtualRaceSerializer(serializers.ModelSerializer):
|
||||
coursestandards = StandardCollectionSerializer(read_only=True)
|
||||
entries = ShortEntrySerializer(many=True,read_only=True)
|
||||
entries = ShortEntrySerializer(many=True, read_only=True)
|
||||
|
||||
class Meta:
|
||||
model = VirtualRace
|
||||
fields = (
|
||||
@@ -134,6 +139,7 @@ class VirtualRaceSerializer(serializers.ModelSerializer):
|
||||
'coursestandards',
|
||||
)
|
||||
|
||||
|
||||
class PlannedSessionSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = VirtualRace
|
||||
@@ -151,24 +157,26 @@ class PlannedSessionSerializer(serializers.ModelSerializer):
|
||||
'course',
|
||||
'approximate_distance',
|
||||
'approximate_duration',
|
||||
#'steps',
|
||||
# 'steps',
|
||||
'fitfile'
|
||||
)
|
||||
|
||||
def create(self, validated_data): # pragma: no cover
|
||||
def create(self, validated_data): # pragma: no cover
|
||||
if self.context['request'].user.is_authenticated:
|
||||
r = Rower.objects.get(user=self.context['request'].user)
|
||||
else:
|
||||
raise PermissionDenied("Not allowed")
|
||||
|
||||
ps = PlannedSession.objects.create(manager=r.user,**validated_data)
|
||||
ps = PlannedSession.objects.create(manager=r.user, **validated_data)
|
||||
ps.rower.add(r)
|
||||
ps.save()
|
||||
return ps
|
||||
|
||||
|
||||
class EntrySerializer(serializers.ModelSerializer):
|
||||
entrycategory = CourseStandardSerializer(read_only=True)
|
||||
race = VirtualRaceSerializer(read_only=True)
|
||||
|
||||
class Meta:
|
||||
model = VirtualRaceResult
|
||||
fields = (
|
||||
@@ -186,6 +194,7 @@ class EntrySerializer(serializers.ModelSerializer):
|
||||
'entrycategory',
|
||||
)
|
||||
|
||||
|
||||
class WorkoutSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = Workout
|
||||
@@ -215,7 +224,7 @@ class WorkoutSerializer(serializers.ModelSerializer):
|
||||
'duplicate',
|
||||
)
|
||||
|
||||
def create(self, validated_data): # pragma: no cover
|
||||
def create(self, validated_data): # pragma: no cover
|
||||
if self.context['request'].user.is_authenticated:
|
||||
r = Rower.objects.get(user=self.context['request'].user)
|
||||
else:
|
||||
@@ -229,13 +238,12 @@ class WorkoutSerializer(serializers.ModelSerializer):
|
||||
t.minute,
|
||||
t.second)
|
||||
|
||||
|
||||
validated_data['startdatetime'] = rowdatetime
|
||||
validated_data['user'] = r
|
||||
|
||||
return Workout.objects.create(**validated_data)
|
||||
|
||||
def update(self, instance, validated_data): # pragma: no cover
|
||||
def update(self, instance, validated_data): # pragma: no cover
|
||||
d = validated_data['date']
|
||||
t = validated_data['starttime']
|
||||
rowdatetime = datetime.datetime(d.year,
|
||||
@@ -245,34 +253,35 @@ class WorkoutSerializer(serializers.ModelSerializer):
|
||||
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.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): # pragma: no cover
|
||||
def create(self, workoutid, strokedata): # pragma: no cover
|
||||
"""
|
||||
Create and enter a new set of stroke data into the DB
|
||||
"""
|
||||
@@ -280,6 +289,7 @@ class StrokeDataSerializer(serializers.Serializer):
|
||||
# do something
|
||||
return 1
|
||||
|
||||
|
||||
class GeoPointSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = GeoPoint
|
||||
@@ -291,8 +301,10 @@ class GeoPointSerializer(serializers.ModelSerializer):
|
||||
)
|
||||
extra_kwargs = {'id': {'read_only': False, 'required': True}}
|
||||
|
||||
|
||||
class GeoPolygonSerializer(serializers.ModelSerializer):
|
||||
points = GeoPointSerializer(many=True)
|
||||
|
||||
class Meta:
|
||||
model = GeoPolygon
|
||||
fields = (
|
||||
@@ -303,8 +315,10 @@ class GeoPolygonSerializer(serializers.ModelSerializer):
|
||||
)
|
||||
extra_kwargs = {'id': {'read_only': False, 'required': True}}
|
||||
|
||||
|
||||
class GeoCourseSerializer(serializers.ModelSerializer):
|
||||
polygons = GeoPolygonSerializer(many=True)
|
||||
|
||||
class Meta:
|
||||
model = GeoCourse
|
||||
fields = (
|
||||
@@ -316,30 +330,32 @@ class GeoCourseSerializer(serializers.ModelSerializer):
|
||||
'polygons',
|
||||
)
|
||||
|
||||
def update(self, instance, validated_data): # pragma: no cover
|
||||
instance.name = validated_data.get('name',instance.name)
|
||||
instance.country = validated_data.get('country',instance.country)
|
||||
instance.notes = validated_data.get('notes',instance.notes)
|
||||
def update(self, instance, validated_data): # pragma: no cover
|
||||
instance.name = validated_data.get('name', instance.name)
|
||||
instance.country = validated_data.get('country', instance.country)
|
||||
instance.notes = validated_data.get('notes', instance.notes)
|
||||
instance.save()
|
||||
|
||||
polygons = validated_data.get('polygons')
|
||||
for polygon in polygons:
|
||||
polygon_id = polygon.get('id',None)
|
||||
polygon_id = polygon.get('id', None)
|
||||
if polygon_id:
|
||||
p = GeoPolygon.objects.get(id=polygon_id)
|
||||
p.name = polygon.get('name',p.name)
|
||||
p.order_in_course = polygon.get('order_in_course',p.order_in_course)
|
||||
p.name = polygon.get('name', p.name)
|
||||
p.order_in_course = polygon.get(
|
||||
'order_in_course', p.order_in_course)
|
||||
p.save()
|
||||
|
||||
points = polygon.get('points')
|
||||
|
||||
for point in points:
|
||||
point_id = point.get('id',None)
|
||||
point_id = point.get('id', None)
|
||||
if point_id:
|
||||
pt = GeoPoint.objects.get(id=point_id)
|
||||
pt.latitude = point.get('latitude',pt.latitude)
|
||||
pt.longitude = point.get('longitude',pt.longitude)
|
||||
pt.order_in_poly = point.get('order_in_poly',pt.order_in_poly)
|
||||
pt.latitude = point.get('latitude', pt.latitude)
|
||||
pt.longitude = point.get('longitude', pt.longitude)
|
||||
pt.order_in_poly = point.get(
|
||||
'order_in_poly', pt.order_in_poly)
|
||||
pt.save()
|
||||
|
||||
return instance
|
||||
|
||||
Reference in New Issue
Block a user