Skip to content

Commit a1d596a

Browse files
committed
fixes from review
1 parent 5ff0f6e commit a1d596a

File tree

4 files changed

+21
-14
lines changed

4 files changed

+21
-14
lines changed

src/sentry/api/endpoints/integrations/organization_integrations/details.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -118,9 +118,7 @@ def post(
118118
)
119119
try:
120120
installation.update_organization_config(request.data)
121-
except IntegrationError as e:
122-
return self.respond({"detail": [str(e)]}, status=400)
123-
except ApiError as e:
121+
except (IntegrationError, ApiError) as e:
124122
return self.respond({"detail": [str(e)]}, status=400)
125123

126124
return self.respond(status=200)

src/sentry/integrations/opsgenie/client.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ def metadata(self):
3232
def _get_auth_headers(self):
3333
return {"Authorization": f"GenieKey {self.integration_key}"}
3434

35-
def get_teams(self) -> BaseApiResponseX:
36-
path = "/teams"
35+
def get_alerts(self, limit: int | None = 1) -> BaseApiResponseX:
36+
path = f"/alerts?limit={limit}"
3737
return self.get(path=path, headers=self._get_auth_headers())
3838

3939
def authorize_integration(self, type: str) -> BaseApiResponseX:

src/sentry/integrations/opsgenie/integration.py

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,7 @@ def update_organization_config(self, data: MutableMapping[str, Any]) -> None:
179179
raise ValidationError({"duplicate_name": ["Duplicate team name."]})
180180
team["id"] = str(self.org_integration.id) + "-" + team["team"]
181181

182+
invalid_keys = []
182183
for team in teams:
183184
# skip if team, key pair already exist in config
184185
if (team["team"], team["integration_key"]) in existing_team_key_pairs:
@@ -193,7 +194,7 @@ def update_organization_config(self, data: MutableMapping[str, Any]) -> None:
193194
)
194195
# call an API to test the integration key
195196
try:
196-
client.get_teams()
197+
client.get_alerts()
197198
except ApiError as e:
198199
logger.info(
199200
"opsgenie.authorization_error",
@@ -204,11 +205,15 @@ def update_organization_config(self, data: MutableMapping[str, Any]) -> None:
204205
"Too many requests. Please try updating one team/key at a time."
205206
)
206207
elif e.code == 401:
207-
raise ApiUnauthorized(f"Invalid integration key {integration_key}")
208-
209-
if e.json and e.json.get("message"):
208+
invalid_keys.append(integration_key)
209+
pass
210+
elif e.json and e.json.get("message"):
210211
raise ApiError(e.json["message"])
211-
raise
212+
else:
213+
raise
214+
215+
if invalid_keys:
216+
raise ApiUnauthorized(f"Invalid integration key: {str(invalid_keys)}")
212217

213218
return super().update_organization_config(data)
214219

tests/sentry/integrations/opsgenie/test_integration.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,9 @@ def test_update_config_valid(self):
135135
integration = Integration.objects.get(provider=self.provider.key)
136136
org_integration = OrganizationIntegration.objects.get(integration_id=integration.id)
137137

138-
responses.add(responses.GET, url="https://api.opsgenie.com/v2/teams", status=200, json={})
138+
responses.add(
139+
responses.GET, url="https://api.opsgenie.com/v2/alerts?limit=1", status=200, json={}
140+
)
139141

140142
data = {"team_table": [{"id": "", "team": "cool-team", "integration_key": "1234-5678"}]}
141143
installation.update_organization_config(data)
@@ -156,7 +158,9 @@ def test_update_config_invalid(self):
156158
org_integration = OrganizationIntegration.objects.get(integration_id=integration.id)
157159
team_id = str(org_integration.id) + "-" + "cool-team"
158160

159-
responses.add(responses.GET, url="https://api.opsgenie.com/v2/teams", status=200, json={})
161+
responses.add(
162+
responses.GET, url="https://api.opsgenie.com/v2/alerts?limit=1", status=200, json={}
163+
)
160164

161165
# valid
162166
data = {"team_table": [{"id": "", "team": "cool-team", "integration_key": "1234"}]}
@@ -192,7 +196,7 @@ def test_update_config_invalid_rate_limited(self):
192196
{"id": "cool-team", "team": "cool-team", "integration_key": "1234"},
193197
]
194198
}
195-
responses.add(responses.GET, url="https://api.opsgenie.com/v2/teams", status=429)
199+
responses.add(responses.GET, url="https://api.opsgenie.com/v2/alerts?limit=1", status=429)
196200

197201
with pytest.raises(ApiRateLimitedError):
198202
installation.update_organization_config(data)
@@ -211,7 +215,7 @@ def test_update_config_invalid_integration_key(self):
211215
{"id": "", "team": "rad-team", "integration_key": "4321"},
212216
]
213217
}
214-
responses.add(responses.GET, url="https://api.opsgenie.com/v2/teams", status=401)
218+
responses.add(responses.GET, url="https://api.opsgenie.com/v2/alerts?limit=1", status=401)
215219

216220
with pytest.raises(ApiUnauthorized):
217221
installation.update_organization_config(data)

0 commit comments

Comments
 (0)