From 88cd117aeba474913d229805ef3e332dc45f6157 Mon Sep 17 00:00:00 2001 From: coagulant Date: Sun, 13 Oct 2013 22:23:36 +0400 Subject: [PATCH] Added url to Spec detail view, added Spec list view --- gopython3/core/rest.py | 8 +++++++- gopython3/core/serializers.py | 5 +++-- gopython3/core/tests/test_rest.py | 3 ++- gopython3/core/urls.py | 3 ++- 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/gopython3/core/rest.py b/gopython3/core/rest.py index 10aef6c..c303f36 100644 --- a/gopython3/core/rest.py +++ b/gopython3/core/rest.py @@ -1,6 +1,6 @@ from django.db import transaction from rest_framework import viewsets, routers, status, mixins -from rest_framework.generics import RetrieveAPIView +from rest_framework.generics import RetrieveAPIView, ListAPIView from rest_framework.response import Response from rest_framework_extensions.mixins import DetailSerializerMixin from core.serializers import JobSerializer, PackageSerializer, JobDetailSerialzier @@ -27,6 +27,11 @@ def create(self, request, *args, **kwargs): headers=headers) +class PackageListView(ListAPIView): + model = Spec + serializer_class = PackageSerializer + + class PackageView(RetrieveAPIView): model = Spec serializer_class = PackageSerializer @@ -34,4 +39,5 @@ class PackageView(RetrieveAPIView): router = routers.DefaultRouter() +router.include_format_suffixes = False router.register(r'jobs', JobViewSet) diff --git a/gopython3/core/serializers.py b/gopython3/core/serializers.py index 96e0f67..2f25b8d 100644 --- a/gopython3/core/serializers.py +++ b/gopython3/core/serializers.py @@ -101,7 +101,7 @@ def to_native(self, obj): } -class PackageSerializer(serializers.ModelSerializer): +class PackageSerializer(serializers.HyperlinkedModelSerializer): id = serializers.Field(source='code') name = serializers.Field(source='package.name') pypi = PyPIField(source='*') @@ -110,9 +110,10 @@ class PackageSerializer(serializers.ModelSerializer): forks = ForkField(source='package') ci = CIField(source='package') pr = PullRequestField(source='package') + url = serializers.HyperlinkedIdentityField(view_name='spec-detail', lookup_field='code') class Meta: model = Spec fields = ('id', 'name', 'version', 'status', 'created_at', 'updated_at', 'pypi', 'repo', - 'issues', 'forks', 'ci') + 'issues', 'forks', 'ci', 'url') diff --git a/gopython3/core/tests/test_rest.py b/gopython3/core/tests/test_rest.py index a71eb5a..09508a9 100644 --- a/gopython3/core/tests/test_rest.py +++ b/gopython3/core/tests/test_rest.py @@ -110,7 +110,8 @@ def test_spec_detail(self): "ci": { "url": "https://travis-ci.org/jezdez/django_compressor", "status": "passing" - } + }, + 'url': 'http://testserver/api/v1/packages/django_compressor/1.3/' }) diff --git a/gopython3/core/urls.py b/gopython3/core/urls.py index 9bc586a..128e901 100644 --- a/gopython3/core/urls.py +++ b/gopython3/core/urls.py @@ -1,9 +1,10 @@ # coding: utf-8 from django.conf.urls import patterns, url, include -from core.rest import router, PackageView +from core.rest import router, PackageView, PackageListView urlpatterns = patterns('', url(r'', include(router.urls)), + url(r'^packages/$', PackageListView.as_view(), name='spec-list'), url(r'^packages/(?P.+)/$', PackageView.as_view(), name='spec-detail'), )