summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndy Doan <andy.doan@linaro.org>2017-01-26 16:54:51 -0600
committerAndy Doan <andy.doan@linaro.org>2017-01-27 10:13:15 -0600
commit596ed1530c845ef2693cf59e3d1eadf5b19d5560 (patch)
treefd88c2327e22dc115a2f368045712072fa88616c
parentfc2355a854d9b5a8a71f5e2cce2ec6d307743f8f (diff)
linaro-metrics: add patches endpoint to the team resource
This allows us to query for patches from a certain team Change-Id: I8642909058c1b6a9d0b3282aea4eb717e981ab90
-rw-r--r--linaro_metrics/api.py28
-rw-r--r--linaro_metrics/urls.py8
-rwxr-xr-xunit-test.sh2
3 files changed, 36 insertions, 2 deletions
diff --git a/linaro_metrics/api.py b/linaro_metrics/api.py
index 47be36e..203aa6d 100644
--- a/linaro_metrics/api.py
+++ b/linaro_metrics/api.py
@@ -1,15 +1,26 @@
+from django.core.urlresolvers import reverse
from django.shortcuts import get_object_or_404
from rest_framework.generics import ListAPIView, RetrieveAPIView
-from rest_framework.serializers import HyperlinkedModelSerializer
+from rest_framework.serializers import (
+ HyperlinkedModelSerializer, SerializerMethodField)
+
+from patchwork.api.patch import PatchListSerializer
+from patchwork.models import Patch
from linaro_metrics.models import Team
class TeamListSerializer(HyperlinkedModelSerializer):
+ patches = SerializerMethodField()
+
+ def get_patches(self, instance):
+ return self.context.get('request').build_absolute_uri(
+ reverse('api-team-patch-list', kwargs={'team_id': instance.id}))
+
class Meta:
model = Team
- fields = ('id', 'url', 'name', 'display_name', 'active')
+ fields = ('id', 'url', 'name', 'display_name', 'active', 'patches')
read_only_fields = fields
extra_kwargs = {
'url': {'view_name': 'api-team-detail'},
@@ -42,3 +53,16 @@ class TeamDetail(RetrieveAPIView):
self.kwargs['pk'] = obj.id
self.check_object_permissions(self.request, obj)
return obj
+
+
+class TeamPatchList(ListAPIView):
+ lookup_url_kwarg = 'team_id'
+ serializer_class = PatchListSerializer
+ queryset = Patch.objects.all()
+
+ def get_queryset(self):
+ try:
+ obj = Team.objects.get(id=int(self.kwargs['team_id']))
+ except (ValueError, Team.DoesNotExist):
+ obj = get_object_or_404(Team, name=self.kwargs['team_id'])
+ return Patch.objects.filter(teamcredit__team=obj)
diff --git a/linaro_metrics/urls.py b/linaro_metrics/urls.py
index 312c0df..9e93e4e 100644
--- a/linaro_metrics/urls.py
+++ b/linaro_metrics/urls.py
@@ -3,6 +3,8 @@ from django.contrib import admin
import patchwork.urls
+from linaro_metrics.api import TeamList, TeamDetail, TeamPatchList
+
admin.autodiscover()
urlpatterns = patterns(
@@ -23,6 +25,12 @@ urlpatterns = patterns(
(r'^reports/project_activity$',
'linaro_metrics.views.report_project_activity'),
+ url(r'^api/1.0/teams/$', TeamList.as_view(), name='api-team-list'),
+ url(r'^api/1.0/teams/(?P<pk>[^/]+)/$', TeamDetail.as_view(),
+ name='api-team-detail'),
+ url(r'^api/1.0/teams/(?P<team_id>[^/]+)/patches/$',
+ TeamPatchList.as_view(), name='api-team-patch-list'),
+
# compatibility for old patches
(r'^(?P<patch>\d+)/$', 'linaro_metrics.views.old_patch_link'),
)
diff --git a/unit-test.sh b/unit-test.sh
index 959bb7f..90072d1 100755
--- a/unit-test.sh
+++ b/unit-test.sh
@@ -10,6 +10,8 @@ if [ -z $VIRTUAL_ENV ] ; then
virtualenv $VENV_DIR
. $VENV_DIR/bin/activate
pip install Django==1.8.10
+ pip install djangorestframework==3.5
+ pip install django-filter==1.0
pip install sqlparse==0.2.2
pip install dulwich
pip install mock