Skip to content

Commit

Permalink
Revert "ref(integrations): Remove indirect imports from messaging int…
Browse files Browse the repository at this point in the history
…egrations (#77094)"

This reverts commit 28cdab1.

Co-authored-by: RyanSkonnord <26411900+RyanSkonnord@users.noreply.github.com>
  • Loading branch information
2 people authored and roaga committed Sep 20, 2024
1 parent b08a96a commit f8d2fc8
Show file tree
Hide file tree
Showing 56 changed files with 262 additions and 159 deletions.
6 changes: 3 additions & 3 deletions src/sentry/conf/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -2481,7 +2481,7 @@ def custom_parameter_sort(parameter: dict) -> tuple[str, int]:
SENTRY_DEFAULT_INTEGRATIONS = (
"sentry.integrations.bitbucket.integration.BitbucketIntegrationProvider",
"sentry.integrations.bitbucket_server.integration.BitbucketServerIntegrationProvider",
"sentry.integrations.slack.integration.SlackIntegrationProvider",
"sentry.integrations.slack.SlackIntegrationProvider",
"sentry.integrations.github.integration.GitHubIntegrationProvider",
"sentry.integrations.github_enterprise.integration.GitHubEnterpriseIntegrationProvider",
"sentry.integrations.gitlab.integration.GitlabIntegrationProvider",
Expand All @@ -2491,9 +2491,9 @@ def custom_parameter_sort(parameter: dict) -> tuple[str, int]:
"sentry.integrations.vsts_extension.VstsExtensionIntegrationProvider",
"sentry.integrations.pagerduty.integration.PagerDutyIntegrationProvider",
"sentry.integrations.vercel.VercelIntegrationProvider",
"sentry.integrations.msteams.integration.MsTeamsIntegrationProvider",
"sentry.integrations.msteams.MsTeamsIntegrationProvider",
"sentry.integrations.aws_lambda.AwsLambdaIntegrationProvider",
"sentry.integrations.discord.integration.DiscordIntegrationProvider",
"sentry.integrations.discord.DiscordIntegrationProvider",
"sentry.integrations.opsgenie.OpsgenieIntegrationProvider",
)

Expand Down
10 changes: 10 additions & 0 deletions src/sentry/integrations/discord/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,13 @@
from sentry.integrations.discord.spec import DiscordMessagingSpec

from .actions import * # noqa: F401,F403
from .analytics import * # noqa: F401,F403
from .client import * # noqa: F401,F403
from .integration import * # noqa: F401,F403
from .message_builder.base import * # noqa: F401,F403
from .message_builder.issues import * # noqa: F401,F403
from .urls import * # noqa: F401,F403
from .utils import * # noqa: F401,F403
from .views import * # noqa: F401,F403

DiscordMessagingSpec().initialize()
3 changes: 3 additions & 0 deletions src/sentry/integrations/discord/actions/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
from .issue_alert.form import * # noqa: F401, F403
from .issue_alert.notification import * # noqa: F401, F403
from .metric_alert import * # noqa: F401, F403
20 changes: 20 additions & 0 deletions src/sentry/integrations/discord/message_builder/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
from __future__ import annotations

# Discord likes colors as decimal integers
LEVEL_TO_COLOR = {
"_actioned_issue": int("0xEDEEEF", 16),
"_incident_resolved": int("0x4DC771", 16),
"debug": int("0xFBE14F", 16),
"error": int("0xE03E2F", 16),
"fatal": int("0xFA4747", 16),
"info": int("0x2788CE", 16),
"warning": int("0xFFC227", 16),
}

INCIDENT_COLOR_MAPPING = {
"Resolved": "_incident_resolved",
"Warning": "warning",
"Critical": "fatal",
}

DISCORD_URL_FORMAT = "[{text}]({url})"
20 changes: 0 additions & 20 deletions src/sentry/integrations/discord/message_builder/constants.py

This file was deleted.

2 changes: 1 addition & 1 deletion src/sentry/integrations/discord/message_builder/issues.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,14 @@

from sentry import tagstore
from sentry.eventstore.models import GroupEvent
from sentry.integrations.discord.message_builder import LEVEL_TO_COLOR
from sentry.integrations.discord.message_builder.base.base import DiscordMessageBuilder
from sentry.integrations.discord.message_builder.base.component.action_row import DiscordActionRow
from sentry.integrations.discord.message_builder.base.component.base import DiscordMessageComponent
from sentry.integrations.discord.message_builder.base.component.button import DiscordButton
from sentry.integrations.discord.message_builder.base.embed.base import DiscordMessageEmbed
from sentry.integrations.discord.message_builder.base.embed.field import DiscordMessageEmbedField
from sentry.integrations.discord.message_builder.base.embed.footer import DiscordMessageEmbedFooter
from sentry.integrations.discord.message_builder.constants import LEVEL_TO_COLOR
from sentry.integrations.messaging.message_builder import (
build_attachment_text,
build_attachment_title,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,10 @@

from sentry.incidents.models.alert_rule import AlertRule
from sentry.incidents.models.incident import Incident, IncidentStatus
from sentry.integrations.discord.message_builder import INCIDENT_COLOR_MAPPING, LEVEL_TO_COLOR
from sentry.integrations.discord.message_builder.base.base import DiscordMessageBuilder
from sentry.integrations.discord.message_builder.base.embed.base import DiscordMessageEmbed
from sentry.integrations.discord.message_builder.base.embed.image import DiscordMessageEmbedImage
from sentry.integrations.discord.message_builder.constants import (
INCIDENT_COLOR_MAPPING,
LEVEL_TO_COLOR,
)
from sentry.integrations.metric_alerts import metric_alert_attachment_info


Expand Down
18 changes: 18 additions & 0 deletions src/sentry/integrations/msteams/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,21 @@
from sentry.integrations.msteams.spec import MsTeamsMessagingSpec

from .actions.form import * # noqa: F401,F403
from .actions.notification import * # noqa: F401,F403
from .analytics import * # noqa: F401,F403
from .card_builder.base import * # noqa: F401,F403
from .card_builder.block import * # noqa: F401,F403
from .card_builder.help import * # noqa: F401,F403
from .card_builder.identity import * # noqa: F401,F403
from .card_builder.installation import * # noqa: F401,F403
from .card_builder.notifications import * # noqa: F401,F403
from .client import * # noqa: F401,F403
from .integration import * # noqa: F401,F403
from .link_identity import * # noqa: F401,F403
from .notifications import * # noqa: F401,F403
from .unlink_identity import * # noqa: F401,F403
from .urls import * # noqa: F401,F403
from .utils import * # noqa: F401,F403
from .webhook import * # noqa: F401,F403

MsTeamsMessagingSpec().initialize()
7 changes: 7 additions & 0 deletions src/sentry/integrations/msteams/actions/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
from .form import MsTeamsNotifyServiceForm
from .notification import MsTeamsNotifyServiceAction

__all__ = (
"MsTeamsNotifyServiceForm",
"MsTeamsNotifyServiceAction",
)
4 changes: 4 additions & 0 deletions src/sentry/integrations/msteams/card_builder/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
from __future__ import annotations

ME = "ME"
MSTEAMS_URL_FORMAT = "[{text}]({url})"
3 changes: 0 additions & 3 deletions src/sentry/integrations/msteams/card_builder/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,6 @@
create_text_block,
)

ME = "ME"
MSTEAMS_URL_FORMAT = "[{text}]({url})"


class MSTeamsMessageBuilder:
def build(
Expand Down
26 changes: 13 additions & 13 deletions src/sentry/integrations/msteams/card_builder/issues.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,22 +13,28 @@
format_actor_option_non_slack,
format_actor_options_non_slack,
)
from sentry.integrations.msteams.card_builder.base import (
ME,
MSTEAMS_URL_FORMAT,
MSTeamsMessageBuilder,
)
from sentry.integrations.msteams.card_builder import ME, MSTEAMS_URL_FORMAT
from sentry.integrations.msteams.card_builder.block import (
Action,
ActionType,
AdaptiveCard,
Block,
ColumnSetBlock,
ContainerBlock,
ContentAlignment,
ShowCardAction,
SubmitAction,
TextBlock,
)
from sentry.integrations.msteams.card_builder.utils import IssueConstants
from sentry.integrations.services.integration import RpcIntegration
from sentry.models.group import Group, GroupStatus
from sentry.models.project import Project
from sentry.models.rule import Rule

from ..utils import ACTION_TYPE
from .base import MSTeamsMessageBuilder
from .block import (
ActionType,
ContentAlignment,
TextSize,
TextWeight,
create_action_set_block,
Expand All @@ -41,12 +47,6 @@
create_input_choice_set_block,
create_text_block,
)
from sentry.integrations.msteams.card_builder.utils import IssueConstants
from sentry.integrations.msteams.utils import ACTION_TYPE
from sentry.integrations.services.integration import RpcIntegration
from sentry.models.group import Group, GroupStatus
from sentry.models.project import Project
from sentry.models.rule import Rule

logger = logging.getLogger(__name__)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@
build_attachment_title,
get_title_link,
)
from sentry.integrations.msteams.card_builder.base import MSTEAMS_URL_FORMAT, MSTeamsMessageBuilder
from sentry.integrations.msteams.card_builder import MSTEAMS_URL_FORMAT
from sentry.integrations.msteams.card_builder.base import MSTeamsMessageBuilder
from sentry.integrations.msteams.card_builder.block import OpenUrlAction
from sentry.integrations.types import ExternalProviders
from sentry.notifications.notifications.activity.base import GroupActivityNotification
Expand Down
2 changes: 1 addition & 1 deletion src/sentry/integrations/msteams/spec.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ def action_service(self) -> ActionService:

