Private
Public Access
1
0

Merge branch 'release/v13.60'

This commit is contained in:
Sander Roosendaal
2020-07-18 11:36:37 +02:00
6 changed files with 161 additions and 14 deletions

View File

@@ -2223,7 +2223,7 @@ class CourseStandard(models.Model):
weightclass = models.CharField(max_length=150,default='hwt')
adaptiveclass = models.CharField(choices=mytypes.adaptivetypes,max_length=50,default="None")
skillclass = models.CharField(max_length=150,default='Open')
standardcollection = models.ForeignKey(StandardCollection,on_delete=models.CASCADE)
standardcollection = models.ForeignKey(StandardCollection,on_delete=models.CASCADE,related_name='standards')
class Meta:
unique_together = (

View File

@@ -26,3 +26,8 @@ class IsOwnerOrNot(permissions.BasePermission):
def has_object_permission(self, request, view, obj):
r = Rower.objects.get(user=request.user)
return (obj.user == r)
class IsCompetitorOrNot(permissions.BasePermission):
def has_object_permission(self, request, view, obj):
return (obj.userid == request.user.id)

View File

@@ -7,7 +7,11 @@ from __future__ import unicode_literals
# Also optionally define POST, PATCH methods (create, update)
from rest_framework import serializers
from rowers.models import Workout,Rower,FavoriteChart
from rowers.models import (
Workout,Rower,FavoriteChart,VirtualRaceResult,
VirtualRace,GeoCourse,StandardCollection, CourseStandard,
)
import datetime
@@ -42,7 +46,80 @@ class FavoriteChartSerializer(serializers.ModelSerializer):
'reststrokes',
'user'
)
class CourseStandardSerializer(serializers.ModelSerializer):
class Meta:
model = CourseStandard
fields = (
'id',
'name',
'coursedistance',
'coursetime',
'agemin',
'agemax',
'boatclass',
'boattype',
'sex',
'weightclass',
'adaptiveclass',
'skillclass',
'standardcollection',
)
class StandardCollectionSerializer(serializers.ModelSerializer):
standards = CourseStandardSerializer(many=True,read_only=True)
class Meta:
model = StandardCollection
fields = (
'id',
'notes',
'active',
'standards'
)
class EntrySerializer(serializers.ModelSerializer):
entrycategory = CourseStandardSerializer(read_only=True)
class Meta:
model = VirtualRaceResult
fields = (
'id',
'teamname',
'adaptiveclass',
'skillclass',
'race',
'distance',
'duration',
'points',
'boattype',
'sex',
'age',
'entrycategory',
)
class VirtualRaceSerializer(serializers.ModelSerializer):
coursestandards = StandardCollectionSerializer(read_only=True)
class Meta:
model = VirtualRace
fields = (
'id',
'registration_closure',
'evaluation_closure',
'start_time',
'end_time',
'country',
'timezone',
'contact_phone',
'contact_email',
'coursestandards',
)
class WorkoutSerializer(serializers.ModelSerializer):
class Meta:
model = Workout
@@ -58,7 +135,7 @@ class WorkoutSerializer(serializers.ModelSerializer):
'maxhr',
'notes',
'summary',
'boattype',
'boattype',
'timezone',
'forceunit',
'inboard',
@@ -101,7 +178,7 @@ class WorkoutSerializer(serializers.ModelSerializer):
rankingpiece=validated_data['rankingpiece'],)
w.save()
return w
def update(self, instance, validated_data):
d = validated_data['date']
t = validated_data['starttime']
@@ -138,7 +215,7 @@ class WorkoutSerializer(serializers.ModelSerializer):
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
@@ -146,6 +223,3 @@ class StrokeDataSerializer(serializers.Serializer):
# do something
return 1

View File

