Browse Source

fix(api): Handle no projects in tag key values endpoint

Jess MacQueen 6 years ago
parent
commit
043264ea5e

+ 16 - 13
src/sentry/api/endpoints/organization_tagkey_values.py

@@ -2,7 +2,8 @@ from __future__ import absolute_import
 
 from rest_framework.response import Response
 
-from sentry.api.bases import OrganizationEventsEndpointBase, OrganizationEventsError
+from sentry.api.bases import OrganizationEventsEndpointBase, OrganizationEventsError, NoProjects
+from sentry.api.paginator import SequencePaginator
 from sentry.api.serializers import serialize
 from sentry.tagstore.base import TAG_KEY_RE
 from sentry.tagstore.snuba.backend import SnubaTagStorage
@@ -18,18 +19,20 @@ class OrganizationTagKeyValuesEndpoint(OrganizationEventsEndpointBase):
             filter_params = self.get_filter_params(request, organization)
         except OrganizationEventsError as exc:
             return Response({'detail': exc.message}, status=400)
-
-        # TODO(jess): update this when snuba tagstore is the primary backend for us
-        tagstore = SnubaTagStorage()
-
-        paginator = tagstore.get_tag_value_paginator_for_projects(
-            filter_params['project_id'],
-            filter_params.get('environment'),
-            key,
-            filter_params['start'],
-            filter_params['end'],
-            query=request.GET.get('query'),
-        )
+        except NoProjects:
+            paginator = SequencePaginator([])
+        else:
+            # TODO(jess): update this when snuba tagstore is the primary backend for us
+            tagstore = SnubaTagStorage()
+
+            paginator = tagstore.get_tag_value_paginator_for_projects(
+                filter_params['project_id'],
+                filter_params.get('environment'),
+                key,
+                filter_params['start'],
+                filter_params['end'],
+                query=request.GET.get('query'),
+            )
 
         return self.paginate(
             request=request,

+ 16 - 0
tests/snuba/api/endpoints/test_organization_tagkey_values.py

@@ -201,3 +201,19 @@ class OrganizationTagKeyValuesTest(APITestCase, SnubaTestCase):
 
         response = self.client.get(url, format='json')
         assert response.status_code == 200, response.content
+
+    def test_no_projects(self):
+        user = self.create_user()
+        org = self.create_organization(owner=user)
+        self.login_as(user=user)
+        url = reverse(
+            'sentry-api-0-organization-tagkey-values',
+            kwargs={
+                'organization_slug': org.slug,
+                'key': 'fruit',
+            }
+        )
+
+        response = self.client.get(url, format='json')
+        assert response.status_code == 200, response.content
+        assert len(response.data) == 0