Skip to content

Commit c079722

Browse files
authored
chore(integrations): query active integrations for vsts, stacktrace linking, syncing, webhooks (#78510)
1 parent f1b30f8 commit c079722

File tree

15 files changed

+47
-17
lines changed

15 files changed

+47
-17
lines changed

src/sentry/api/endpoints/group_autofix_setup_check.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
get_project_codebase_indexing_status,
1818
)
1919
from sentry.autofix.utils import get_autofix_repos_from_project_code_mappings
20+
from sentry.constants import ObjectStatus
2021
from sentry.integrations.services.integration import integration_service
2122
from sentry.integrations.utils.code_mapping import get_sorted_code_mapping_configs
2223
from sentry.models.group import Group
@@ -44,7 +45,7 @@ def get_autofix_integration_setup_problems(
4445

4546
organization_integration = organization_integrations[0] if organization_integrations else None
4647
integration = organization_integration and integration_service.get_integration(
47-
organization_integration_id=organization_integration.id
48+
organization_integration_id=organization_integration.id, status=ObjectStatus.ACTIVE
4849
)
4950
installation = integration and integration.get_installation(organization_id=organization.id)
5051

src/sentry/integrations/api/endpoints/organization_repository_details.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,9 @@ def put(self, request: Request, organization, repo_id) -> Response:
7474
raise NotImplementedError
7575
if result.get("integrationId"):
7676
integration = integration_service.get_integration(
77-
integration_id=result["integrationId"], organization_id=coerce_id_from(organization)
77+
integration_id=result["integrationId"],
78+
organization_id=coerce_id_from(organization),
79+
status=ObjectStatus.ACTIVE,
7880
)
7981
if integration is None:
8082
return Response({"detail": "Invalid integration id"}, status=400)

src/sentry/integrations/github_enterprise/webhook.py

+2
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
from sentry import options
1818
from sentry.api.api_owners import ApiOwner
1919
from sentry.api.api_publish_status import ApiPublishStatus
20+
from sentry.constants import ObjectStatus
2021
from sentry.integrations.github.webhook import (
2122
InstallationEventWebhook,
2223
PullRequestEventWebhook,
@@ -79,6 +80,7 @@ def get_installation_metadata(event, host):
7980
integration = integration_service.get_integration(
8081
external_id=external_id,
8182
provider="github_enterprise",
83+
status=ObjectStatus.ACTIVE,
8284
)
8385
if integration is None:
8486
metrics.incr("integrations.github_enterprise.does_not_exist")

src/sentry/integrations/msteams/parsing.py

+10-3
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
from collections.abc import Mapping
33
from typing import Any
44

5+
from sentry.constants import ObjectStatus
56
from sentry.integrations.msteams.spec import PROVIDER
67
from sentry.integrations.services.integration import integration_service
78
from sentry.integrations.services.integration.model import RpcIntegration
@@ -23,14 +24,18 @@ def get_integration_from_channel_data(data: Mapping[str, Any]) -> RpcIntegration
2324
team_id = _infer_team_id_from_channel_data(data=data)
2425
if team_id is None:
2526
return None
26-
return integration_service.get_integration(provider=PROVIDER, external_id=team_id)
27+
return integration_service.get_integration(
28+
provider=PROVIDER, external_id=team_id, status=ObjectStatus.ACTIVE
29+
)
2730

2831

2932
def get_integration_for_tenant(data: Mapping[str, Any]) -> RpcIntegration | None:
3033
try:
3134
channel_data = data["channelData"]
3235
tenant_id = channel_data["tenant"]["id"]
33-
return integration_service.get_integration(provider=PROVIDER, external_id=tenant_id)
36+
return integration_service.get_integration(
37+
provider=PROVIDER, external_id=tenant_id, status=ObjectStatus.ACTIVE
38+
)
3439
except Exception as err:
3540
logger.info("failed to get tenant id from request data", exc_info=err, extra={"data": data})
3641
return None
@@ -56,7 +61,9 @@ def get_integration_from_card_action(data: Mapping[str, Any]) -> RpcIntegration
5661
integration_id = _infer_integration_id_from_card_action(data=data)
5762
if integration_id is None:
5863
return None
59-
return integration_service.get_integration(integration_id=integration_id)
64+
return integration_service.get_integration(
65+
integration_id=integration_id, status=ObjectStatus.ACTIVE
66+
)
6067

6168

6269
def can_infer_integration(data: Mapping[str, Any]) -> bool:

src/sentry/integrations/msteams/webhook.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
from sentry.api.api_owners import ApiOwner
2020
from sentry.api.api_publish_status import ApiPublishStatus
2121
from sentry.api.base import Endpoint, all_silo_endpoint
22+
from sentry.constants import ObjectStatus
2223
from sentry.identity.services.identity import identity_service
2324
from sentry.identity.services.identity.model import RpcIdentity
2425
from sentry.integrations.messaging import commands
@@ -524,7 +525,9 @@ def _handle_action_submitted(self, request: Request) -> Response:
524525

525526
group = Group.objects.select_related("project__organization").filter(id=group_id).first()
526527
if group:
527-
integration = integration_service.get_integration(integration_id=integration.id)
528+
integration = integration_service.get_integration(
529+
integration_id=integration.id, status=ObjectStatus.ACTIVE
530+
)
528531
if integration is None:
529532
group = None
530533

src/sentry/integrations/opsgenie/integration.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
from rest_framework.request import Request
1111
from rest_framework.serializers import ValidationError
1212

13+
from sentry.constants import ObjectStatus
1314
from sentry.integrations.base import (
1415
FeatureDescription,
1516
IntegrationFeatures,
@@ -169,7 +170,7 @@ def update_organization_config(self, data: MutableMapping[str, Any]) -> None:
169170
}
170171

171172
integration = integration_service.get_integration(
172-
organization_integration_id=self.org_integration.id
173+
organization_integration_id=self.org_integration.id, status=ObjectStatus.ACTIVE
173174
)
174175
if not integration:
175176
raise IntegrationError("Integration does not exist")

src/sentry/integrations/slack/requests/base.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
from slack_sdk.signature import SignatureVerifier
1111

1212
from sentry import options
13+
from sentry.constants import ObjectStatus
1314
from sentry.identity.services.identity import RpcIdentity, identity_service
1415
from sentry.identity.services.identity.model import RpcIdentityProvider
1516
from sentry.integrations.messaging.commands import CommandInput
@@ -225,7 +226,7 @@ def _check_verification_token(self, verification_token: str) -> bool:
225226
def validate_integration(self) -> None:
226227
if not self._integration:
227228
self._integration = integration_service.get_integration(
228-
provider="slack", external_id=self.team_id
229+
provider="slack", external_id=self.team_id, status=ObjectStatus.ACTIVE
229230
)
230231

231232
if not self._integration:

src/sentry/integrations/tasks/sync_assignee_outbound.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from typing import Any
22

33
from sentry import analytics, features
4+
from sentry.constants import ObjectStatus
45
from sentry.integrations.models.external_issue import ExternalIssue
56
from sentry.integrations.models.integration import Integration
67
from sentry.integrations.services.assignment_source import AssignmentSource
@@ -40,7 +41,9 @@ def sync_assignee_outbound(
4041
has_issue_sync = features.has("organizations:integrations-issue-sync", organization)
4142
if not has_issue_sync:
4243
return
43-
integration = integration_service.get_integration(integration_id=external_issue.integration_id)
44+
integration = integration_service.get_integration(
45+
integration_id=external_issue.integration_id, status=ObjectStatus.ACTIVE
46+
)
4447
if not integration:
4548
return
4649

src/sentry/integrations/tasks/sync_status_inbound.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
from sentry import analytics
99
from sentry.api.helpers.group_index.update import get_current_release_version_of_group
10+
from sentry.constants import ObjectStatus
1011
from sentry.integrations.models.integration import Integration
1112
from sentry.integrations.services.integration import integration_service
1213
from sentry.models.group import Group, GroupStatus
@@ -181,7 +182,9 @@ def sync_status_inbound(
181182
) -> None:
182183
from sentry.integrations.mixins import ResolveSyncAction
183184

184-
integration = integration_service.get_integration(integration_id=integration_id)
185+
integration = integration_service.get_integration(
186+
integration_id=integration_id, status=ObjectStatus.ACTIVE
187+
)
185188
if integration is None:
186189
raise Integration.DoesNotExist
187190

src/sentry/integrations/tasks/sync_status_outbound.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from sentry import analytics, features
2+
from sentry.constants import ObjectStatus
23
from sentry.integrations.models.external_issue import ExternalIssue
34
from sentry.integrations.models.integration import Integration
45
from sentry.integrations.services.integration import integration_service
@@ -34,7 +35,9 @@ def sync_status_outbound(group_id: int, external_issue_id: int) -> bool | None:
3435
# Issue link could have been deleted while sync job was in the queue.
3536
return None
3637

37-
integration = integration_service.get_integration(integration_id=external_issue.integration_id)
38+
integration = integration_service.get_integration(
39+
integration_id=external_issue.integration_id, status=ObjectStatus.ACTIVE
40+
)
3841
if not integration:
3942
return None
4043
installation = integration.get_installation(organization_id=external_issue.organization_id)

src/sentry/integrations/utils/common.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import logging
22

3+
from sentry.constants import ObjectStatus
34
from sentry.integrations.services.integration import RpcIntegration, integration_service
45
from sentry.integrations.types import ExternalProviderEnum
5-
from sentry.models.organization import OrganizationStatus
66

77
_default_logger = logging.getLogger(__name__)
88

@@ -13,7 +13,7 @@ def get_active_integration_for_organization(
1313
try:
1414
return integration_service.get_integration(
1515
organization_id=organization_id,
16-
status=OrganizationStatus.ACTIVE,
16+
status=ObjectStatus.ACTIVE,
1717
provider=provider.value,
1818
)
1919
except Exception as err:

src/sentry/integrations/utils/stacktrace_link.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import logging
44
from typing import TYPE_CHECKING, NotRequired, TypedDict
55

6+
from sentry.constants import ObjectStatus
67
from sentry.integrations.models.repository_project_path_config import RepositoryProjectPathConfig
78
from sentry.integrations.services.integration import integration_service
89
from sentry.integrations.source_code_management.repository import RepositoryIntegration
@@ -30,7 +31,7 @@ def get_link(
3031
result: RepositoryLinkOutcome = {}
3132

3233
integration = integration_service.get_integration(
33-
organization_integration_id=config.organization_integration_id
34+
organization_integration_id=config.organization_integration_id, status=ObjectStatus.ACTIVE
3435
)
3536
if not integration:
3637
result["error"] = "integration_not_found"

src/sentry/integrations/vsts/client.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from requests import PreparedRequest
99
from rest_framework.response import Response
1010

11+
from sentry.constants import ObjectStatus
1112
from sentry.exceptions import InvalidIdentity
1213
from sentry.integrations.base import IntegrationFeatureNotImplementedError
1314
from sentry.integrations.client import ApiClient
@@ -207,7 +208,7 @@ def _refresh_auth_if_expired(self):
207208
from sentry.integrations.vsts.integration import VstsIntegrationProvider
208209

209210
integration = integration_service.get_integration(
210-
organization_integration_id=self.org_integration_id
211+
organization_integration_id=self.org_integration_id, status=ObjectStatus.ACTIVE
211212
)
212213
# check if integration has migrated to new identity provider
213214
migration_version = integration.metadata.get("integration_migration_version", 0)

src/sentry/integrations/vsts/issues.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from mistune import markdown
77
from rest_framework.response import Response
88

9+
from sentry.constants import ObjectStatus
910
from sentry.integrations.mixins import ResolveSyncAction
1011
from sentry.integrations.mixins.issues import IssueSyncIntegration
1112
from sentry.integrations.services.integration import integration_service
@@ -361,7 +362,7 @@ def search_issues(self, query: str | None, **kwargs) -> dict[str, Any]:
361362
client = self.get_client()
362363

363364
integration = integration_service.get_integration(
364-
integration_id=self.org_integration.integration_id
365+
integration_id=self.org_integration.integration_id, status=ObjectStatus.ACTIVE
365366
)
366367
if not integration:
367368
raise IntegrationError("Azure DevOps integration not found")

src/sentry/integrations/vsts/webhooks.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
from sentry.api.api_owners import ApiOwner
1313
from sentry.api.api_publish_status import ApiPublishStatus
1414
from sentry.api.base import Endpoint, region_silo_endpoint
15+
from sentry.constants import ObjectStatus
1516
from sentry.integrations.mixins.issues import IssueSyncIntegration
1617
from sentry.integrations.services.integration import integration_service
1718
from sentry.integrations.utils import sync_group_assignee_inbound
@@ -52,7 +53,7 @@ def post(self, request: Request, *args: Any, **kwargs: Any) -> Response:
5253
# https://docs.microsoft.com/en-us/azure/devops/service-hooks/events?view=azure-devops#workitem.updated
5354
if event_type == "workitem.updated":
5455
integration = integration_service.get_integration(
55-
provider=PROVIDER_KEY, external_id=external_id
56+
provider=PROVIDER_KEY, external_id=external_id, status=ObjectStatus.ACTIVE
5657
)
5758
if integration is None:
5859
logger.info(

0 commit comments

Comments
 (0)