From patchwork Wed May 3 11:43:04 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Philippe Pepiot X-Patchwork-Id: 757970 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.ozlabs.org (lists.ozlabs.org [103.22.144.68]) (using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3wHxBq2HDvz9rxl for ; Wed, 3 May 2017 21:44:03 +1000 (AEST) Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id 3wHxBq1J7RzDqFW for ; Wed, 3 May 2017 21:44:03 +1000 (AEST) X-Original-To: patchwork@lists.ozlabs.org Delivered-To: patchwork@lists.ozlabs.org Received: from tucana.logilab.fr (cetus.logilab.fr [109.190.107.82]) by lists.ozlabs.org (Postfix) with ESMTP id 3wHxBj3v8gzDqCt for ; Wed, 3 May 2017 21:43:56 +1000 (AEST) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on tucana.logilab.priv Received: from sh71.tls.logilab.fr (sh71.tls.logilab.fr [172.19.1.71]) by cassiopeia.logilab.fr (Postfix) with SMTP id 5E3E520399; Wed, 3 May 2017 13:43:45 +0200 (CEST) Received: (nullmailer pid 4419 invoked by uid 1057); Wed, 03 May 2017 11:43:41 -0000 From: Philippe Pepiot To: patchwork@lists.ozlabs.org Subject: [PATCH] REST: filter patches by state name Date: Wed, 3 May 2017 13:43:04 +0200 Message-Id: <1493811784-4360-1-git-send-email-philippe.pepiot@logilab.fr> X-Mailer: git-send-email 2.1.4 X-BeenThere: patchwork@lists.ozlabs.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Patchwork development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Philippe Pepiot MIME-Version: 1.0 Errors-To: patchwork-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org Sender: "Patchwork" Since we display the name of the state in the serialized patch, also filter by name instead of primary key. Also this will be consistent with the current documentation examples (curl 'https://patchwork.example.com/api/patches?state=under-review') Signed-off-by: Philippe Pepiot Reviewed-by: Stephen Finucane --- patchwork/api/filters.py | 2 ++ patchwork/tests/test_rest_api.py | 7 +++++++ 2 files changed, 9 insertions(+) diff --git a/patchwork/api/filters.py b/patchwork/api/filters.py index 1573416..784c58d 100644 --- a/patchwork/api/filters.py +++ b/patchwork/api/filters.py @@ -19,6 +19,7 @@ from django_filters import FilterSet from django_filters import IsoDateTimeFilter +from django_filters import CharFilter from patchwork.compat import LOOKUP_FIELD from patchwork.models import Bundle @@ -51,6 +52,7 @@ class CoverLetterFilter(TimestampMixin, FilterSet): class PatchFilter(FilterSet): + state = CharFilter(name='state__name') class Meta: model = Patch diff --git a/patchwork/tests/test_rest_api.py b/patchwork/tests/test_rest_api.py index 867602a..c63f672 100644 --- a/patchwork/tests/test_rest_api.py +++ b/patchwork/tests/test_rest_api.py @@ -330,6 +330,13 @@ class TestPatchAPI(APITestCase): self.assertNotIn('content', patch_rsp) self.assertNotIn('diff', patch_rsp) + # test filtering by state + other_state = create_state() + resp = self.client.get(self.api_url(), {'state': patch_obj.state.name}) + self.assertEqual([patch_obj.id], [x['id'] for x in resp.data]) + resp = self.client.get(self.api_url(), {'state': other_state.name}) + self.assertEqual(0, len(resp.data)) + # authenticated user user = create_user() self.client.force_authenticate(user=user)