remove recursive serialization in api and replace url root with list of all endpoints

This commit is contained in:
Laura Klünder 2016-10-11 17:29:02 +02:00
parent 9658de72a2
commit 4b97e3532f
6 changed files with 66 additions and 131 deletions

View file

@ -20,18 +20,18 @@ class HosterViewSet(ViewSet):
"""
lookup_field = 'name'
def retrieve(self, request, pk=None):
if pk not in hosters:
def retrieve(self, request, name=None):
if name not in hosters:
raise Http404
serializer = HosterSerializer(hosters[pk], context={'request': request})
serializer = HosterSerializer(hosters[name], context={'request': request})
return Response(serializer.data)
@detail_route(methods=['get'])
def state(self, request, pk=None):
if pk not in hosters:
def state(self, request, name=None):
if name not in hosters:
raise Http404
hoster = hosters[pk]
hoster = hosters[name]
state = hoster.get_state(request)
error = hoster.get_error(request) if state == 'logged_out' else None
@ -41,18 +41,18 @@ class HosterViewSet(ViewSet):
)))
@detail_route(methods=['post'])
def auth_uri(self, request, pk=None):
if pk not in hosters:
def auth_uri(self, request, name=None):
if name not in hosters:
raise Http404
return Response({
'auth_uri': hosters[pk].get_auth_uri(request)
'auth_uri': hosters[name].get_auth_uri(request)
})
@detail_route(methods=['post'])
def submit(self, request, pk=None):
if pk not in hosters:
def submit(self, request, name=None):
if name not in hosters:
raise Http404
hoster = hosters[pk]
hoster = hosters[name]
if 'data' not in request.POST:
raise ValidationError('Missing POST parameter: data')
@ -94,10 +94,10 @@ class SubmitTaskViewSet(ViewSet):
"""
Get hoster submit tasks
"""
lookup_field = 'id'
lookup_field = 'id_'
def retrieve(self, request, pk=None):
task = submit_edit_task.AsyncResult(task_id=pk)
def retrieve(self, request, id_=None):
task = submit_edit_task.AsyncResult(task_id=id_)
try:
task.ready()
except:

View file

@ -1,28 +1,13 @@
from rest_framework import serializers
from rest_framework.reverse import reverse
class HosterSerializer(serializers.Serializer):
name = serializers.CharField()
url = serializers.HyperlinkedIdentityField(view_name='api:hoster-detail', lookup_field='name')
state_url = serializers.SerializerMethodField()
auth_uri_url = serializers.SerializerMethodField()
submit_url = serializers.SerializerMethodField()
base_url = serializers.CharField()
def get_state_url(self, obj):
return reverse('api:hoster-state', args=(obj.name, ), request=self.context.get('request'))
def get_auth_uri_url(self, obj):
return reverse('api:hoster-auth-uri', args=(obj.name, ), request=self.context.get('request'))
def get_submit_url(self, obj):
return reverse('api:hoster-submit', args=(obj.name, ), request=self.context.get('request'))
class TaskSerializer(serializers.Serializer):
id = serializers.CharField()
url = serializers.HyperlinkedIdentityField(view_name='api:hoster-detail', lookup_field='id')
started = serializers.SerializerMethodField()
done = serializers.SerializerMethodField()
success = serializers.SerializerMethodField()