Skip to content

Commit 259c5f7

Browse files
iamrajjoshiandrewshie-sentry
authored andcommitted
🔧 chore: fix slack notifications typing (#89578)
1 parent bb8ccd2 commit 259c5f7

File tree

5 files changed

+20
-31
lines changed

5 files changed

+20
-31
lines changed

pyproject.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,6 @@ module = [
135135
"sentry.integrations.pagerduty.actions.form",
136136
"sentry.integrations.pipeline",
137137
"sentry.integrations.slack.message_builder.notifications.issues",
138-
"sentry.integrations.slack.notifications",
139138
"sentry.integrations.slack.webhooks.command",
140139
"sentry.integrations.slack.webhooks.event",
141140
"sentry.integrations.utils.sync",

src/sentry/integrations/notifications.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
from sentry.models.team import Team
1414
from sentry.notifications.notifications.base import BaseNotification
1515
from sentry.types.actor import Actor
16+
from sentry.users.models.user import User
1617
from sentry.users.services.user import RpcUser
1718

1819

@@ -102,7 +103,7 @@ def _get_channel_and_integration_by_team(
102103

103104
def get_integrations_by_channel_by_recipient(
104105
organization: Organization,
105-
recipients: Iterable[Actor],
106+
recipients: Iterable[Actor | User],
106107
provider: ExternalProviders,
107108
) -> Mapping[Actor, Mapping[str, RpcIntegration]]:
108109
output: MutableMapping[Actor, Mapping[str, RpcIntegration]] = defaultdict(dict)

src/sentry/integrations/slack/integration.py

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,21 @@
1818
IntegrationMetadata,
1919
IntegrationProvider,
2020
)
21+
from sentry.integrations.mixins import NotifyBasicMixin
2122
from sentry.integrations.models.integration import Integration
23+
from sentry.integrations.slack.metrics import (
24+
SLACK_NOTIFY_MIXIN_FAILURE_DATADOG_METRIC,
25+
SLACK_NOTIFY_MIXIN_SUCCESS_DATADOG_METRIC,
26+
)
2227
from sentry.integrations.slack.sdk_client import SlackSdkClient
2328
from sentry.integrations.slack.tasks.link_slack_user_identities import link_slack_user_identities
2429
from sentry.organizations.services.organization.model import RpcOrganization
2530
from sentry.pipeline import NestedPipelineView
2631
from sentry.pipeline.views.base import PipelineView
2732
from sentry.shared_integrations.exceptions import IntegrationError
33+
from sentry.utils import metrics
2834
from sentry.utils.http import absolute_uri
2935

30-
from .notifications import SlackNotifyBasicMixin
31-
3236
_logger = logging.getLogger("sentry.integrations.slack")
3337

3438
Channel = namedtuple("Channel", ["name", "id"])
@@ -73,7 +77,7 @@
7377
)
7478

7579

76-
class SlackIntegration(SlackNotifyBasicMixin, IntegrationInstallation):
80+
class SlackIntegration(NotifyBasicMixin, IntegrationInstallation):
7781
def get_client(self) -> SlackSdkClient:
7882
return SlackSdkClient(integration_id=self.model.id)
7983

@@ -85,6 +89,15 @@ def get_config_data(self) -> Mapping[str, str]:
8589
)
8690
return {"installationType": metadata_.get("installation_type", default_installation)}
8791

92+
def send_message(self, channel_id: str, message: str) -> None:
93+
client = self.get_client()
94+
95+
try:
96+
client.chat_postMessage(channel=channel_id, text=message)
97+
metrics.incr(SLACK_NOTIFY_MIXIN_SUCCESS_DATADOG_METRIC, sample_rate=1.0)
98+
except SlackApiError:
99+
metrics.incr(SLACK_NOTIFY_MIXIN_FAILURE_DATADOG_METRIC, sample_rate=1.0)
100+
88101

89102
class SlackIntegrationProvider(IntegrationProvider):
90103
key = "slack"

src/sentry/integrations/slack/notifications.py

Lines changed: 0 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,9 @@
55
from typing import Any
66

77
import sentry_sdk
8-
from slack_sdk.errors import SlackApiError
98

10-
from sentry.integrations.mixins import NotifyBasicMixin
119
from sentry.integrations.notifications import get_integrations_by_channel_by_recipient
12-
from sentry.integrations.slack.metrics import (
13-
SLACK_NOTIFY_MIXIN_FAILURE_DATADOG_METRIC,
14-
SLACK_NOTIFY_MIXIN_SUCCESS_DATADOG_METRIC,
15-
)
1610
from sentry.integrations.slack.service import SlackService
17-
from sentry.integrations.slack.utils.errors import CHANNEL_NOT_FOUND, unpack_slack_api_error
1811
from sentry.integrations.types import ExternalProviders
1912
from sentry.notifications.notifications.base import BaseNotification
2013
from sentry.notifications.notify import register_notification_provider
@@ -25,24 +18,6 @@
2518
logger = logging.getLogger("sentry.notifications")
2619

2720

28-
class SlackNotifyBasicMixin(NotifyBasicMixin):
29-
def send_message(self, channel_id: str, message: str) -> None:
30-
client = self.get_client()
31-
32-
try:
33-
client.chat_postMessage(channel=channel_id, text=message)
34-
metrics.incr(SLACK_NOTIFY_MIXIN_SUCCESS_DATADOG_METRIC, sample_rate=1.0)
35-
except SlackApiError as e:
36-
metrics.incr(SLACK_NOTIFY_MIXIN_FAILURE_DATADOG_METRIC, sample_rate=1.0)
37-
38-
# TODO: remove this
39-
if unpack_slack_api_error(e) != CHANNEL_NOT_FOUND:
40-
logger.exception(
41-
"slack.slash-response.error",
42-
extra={"error": str(e)},
43-
)
44-
45-
4621
@register_notification_provider(ExternalProviders.SLACK)
4722
def send_notification_as_slack(
4823
notification: BaseNotification,

src/sentry/integrations/slack/service.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
NotificationActionNotificationMessage,
2727
NotificationActionNotificationMessageRepository,
2828
)
29+
from sentry.integrations.services.integration import RpcIntegration
2930
from sentry.integrations.slack.message_builder.base.block import BlockSlackMessageBuilder
3031
from sentry.integrations.slack.message_builder.notifications import get_message_builder
3132
from sentry.integrations.slack.message_builder.types import SlackBlock
@@ -451,7 +452,7 @@ def notify_recipient(
451452
recipient: Actor,
452453
attachments: SlackBlock,
453454
channel: str,
454-
integration: Integration,
455+
integration: Integration | RpcIntegration,
455456
shared_context: Mapping[str, Any],
456457
) -> None:
457458
from sentry.integrations.slack.tasks.post_message import post_message, post_message_control

0 commit comments

Comments
 (0)