Starting a basic app
[bigly] / src / bigly / views.py
1 from django.views.generic.base import TemplateView
2
3 from rest_framework import status, viewsets
4 from rest_framework.response import Response
5 import requests
6
7 from . import serializers
8
9 class IndexView(TemplateView):
10     template_name = 'bigly/index.html'
11
12 index = IndexView.as_view()
13
14 class FollowRedirectsViewSet(viewsets.ViewSet):
15     serializer_class = serializers.FollowRedirectsSerializer
16
17     def follow_redirects(self, request):
18         serializer = serializers.FollowRedirectsSerializer(data=request.query_params)
19
20         if not serializer.is_valid():
21             return Response(
22                 serializer.errors,
23                 status=status.HTTP_400_BAD_REQUEST,
24             )
25
26         link = serializer.data['link']
27
28         while True:
29             response = requests.head(link)
30
31             # TODO Handle timeouts
32
33             if 301 <= response.status_code and response.status_code <= 308:
34                 # TODO Handle the different kinds of redirects correctly
35
36                 link = response.headers.get('Location')
37
38                 if not link:
39                     # TODO Handle this
40                     raise Exception()
41
42             # TODO Handle error responses
43             else:
44                 return Response(
45                     {
46                         'link': link,
47                         'status': response.status_code,
48                     },
49                     status=status.HTTP_200_OK,
50                 )
51
52
53 api_follow_redirects = FollowRedirectsViewSet.as_view({
54     'get': 'follow_redirects',
55 })