[PATCHv2 10/10] REST: Allow projects to be retrieved by linkname
Finucane, Stephen
stephen.finucane at intel.com
Tue May 17 23:33:10 AEST 2016
On 10 May 17:39, Andy Doan wrote:
> Building a user-friendly CLI becomes difficult when project-ids are
> required. It also makes it almost impossible to work with the current
> format of the .pwclientrc file.
>
> Signed-off-by: Andy Doan <andy.doan at linaro.org>
Some comments below but nothing blocking.
Reviewed-by: Stephen Finucane <stephen.finucane at intel.com>
> ---
> patchwork/tests/test_rest_api.py | 5 +++++
> patchwork/views/rest_api.py | 16 ++++++++++++++++
> 2 files changed, 21 insertions(+)
>
> diff --git a/patchwork/tests/test_rest_api.py b/patchwork/tests/test_rest_api.py
> index 6f1a375..0b180e6 100644
> --- a/patchwork/tests/test_rest_api.py
> +++ b/patchwork/tests/test_rest_api.py
> @@ -59,6 +59,11 @@ class TestProjectAPI(APITestCase):
> self.assertEqual(status.HTTP_200_OK, resp.status_code)
> self.assertEqual(defaults.project.name, resp.data['name'])
>
> + # make sure we can look up by linkname
> + resp = self.client.get(self.api_url(resp.data['linkname']))
> + self.assertEqual(status.HTTP_200_OK, resp.status_code)
> + self.assertEqual(defaults.project.name, resp.data['name'])
> +
> def test_anonymous_writes(self):
> """Ensure anonymous "write" operations are rejected."""
> defaults.project.save()
> diff --git a/patchwork/views/rest_api.py b/patchwork/views/rest_api.py
> index e5a642a..e125bc1 100644
> --- a/patchwork/views/rest_api.py
> +++ b/patchwork/views/rest_api.py
> @@ -113,6 +113,22 @@ class ProjectViewSet(PatchworkViewSet):
> permission_classes = (PatchworkPermission,)
> serializer_class = ProjectSerializer
>
> + def retrieve(self, request, pk=None):
> + try:
> + int(pk)
> + except ValueError:
> + self.kwargs = {'linkname': pk} # try and lookup by linkname
> + self.lookup_field = 'linkname'
> + return super(ProjectViewSet, self).retrieve(request, pk)
> +
> + def partial_update(self, request, pk=None):
> + try:
> + int(pk)
I really hope users don't do this, but are integer-only linknames
possible? :) Maybe we should just rule this out...
> + except ValueError:
> + self.kwargs = {'linkname': pk} # try and lookup by linkname
> + self.lookup_field = 'linkname'
> + return super(ProjectViewSet, self).partial_update(request, pk)
Much of this is duplicated and could be moved to a separate function,
IMO.
More information about the Patchwork
mailing list