@@ -356,7 +356,8 @@ def async_get_workout(user,stravaid):
try:
token = strava_open(user)
except NoTokenError:
return 0
return 0
csvfilename = 'media/{code}_{stravaid}.csv'.format(code=uuid4().hex[:16],stravaid=stravaid)
job = myqueue(queue,
fetch_strava_workout,

View File

@@ -7,7 +7,10 @@ from django.conf.urls import url, include
from django.urls import path, re_path
from django.contrib.auth.models import User
from django.contrib.auth.decorators import login_required, permission_required
from rowers.models import Workout,Rower,FavoriteChart
from rowers.models import (
Workout,Rower,FavoriteChart,VirtualRaceResult,
VirtualRace,StandardCollection,CourseStandard,
)
from rest_framework import routers, serializers, viewsets,permissions
from rest_framework.urlpatterns import format_suffix_patterns
@@ -16,12 +19,19 @@ from rowers import views
from django.contrib.auth import views as auth_views
from django.views.generic.base import TemplateView
from rowers.permissions import IsOwnerOrNot,IsOwnerOrReadOnly
from rowers.permissions import (
IsOwnerOrNot,IsOwnerOrReadOnly,
IsCompetitorOrNot,
)
from rowers.serializers import (
WorkoutSerializer,
RowerSerializer,
StrokeDataSerializer,
FavoriteChartSerializer,
EntrySerializer,
CourseStandardSerializer,
StandardCollectionSerializer,
VirtualRaceSerializer,
)
from oauth2_provider.views import (
@@ -78,7 +88,7 @@ class FavoriteChartViewSet(viewsets.ModelViewSet):
def get_queryset(self):
try:
r = Rower.objects.filter(user=self.request.user)
r = Rower.objects.get(user=self.request.user)
return FavoriteChart.objects.filter(user=r)
except TypeError:
return []
@@ -89,6 +99,59 @@ class FavoriteChartViewSet(viewsets.ModelViewSet):
http_method_names = ['get','put','patch','delete']
class EntryViewSet(viewsets.ModelViewSet):
model = VirtualRaceResult
serializer_class = EntrySerializer
def get_queryset(self):
try:
return VirtualRaceResult.objects.filter(userid=self.request.user.id)
except TypeError:
return []
http_method_names = ['get']
permission_classes = (
IsCompetitorOrNot,
)
class VirtualRaceViewSet(viewsets.ModelViewSet):
model = VirtualRace
serializer_class = VirtualRaceSerializer
def get_queryset(self):
try:
return VirtualRace.objects.all()
except TypeError:
return []
http_method_names = ['get']
class CourseStandardViewSet(viewsets.ModelViewSet):
model = CourseStandard
serializer_class = CourseStandardSerializer
def get_queryset(self):
try:
return CourseStandard.objects.all()
except TypeError:
return []
http_method_names = ['get']
class StandardCollectionViewSet(viewsets.ModelViewSet):
model = StandardCollection
serializer_class = StandardCollectionSerializer
def get_queryset(self):
try:
return StandardCollection.objects.all()
except TypeError:
return []
http_method_names = ['get']
class StrokeDataViewSet(viewsets.ModelViewSet):
serializer_class = StrokeDataSerializer
@@ -97,6 +160,10 @@ router = routers.DefaultRouter()
router.register(r'api/workouts',WorkoutViewSet, 'workout')
router.register(r'api/me',RowerViewSet, 'rower')
router.register(r'api/charts',FavoriteChartViewSet, 'charts')
router.register(r'api/entries',EntryViewSet,'entries')
router.register(r'api/challenges',VirtualRaceViewSet,'challenges')
router.register(r'api/standards',CourseStandardViewSet,'standards')
router.register(r'api/standardcollections',StandardCollectionViewSet,'standardcollections')
def permissiondenied_view(request):
raise PermissionDenied

View File

@@ -643,7 +643,7 @@ except ImportError:
from rest_framework.decorators import api_view, renderer_classes
from rowers.permissions import IsOwnerOrNot
from rowers.permissions import IsOwnerOrNot, IsCompetitorOrNot
import rowers.plots as plots
import rowers.mailprocessing as mailprocessing