@property
def integration_provider(self) -> type[IntegrationProvider]:
from sentry.integrations.msteams.integration import MsTeamsIntegrationProvider
from sentry.integrations.msteams import MsTeamsIntegrationProvider

return MsTeamsIntegrationProvider

Expand Down
2 changes: 1 addition & 1 deletion src/sentry/integrations/services/integration/impl.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
from sentry.integrations.models.integration import Integration
from sentry.integrations.models.integration_external_project import IntegrationExternalProject
from sentry.integrations.models.organization_integration import OrganizationIntegration
from sentry.integrations.msteams.client import MsTeamsClient
from sentry.integrations.msteams import MsTeamsClient
from sentry.integrations.services.integration import (
IntegrationService,
RpcIntegration,
Expand Down
40 changes: 40 additions & 0 deletions src/sentry/integrations/slack/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,43 @@
from sentry.integrations.slack.spec import SlackMessagingSpec

from .actions.form import * # noqa: F401,F403
from .actions.notification import * # noqa: F401,F403
from .analytics import * # noqa: F401,F403
from .integration import * # noqa: F401,F403
from .message_builder.base.base import * # noqa: F401,F403
from .message_builder.base.block import * # noqa: F401,F403
from .message_builder.disconnected import * # noqa: F401,F403
from .message_builder.discover import * # noqa: F401,F403
from .message_builder.help import * # noqa: F401,F403
from .message_builder.incidents import * # noqa: F401,F403
from .message_builder.issues import * # noqa: F401,F403
from .message_builder.metric_alerts import * # noqa: F401,F403
from .message_builder.notifications.base import * # noqa: F401,F403
from .message_builder.notifications.digest import * # noqa: F401,F403
from .message_builder.notifications.issues import * # noqa: F401,F403
from .message_builder.prompt import * # noqa: F401,F403
from .notifications import * # noqa: F401,F403
from .requests.action import * # noqa: F401,F403
from .requests.base import * # noqa: F401,F403
from .requests.command import * # noqa: F401,F403
from .requests.event import * # noqa: F401,F403
from .unfurl.discover import * # noqa: F401,F403
from .unfurl.issues import * # noqa: F401,F403
from .unfurl.metric_alerts import * # noqa: F401,F403
from .urls import * # noqa: F401,F403
from .utils.auth import * # noqa: F401,F403
from .utils.channel import * # noqa: F401,F403
from .utils.escape import * # noqa: F401,F403
from .utils.notifications import * # noqa: F401,F403
from .utils.rule_status import * # noqa: F401,F403
from .utils.users import * # noqa: F401,F403
from .views.link_identity import * # noqa: F401,F403
from .views.link_team import * # noqa: F401,F403
from .views.unlink_identity import * # noqa: F401,F403
from .views.unlink_team import * # noqa: F401,F403
from .webhooks.action import * # noqa: F401,F403
from .webhooks.base import * # noqa: F401,F403
from .webhooks.command import * # noqa: F401,F403
from .webhooks.event import * # noqa: F401,F403

SlackMessagingSpec().initialize()
7 changes: 7 additions & 0 deletions src/sentry/integrations/slack/actions/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
from .form import SlackNotifyServiceForm
from .notification import SlackNotifyServiceAction

__all__ = (
"SlackNotifyServiceForm",
"SlackNotifyServiceAction",
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
from __future__ import annotations

from .base import SlackNotificationsMessageBuilder
from .daily_summary import SlackDailySummaryMessageBuilder
from .digest import DigestNotificationMessageBuilder
from .issues import IssueNotificationMessageBuilder


def get_message_builder(class_name: str) -> type[SlackNotificationsMessageBuilder]:
"""TODO(mgaeta): HACK to get around circular imports."""
return {
"DigestNotificationMessageBuilder": DigestNotificationMessageBuilder,
"IssueNotificationMessageBuilder": IssueNotificationMessageBuilder,
"SlackNotificationsMessageBuilder": SlackNotificationsMessageBuilder,
"SlackDailySummaryMessageBuilder": SlackDailySummaryMessageBuilder,
}[class_name]


__all__ = (
"get_message_builder",
"DigestNotificationMessageBuilder",
"IssueNotificationMessageBuilder",
"SlackNotificationsMessageBuilder",
"SlackDailySummaryMessageBuilder",
)
3 changes: 3 additions & 0 deletions src/sentry/integrations/slack/requests/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
__all__ = ("SlackRequest", "SlackRequestError")

from .base import SlackRequest, SlackRequestError
25 changes: 2 additions & 23 deletions src/sentry/integrations/slack/service.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,7 @@
IssueAlertNotificationMessageRepository,
)
from sentry.integrations.slack.message_builder.base.block import BlockSlackMessageBuilder
from sentry.integrations.slack.message_builder.notifications.base import (
SlackNotificationsMessageBuilder,
)
from sentry.integrations.slack.message_builder.notifications import get_message_builder
from sentry.integrations.slack.message_builder.types import SlackBlock
from sentry.integrations.slack.metrics import (
SLACK_ACTIVITY_THREAD_FAILURE_DATADOG_METRIC,
Expand Down Expand Up @@ -415,29 +413,10 @@ def get_attachments(
extra_context_by_actor[recipient] if extra_context_by_actor and recipient else {}
)
context = get_context(notification, recipient, shared_context, extra_context)
cls = self._get_message_builder(notification.message_builder)
cls = get_message_builder(notification.message_builder)
attachments = cls(notification, context, recipient).build()
return attachments

@staticmethod
def _get_message_builder(class_name: str) -> type[SlackNotificationsMessageBuilder]:
from sentry.integrations.slack.message_builder.notifications.daily_summary import (
SlackDailySummaryMessageBuilder,
)
from sentry.integrations.slack.message_builder.notifications.digest import (
DigestNotificationMessageBuilder,
)
from sentry.integrations.slack.message_builder.notifications.issues import (
IssueNotificationMessageBuilder,
)

return {
"DigestNotificationMessageBuilder": DigestNotificationMessageBuilder,
"IssueNotificationMessageBuilder": IssueNotificationMessageBuilder,
"SlackNotificationsMessageBuilder": SlackNotificationsMessageBuilder,
"SlackDailySummaryMessageBuilder": SlackDailySummaryMessageBuilder,
}[class_name]

def send_message_to_slack_channel(
self,
integration_id: int,
Expand Down
14 changes: 14 additions & 0 deletions src/sentry/integrations/slack/tasks/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
from .find_channel_id_for_alert_rule import find_channel_id_for_alert_rule
from .find_channel_id_for_rule import find_channel_id_for_rule
from .link_slack_user_identities import link_slack_user_identities
from .post_message import post_message, post_message_control
from .send_notifications_on_activity import send_activity_notifications_to_slack_threads

__all__ = (
"send_activity_notifications_to_slack_threads",
"find_channel_id_for_alert_rule",
"find_channel_id_for_rule",
"link_slack_user_identities",
"post_message",
"post_message_control",
)
Loading

0 comments on commit f8d2fc8

Please sign in to comment.