Private
Public Access
1
0

Merge branch 'feature/restapi2' into develop

This commit is contained in:
Sander Roosendaal
2017-01-04 10:35:50 +01:00
4 changed files with 101 additions and 5 deletions
+15 -1
View File
@@ -1,5 +1,5 @@
from rest_framework import serializers
from rowers.models import Workout,Rower,StrokeData
from rowers.models import Workout,Rower,StrokeData,FavoriteChart
import datetime
@@ -8,6 +8,7 @@ class RowerSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Rower
fields = (
'id',
'weightcategory',
'max',
'rest',
@@ -19,6 +20,19 @@ class RowerSerializer(serializers.HyperlinkedModelSerializer):
'ftp',
)
class FavoriteChartSerializer(serializers.ModelSerializer):
class Meta:
model = FavoriteChart
fields = (
'id',
'xparam',
'yparam1',
'yparam2',
'plottype',
'workouttype',
'reststrokes',
'user'
)
class WorkoutSerializer(serializers.ModelSerializer):
class Meta:
+27 -2
View File
@@ -9,7 +9,7 @@
</p>
{% endif %}
<div class="grid_6 alpha">
<h1>Heart Rate Bands</h1>
<h2>Heart Rate Bands</h2>
<form enctype="multipart/form-data" action="" method="post">
<table>
@@ -22,8 +22,8 @@
</div>
</div>
<div class="grid_6 omega">
<h1>Functional Threshold Power</h1>
<p>
<h2>Functional Threshold Power</h2>
<form enctype="multipart/form-data" action="" method="post">
<table>
{{ powerform.as_table }}
@@ -34,6 +34,31 @@
</form>
</div>
</p>
{% if grants %}
<p>
<h2>Applications</h2>
<table width="100%">
<thead>
<tr>
<th>Application</th>
<th>Scope</th>
<th>Revoke</th>
</tr>
</thead>
<tbody>
{% for grant in grants %}
<tr>
<td>{{ grant.application }}</td>
<td>{{ grant.scope }}</td>
<td>
<a class="button red small" href="/rowers/me/revokeapp/{{ grant.application.id }}">Revoke</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</p>
{% endif %}
</div>
+33 -2
View File
@@ -2,7 +2,7 @@ from django.conf import settings
from django.conf.urls import url, include
from django.contrib.auth.models import User
from models import Workout,Rower,StrokeData
from models import Workout,Rower,StrokeData,FavoriteChart
from rest_framework import routers, serializers, viewsets,permissions
from rest_framework.urlpatterns import format_suffix_patterns
@@ -19,8 +19,18 @@ from rowers.serializers import (
WorkoutSerializer,
RowerSerializer,
StrokeDataSerializer,
FavoriteChartSerializer,
)
from oauth2_provider.views import (
AuthorizedTokensListView,
AuthorizedTokenDeleteView,
)
from oauth2_provider.views.base import (
RevokeTokenView
)
class WorkoutViewSet(viewsets.ModelViewSet):
model = Workout
#queryset = Workout.objects.all().order_by("-date", "-starttime")
@@ -36,12 +46,32 @@ class WorkoutViewSet(viewsets.ModelViewSet):
IsOwnerOrNot,
)
class RowerViewSet(viewsets.ModelViewSet):
model = Rower
serializer_class = RowerSerializer
#queryset = Rower.objects.all()
def get_queryset(self):
r = Rower.objects.filter(user=self.request.user)
return r
permission_classes = (
IsOwnerOrNot,
)
class FavoriteChartViewSet(viewsets.ModelViewSet):
model = FavoriteChart
serializer_class = FavoriteChartSerializer
queryset = FavoriteChart.objects.all()
class StrokeDataViewSet(viewsets.ModelViewSet):
serializer_class = StrokeDataSerializer
# Routers provide an easy way of automatically determining the URL conf.
router = routers.DefaultRouter()
router.register(r'api/workouts',WorkoutViewSet, 'workout')
router.register(r'api/me',RowerViewSet, 'rower')
router.register(r'api/charts',FavoriteChartViewSet, 'charts')
handler500 = 'views.error500_view'
@@ -159,6 +189,7 @@ urlpatterns = [
url(r'^me/edit/$',views.rower_edit_view),
url(r'^me/edit/(.+.*)/$',views.rower_edit_view),
url(r'^me/c2authorize/$',views.rower_c2_authorize),
url(r'^me/revokeapp/(\d+)$',views.rower_revokeapp_view),
url(r'^me/stravaauthorize/$',views.rower_strava_authorize),
url(r'^me/sporttracksauthorize/$',views.rower_sporttracks_authorize),
url(r'^me/sporttracksrefresh/$',views.rower_sporttracks_token_refresh),
+26
View File
@@ -75,6 +75,8 @@ import stravalib
from stravalib.exc import ActivityUploadFailed,TimeoutExceeded
from weather import get_wind_data
from oauth2_provider.models import Application,Grant,AccessToken
import django_rq
queue = django_rq.get_queue('default')
queuelow = django_rq.get_queue('low')
@@ -4780,14 +4782,38 @@ def rower_edit_view(request,message=""):
r = Rower.objects.get(user=request.user)
form = RowerForm(instance=r)
powerform = RowerPowerForm(instance=r)
grants = AccessToken.objects.filter(user=request.user)
return render(request, 'rower_form.html',
{
'form':form,
'powerform':powerform,
'grants':grants,
})
except Rower.DoesNotExist:
return HttpResponse("This user doesn't exist")
@login_required()
def rower_revokeapp_view(request,id=0):
tokens = AccessToken.objects.filter(user=request.user,application=id)
refreshtokens = AccessToken.objects.filter(user=request.user,application=id)
for token in tokens:
token.revoke()
for token in refreshtokens:
token.revoke()
r = Rower.objects.get(user=request.user)
form = RowerForm(instance=r)
powerform = RowerPowerForm(instance=r)
grants = AccessToken.objects.filter(user=request.user)
return render(request, 'rower_form.html',
{
'form':form,
'powerform':powerform,
'grants':grants,
})
class JSONResponse(HttpResponse):
def __init__(self, data, **kwargs):
content = JSONRenderer().render(data)