Skip to content

Commit bd2060e

Browse files
authored
fix: Use queries instead of api requests for wizard (getsentry#7847)
* fix: Use queries instead of api requests for wizard * fix: Add additional test * ref: Remove .all()
1 parent b8d0f86 commit bd2060e

File tree

2 files changed

+48
-18
lines changed

2 files changed

+48
-18
lines changed

src/sentry/web/frontend/setup_wizard.py

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
from __future__ import absolute_import
22

33
from sentry.cache import default_cache
4-
from django.core.urlresolvers import reverse
54

6-
from sentry.api import client
5+
from sentry import roles
76
from sentry.models import ApiToken
87
from sentry.api.serializers import serialize
98
from sentry.web.frontend.base import BaseView
109
from sentry.web.helpers import render_to_response
10+
from sentry.models import (Organization, OrganizationStatus, Project, ProjectKey,
11+
ProjectKeyStatus, ProjectStatus)
1112
from sentry.api.endpoints.setup_wizard import SETUP_WIZARD_CACHE_KEY, SETUP_WIZARD_CACHE_TIMEOUT
1213

1314

@@ -27,25 +28,28 @@ def get(self, request, wizard_hash):
2728
if wizard_data is None:
2829
return self.redirect_to_org(request)
2930

30-
orgs = client.get(
31-
reverse('sentry-api-0-organizations'), request=request)
31+
orgs = Organization.objects.filter(
32+
member_set__role__in=[x.id for x in roles.with_scope('org:read')],
33+
member_set__user=request.user,
34+
status=OrganizationStatus.VISIBLE,
35+
).order_by('-date_added')[:50]
3236

3337
filled_projects = []
3438

35-
for org in orgs.data:
36-
projects = client.get(reverse('sentry-api-0-organization-projects', kwargs={
37-
'organization_slug': org.get('slug')
38-
}), request=request)
39-
for project in projects.data:
40-
if project.get('status') == 'deleted':
41-
continue # skip if project has been deleted
42-
enriched_project = project
43-
enriched_project['organization'] = org
44-
keys = client.get(reverse('sentry-api-0-project-keys', kwargs={
45-
'organization_slug': org.get('slug'),
46-
'project_slug': project.get('slug')
47-
}), request=request)
48-
enriched_project['keys'] = keys.data
39+
for org in orgs:
40+
projects = list(Project.objects.filter(
41+
organization=org,
42+
status=ProjectStatus.VISIBLE,
43+
).order_by('-date_added')[:50])
44+
for project in projects:
45+
enriched_project = serialize(project)
46+
enriched_project['organization'] = serialize(org)
47+
keys = list(ProjectKey.objects.filter(
48+
project=project,
49+
roles=ProjectKey.roles.store,
50+
status=ProjectKeyStatus.ACTIVE,
51+
))
52+
enriched_project['keys'] = serialize(keys)
4953
filled_projects.append(enriched_project)
5054

5155
# Fetching or creating a token

tests/sentry/web/frontend/test_setup_wizard.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,3 +47,29 @@ def test_redirect_to_org(self):
4747
resp = self.client.get(url)
4848

4949
assert resp.status_code == 302
50+
51+
def test_project(self):
52+
self.org = self.create_organization(owner=self.user)
53+
self.team = self.create_team(organization=self.org, name='Mariachi Band')
54+
self.project = self.create_project(
55+
organization=self.org,
56+
teams=[self.team],
57+
name='Bengal',
58+
)
59+
self.login_as(self.user)
60+
61+
key = '%s%s' % (SETUP_WIZARD_CACHE_KEY, 'abc')
62+
cache.set(key, 'test')
63+
64+
url = reverse('sentry-project-wizard-fetch', kwargs={
65+
'wizard_hash': 'abc'
66+
})
67+
resp = self.client.get(url)
68+
69+
assert resp.status_code == 200
70+
self.assertTemplateUsed(resp, 'sentry/setup-wizard.html')
71+
cached = cache.get(key)
72+
assert cached.get('apiKeys').get('scopes')[0] == 'project:releases'
73+
assert cached.get('projects')[0].get('status') == 'active'
74+
assert cached.get('projects')[0].get('keys')[0].get('isActive')
75+
assert cached.get('projects')[0].get('organization').get('status').get('id') == 'active'

0 commit comments

Comments
 (0)