Skip to content

Commit

Permalink
Hosts: Add API to create challenge host for a particular challenge ho…
Browse files Browse the repository at this point in the history
…st team. (#113)
  • Loading branch information
taranjeet authored and deshraj committed Nov 20, 2016
1 parent bba88e5 commit eef82d5
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 9 deletions.
9 changes: 9 additions & 0 deletions apps/hosts/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,15 @@ class ChallengeHostSerializer(serializers.ModelSerializer):
status = serializers.ChoiceField(choices=ChallengeHost.STATUS_OPTIONS)
permissions = serializers.ChoiceField(choices=ChallengeHost.PERMISSION_OPTIONS)

def __init__(self, *args, **kwargs):
super(ChallengeHostSerializer, self).__init__(*args, **kwargs)
context = kwargs.get('context')
if context:
challenge_host_team = context.get('challenge_host_team')
request = context.get('request')
kwargs['data']['team_name'] = challenge_host_team.pk
kwargs['data']['user'] = request.user.pk

class Meta:
model = ChallengeHost
fields = ('id', 'user', 'team_name', 'status', 'permissions',)
29 changes: 20 additions & 9 deletions apps/hosts/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ def challenge_host_team_detail(request, pk):
return Response(status=status.HTTP_204_NO_CONTENT)


@api_view(['GET'])
@api_view(['GET', 'POST'])
@permission_classes((permissions.IsAuthenticated,))
@authentication_classes((TokenAuthentication,))
def challenge_host_list(request, challenge_host_team_pk):
Expand All @@ -88,11 +88,22 @@ def challenge_host_list(request, challenge_host_team_pk):
response_data = {'error': 'ChallengeHostTeam does not exist'}
return Response(response_data, status=status.HTTP_406_NOT_ACCEPTABLE)

challenge_host = ChallengeHost.objects.filter(team_name=challenge_host_team,
user=request.user)
paginator = PageNumberPagination()
paginator.page_size = settings.REST_FRAMEWORK['PAGE_SIZE']
result_page = paginator.paginate_queryset(challenge_host, request)
serializer = ChallengeHostSerializer(result_page, many=True)
response_data = serializer.data
return paginator.get_paginated_response(response_data)
if request.method == 'GET':
challenge_host = ChallengeHost.objects.filter(team_name=challenge_host_team,
user=request.user)
paginator = PageNumberPagination()
paginator.page_size = settings.REST_FRAMEWORK['PAGE_SIZE']
result_page = paginator.paginate_queryset(challenge_host, request)
serializer = ChallengeHostSerializer(result_page, many=True)
response_data = serializer.data
return paginator.get_paginated_response(response_data)

elif request.method == 'POST':
serializer = ChallengeHostSerializer(data=request.data,
context={'challenge_host_team': challenge_host_team,
'request': request})
if serializer.is_valid():
serializer.save()
response_data = serializer.data
return Response(response_data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

0 comments on commit eef82d5

Please sign in to comment.