diff options
author | Andy Doan <andy.doan@linaro.org> | 2017-01-26 16:54:51 -0600 |
---|---|---|
committer | Andy Doan <andy.doan@linaro.org> | 2017-01-27 10:13:15 -0600 |
commit | 596ed1530c845ef2693cf59e3d1eadf5b19d5560 (patch) | |
tree | fd88c2327e22dc115a2f368045712072fa88616c | |
parent | fc2355a854d9b5a8a71f5e2cce2ec6d307743f8f (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.py | 28 | ||||
-rw-r--r-- | linaro_metrics/urls.py | 8 | ||||
-rwxr-xr-x | unit-test.sh | 2 |
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 |