Private
Public Access
1
0
This commit is contained in:
Sander Roosendaal
2022-02-15 08:05:12 +01:00
parent 5b3d7fcf2c
commit 8af7ac8af4
71 changed files with 19992 additions and 19476 deletions

View File

@@ -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