]> git.ipfire.org Git - thirdparty/patchwork.git/commitdiff
REST: Fix versioning
authorStephen Finucane <stephen@that.guru>
Wed, 26 Apr 2017 23:58:03 +0000 (00:58 +0100)
committerStephen Finucane <stephen@that.guru>
Fri, 28 Apr 2017 22:52:04 +0000 (23:52 +0100)
One of the few remaining warts in the API is versioning. There is some
basic versioning there, but it doesn't work properly as-is. Fix this by
correcting the index endpoint ('/') to use Django REST Framework's
'reverse' function [1], which handles versioning for us [2] and
switching from 'NamespaceVersioning' to 'URLPathVersioning', the latter
of which does the same thing but in a different way.

[1] http://www.django-rest-framework.org/api-guide/reverse/#reverse
[2] http://www.django-rest-framework.org/api-guide/versioning/#reversing-urls-for-versioned-apis
[3] http://www.django-rest-framework.org/api-guide/versioning/#urlpathversioning

Signed-off-by: Stephen Finucane <stephen@that.guru>
patchwork/api/check.py
patchwork/api/event.py
patchwork/api/index.py
patchwork/api/patch.py
patchwork/settings/base.py
patchwork/urls.py

index 393fcf207fc1fa53b5ab7cd5c9bab18e02834e20..d3682652e14776345bd48a16256371eb59491dcf 100644 (file)
@@ -100,12 +100,12 @@ class CheckListCreate(CheckMixin, ListCreateAPIView):
 
     lookup_url_kwarg = 'patch_id'
 
-    def create(self, request, patch_id):
+    def create(self, request, patch_id, *args, **kwargs):
         p = Patch.objects.get(id=patch_id)
         if not p.is_editable(request.user):
             raise PermissionDenied()
         request.patch = p
-        return super(CheckListCreate, self).create(request)
+        return super(CheckListCreate, self).create(request, *args, **kwargs)
 
 
 class CheckDetail(CheckMixin, MultipleFieldLookupMixin, RetrieveAPIView):
index 32b3bde3cab4d0e18b9cde0fed70dcd0112a6476..a0600226615d5808238ed9a6e1511b7c331139d8 100644 (file)
@@ -19,8 +19,8 @@
 
 from collections import OrderedDict
 
-from django.core.urlresolvers import reverse
 from rest_framework.generics import ListAPIView
+from rest_framework.reverse import reverse
 from rest_framework.serializers import HyperlinkedModelSerializer
 from rest_framework.serializers import SerializerMethodField
 
index 513e8b60da1a0214d2b00600f9f84f76bfb1bf6b..53494db78de32363899341f8e0f8ca186fa110d9 100644 (file)
 # along with Patchwork; if not, write to the Free Software
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
-from django.core.urlresolvers import reverse
 from rest_framework.response import Response
+from rest_framework.reverse import reverse
 from rest_framework.views import APIView
 
 
 class IndexView(APIView):
 
-    def get(self, request, format=None):
+    def get(self, request, *args, **kwargs):
         return Response({
-            'projects': request.build_absolute_uri(
-                reverse('api-project-list')),
-            'users': request.build_absolute_uri(reverse('api-user-list')),
-            'people': request.build_absolute_uri(reverse('api-person-list')),
-            'patches': request.build_absolute_uri(reverse('api-patch-list')),
-            'covers': request.build_absolute_uri(reverse('api-cover-list')),
-            'series': request.build_absolute_uri(reverse('api-series-list')),
-            'events': request.build_absolute_uri(reverse('api-event-list')),
-            'bundles': request.build_absolute_uri(reverse('api-bundle-list')),
+            'projects': reverse('api-project-list', request=request),
+            'users': reverse('api-user-list', request=request),
+            'people': reverse('api-person-list', request=request),
+            'patches': reverse('api-patch-list', request=request),
+            'covers': reverse('api-cover-list', request=request),
+            'series': reverse('api-series-list', request=request),
+            'events': reverse('api-event-list', request=request),
+            'bundles': reverse('api-bundle-list', request=request),
         })
index fa6fb46fbc173c5ac5c2558c7f7de61ce2dfb992..1e5c13fa36187c72a6f4a16f559c9619ca611dc1 100644 (file)
 
 import email.parser
 
-from django.core.urlresolvers import reverse
 from django.utils.translation import ugettext_lazy as _
 from rest_framework.generics import ListAPIView
 from rest_framework.generics import RetrieveUpdateAPIView
 from rest_framework.relations import RelatedField
+from rest_framework.reverse import reverse
 from rest_framework.serializers import HyperlinkedModelSerializer
 from rest_framework.serializers import SerializerMethodField
 
index 5d5caf1b2cafa236bc7903eefeca6ea47b6ac660..e6d34ba85fe680e867da6acabfb143489fa4121b 100644 (file)
@@ -144,7 +144,7 @@ except ImportError:
 
 REST_FRAMEWORK = {
     'DEFAULT_VERSIONING_CLASS':
-        'rest_framework.versioning.NamespaceVersioning',
+        'rest_framework.versioning.URLPathVersioning',
     'DEFAULT_PAGINATION_CLASS': 'patchwork.api.base.LinkHeaderPagination',
     'DEFAULT_FILTER_BACKENDS': (
         'patchwork.compat.DjangoFilterBackend',
index e888386630e46551c1ecea9fd7dbfe2fb286d4d3..8c8c172fe7a24b56eea5d597ec8cad57cfb4d289 100644 (file)
@@ -232,7 +232,7 @@ if settings.ENABLE_REST_API:
     ]
 
     urlpatterns += [
-        url(r'^api/1.0/', include(api_patterns)),
+        url(r'^api/(?P<version>(1.0))/', include(api_patterns)),
     ]