diff --git a/src/sentry/conf/server.py b/src/sentry/conf/server.py index 07d07c24a2f2d1..c5fab0be9d00b6 100644 --- a/src/sentry/conf/server.py +++ b/src/sentry/conf/server.py @@ -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", @@ -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", ) diff --git a/src/sentry/integrations/discord/__init__.py b/src/sentry/integrations/discord/__init__.py index eebd04586be43c..aa01aa4c655509 100644 --- a/src/sentry/integrations/discord/__init__.py +++ b/src/sentry/integrations/discord/__init__.py @@ -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() diff --git a/src/sentry/integrations/discord/actions/__init__.py b/src/sentry/integrations/discord/actions/__init__.py index e69de29bb2d1d6..0028056bde18f5 100644 --- a/src/sentry/integrations/discord/actions/__init__.py +++ b/src/sentry/integrations/discord/actions/__init__.py @@ -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 diff --git a/src/sentry/integrations/discord/message_builder/__init__.py b/src/sentry/integrations/discord/message_builder/__init__.py index e69de29bb2d1d6..20e26d83c3e896 100644 --- a/src/sentry/integrations/discord/message_builder/__init__.py +++ b/src/sentry/integrations/discord/message_builder/__init__.py @@ -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})" diff --git a/src/sentry/integrations/discord/message_builder/constants.py b/src/sentry/integrations/discord/message_builder/constants.py deleted file mode 100644 index 20e26d83c3e896..00000000000000 --- a/src/sentry/integrations/discord/message_builder/constants.py +++ /dev/null @@ -1,20 +0,0 @@ -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})" diff --git a/src/sentry/integrations/discord/message_builder/issues.py b/src/sentry/integrations/discord/message_builder/issues.py index badf78577474c5..8be7cf5cddfa74 100644 --- a/src/sentry/integrations/discord/message_builder/issues.py +++ b/src/sentry/integrations/discord/message_builder/issues.py @@ -2,6 +2,7 @@ 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 @@ -9,7 +10,6 @@ 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, diff --git a/src/sentry/integrations/discord/message_builder/metric_alerts.py b/src/sentry/integrations/discord/message_builder/metric_alerts.py index 75665754b4d0b8..dc43aeac8cbeaa 100644 --- a/src/sentry/integrations/discord/message_builder/metric_alerts.py +++ b/src/sentry/integrations/discord/message_builder/metric_alerts.py @@ -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 diff --git a/src/sentry/integrations/msteams/__init__.py b/src/sentry/integrations/msteams/__init__.py index e5982977489a3e..6a7dd56a2cb868 100644 --- a/src/sentry/integrations/msteams/__init__.py +++ b/src/sentry/integrations/msteams/__init__.py @@ -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() diff --git a/src/sentry/integrations/msteams/actions/__init__.py b/src/sentry/integrations/msteams/actions/__init__.py index e69de29bb2d1d6..4aebd4ba61d77a 100644 --- a/src/sentry/integrations/msteams/actions/__init__.py +++ b/src/sentry/integrations/msteams/actions/__init__.py @@ -0,0 +1,7 @@ +from .form import MsTeamsNotifyServiceForm +from .notification import MsTeamsNotifyServiceAction + +__all__ = ( + "MsTeamsNotifyServiceForm", + "MsTeamsNotifyServiceAction", +) diff --git a/src/sentry/integrations/msteams/card_builder/__init__.py b/src/sentry/integrations/msteams/card_builder/__init__.py index e69de29bb2d1d6..33916a3c7db074 100644 --- a/src/sentry/integrations/msteams/card_builder/__init__.py +++ b/src/sentry/integrations/msteams/card_builder/__init__.py @@ -0,0 +1,4 @@ +from __future__ import annotations + +ME = "ME" +MSTEAMS_URL_FORMAT = "[{text}]({url})" diff --git a/src/sentry/integrations/msteams/card_builder/base.py b/src/sentry/integrations/msteams/card_builder/base.py index 112c3e17e3d61a..ca81fa7973b0a5 100644 --- a/src/sentry/integrations/msteams/card_builder/base.py +++ b/src/sentry/integrations/msteams/card_builder/base.py @@ -10,9 +10,6 @@ create_text_block, ) -ME = "ME" -MSTEAMS_URL_FORMAT = "[{text}]({url})" - class MSTeamsMessageBuilder: def build( diff --git a/src/sentry/integrations/msteams/card_builder/issues.py b/src/sentry/integrations/msteams/card_builder/issues.py index df7ba9884c1b47..f85dfe68216994 100644 --- a/src/sentry/integrations/msteams/card_builder/issues.py +++ b/src/sentry/integrations/msteams/card_builder/issues.py @@ -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, @@ -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__) diff --git a/src/sentry/integrations/msteams/card_builder/notifications.py b/src/sentry/integrations/msteams/card_builder/notifications.py index c7461033825ac5..ef447868248c2c 100644 --- a/src/sentry/integrations/msteams/card_builder/notifications.py +++ b/src/sentry/integrations/msteams/card_builder/notifications.py @@ -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 diff --git a/src/sentry/integrations/msteams/spec.py b/src/sentry/integrations/msteams/spec.py index 58a84d027a117e..b617599c853100 100644 --- a/src/sentry/integrations/msteams/spec.py +++ b/src/sentry/integrations/msteams/spec.py @@ -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 diff --git a/src/sentry/integrations/services/integration/impl.py b/src/sentry/integrations/services/integration/impl.py index 8bfe36f558cb67..169e0679970058 100644 --- a/src/sentry/integrations/services/integration/impl.py +++ b/src/sentry/integrations/services/integration/impl.py @@ -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, diff --git a/src/sentry/integrations/slack/__init__.py b/src/sentry/integrations/slack/__init__.py index ffd78d950c211d..31607e48a7fc0b 100644 --- a/src/sentry/integrations/slack/__init__.py +++ b/src/sentry/integrations/slack/__init__.py @@ -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() diff --git a/src/sentry/integrations/slack/actions/__init__.py b/src/sentry/integrations/slack/actions/__init__.py index e69de29bb2d1d6..4dc7108cc7de7b 100644 --- a/src/sentry/integrations/slack/actions/__init__.py +++ b/src/sentry/integrations/slack/actions/__init__.py @@ -0,0 +1,7 @@ +from .form import SlackNotifyServiceForm +from .notification import SlackNotifyServiceAction + +__all__ = ( + "SlackNotifyServiceForm", + "SlackNotifyServiceAction", +) diff --git a/src/sentry/integrations/slack/message_builder/notifications/__init__.py b/src/sentry/integrations/slack/message_builder/notifications/__init__.py index e69de29bb2d1d6..c0e4abb77ad1ae 100644 --- a/src/sentry/integrations/slack/message_builder/notifications/__init__.py +++ b/src/sentry/integrations/slack/message_builder/notifications/__init__.py @@ -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", +) diff --git a/src/sentry/integrations/slack/requests/__init__.py b/src/sentry/integrations/slack/requests/__init__.py index e69de29bb2d1d6..382ef48001f062 100644 --- a/src/sentry/integrations/slack/requests/__init__.py +++ b/src/sentry/integrations/slack/requests/__init__.py @@ -0,0 +1,3 @@ +__all__ = ("SlackRequest", "SlackRequestError") + +from .base import SlackRequest, SlackRequestError diff --git a/src/sentry/integrations/slack/service.py b/src/sentry/integrations/slack/service.py index 302843bb5a9bc3..e11784fef24b27 100644 --- a/src/sentry/integrations/slack/service.py +++ b/src/sentry/integrations/slack/service.py @@ -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, @@ -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, diff --git a/src/sentry/integrations/slack/tasks/__init__.py b/src/sentry/integrations/slack/tasks/__init__.py index e69de29bb2d1d6..528e3e12bce24b 100644 --- a/src/sentry/integrations/slack/tasks/__init__.py +++ b/src/sentry/integrations/slack/tasks/__init__.py @@ -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", +) diff --git a/src/sentry/integrations/slack/views/__init__.py b/src/sentry/integrations/slack/views/__init__.py index e69de29bb2d1d6..eb84bef98ad737 100644 --- a/src/sentry/integrations/slack/views/__init__.py +++ b/src/sentry/integrations/slack/views/__init__.py @@ -0,0 +1,34 @@ +from typing import Any + +from django.http import HttpRequest, HttpResponse +from django.urls import reverse +from django.views.decorators.cache import never_cache as django_never_cache +from rest_framework.request import Request + +from sentry.utils.http import absolute_uri +from sentry.utils.signing import sign +from sentry.web.decorators import EndpointFunc +from sentry.web.helpers import render_to_response + +SALT = "sentry-slack-integration" + + +def never_cache(view_func: EndpointFunc) -> EndpointFunc: + """TODO(mgaeta): Remove cast once Django has a typed version.""" + result: EndpointFunc = django_never_cache(view_func) + return result + + +def build_linking_url(endpoint: str, **kwargs: Any) -> str: + """TODO(mgaeta): Remove cast once sentry/utils/http.py is typed.""" + url: str = absolute_uri(reverse(endpoint, kwargs={"signed_params": sign(salt=SALT, **kwargs)})) + return url + + +def render_error_page(request: Request | HttpRequest, status: int, body_text: str) -> HttpResponse: + return render_to_response( + "sentry/integrations/generic-error.html", + request=request, + status=status, + context={"body_text": body_text}, + ) diff --git a/src/sentry/integrations/slack/views/base.py b/src/sentry/integrations/slack/views/base.py deleted file mode 100644 index eb84bef98ad737..00000000000000 --- a/src/sentry/integrations/slack/views/base.py +++ /dev/null @@ -1,34 +0,0 @@ -from typing import Any - -from django.http import HttpRequest, HttpResponse -from django.urls import reverse -from django.views.decorators.cache import never_cache as django_never_cache -from rest_framework.request import Request - -from sentry.utils.http import absolute_uri -from sentry.utils.signing import sign -from sentry.web.decorators import EndpointFunc -from sentry.web.helpers import render_to_response - -SALT = "sentry-slack-integration" - - -def never_cache(view_func: EndpointFunc) -> EndpointFunc: - """TODO(mgaeta): Remove cast once Django has a typed version.""" - result: EndpointFunc = django_never_cache(view_func) - return result - - -def build_linking_url(endpoint: str, **kwargs: Any) -> str: - """TODO(mgaeta): Remove cast once sentry/utils/http.py is typed.""" - url: str = absolute_uri(reverse(endpoint, kwargs={"signed_params": sign(salt=SALT, **kwargs)})) - return url - - -def render_error_page(request: Request | HttpRequest, status: int, body_text: str) -> HttpResponse: - return render_to_response( - "sentry/integrations/generic-error.html", - request=request, - status=status, - context={"body_text": body_text}, - ) diff --git a/src/sentry/integrations/slack/views/link_identity.py b/src/sentry/integrations/slack/views/link_identity.py index bd07b9b8a37997..cc9e0bb1301450 100644 --- a/src/sentry/integrations/slack/views/link_identity.py +++ b/src/sentry/integrations/slack/views/link_identity.py @@ -6,10 +6,11 @@ from sentry.integrations.models.integration import Integration from sentry.integrations.services.integration.model import RpcIntegration from sentry.integrations.slack.utils.notifications import SlackCommandResponse -from sentry.integrations.slack.views.base import build_linking_url as base_build_linking_url from sentry.integrations.slack.views.linkage import SlackIdentityLinkageView from sentry.web.frontend.base import control_silo_view +from . import build_linking_url as base_build_linking_url + _logger = logging.getLogger(__name__) SUCCESS_LINKED_MESSAGE = ( diff --git a/src/sentry/integrations/slack/views/link_team.py b/src/sentry/integrations/slack/views/link_team.py index 7f5d7f608c0cb4..b43b83f183780d 100644 --- a/src/sentry/integrations/slack/views/link_team.py +++ b/src/sentry/integrations/slack/views/link_team.py @@ -16,13 +16,14 @@ SLACK_LINK_TEAM_MSG_SUCCESS_DATADOG_METRIC, ) from sentry.integrations.slack.sdk_client import SlackSdkClient -from sentry.integrations.slack.views.base import build_linking_url as base_build_linking_url from sentry.integrations.slack.views.linkage import SlackLinkageView from sentry.models.team import Team from sentry.utils import metrics from sentry.web.frontend.base import region_silo_view from sentry.web.helpers import render_to_response +from . import build_linking_url as base_build_linking_url + ALLOWED_METHODS = ["GET", "POST"] ALREADY_LINKED_TITLE = "Already linked" diff --git a/src/sentry/integrations/slack/views/linkage.py b/src/sentry/integrations/slack/views/linkage.py index 629d8d0dedee3a..810072127a811d 100644 --- a/src/sentry/integrations/slack/views/linkage.py +++ b/src/sentry/integrations/slack/views/linkage.py @@ -9,9 +9,10 @@ SlackCommandResponse, respond_to_slack_command, ) -from sentry.integrations.slack.views.base import SALT from sentry.integrations.types import ExternalProviderEnum, ExternalProviders +from . import SALT + class SlackLinkageView(LinkageView, ABC): @property diff --git a/src/sentry/integrations/slack/views/unlink_identity.py b/src/sentry/integrations/slack/views/unlink_identity.py index 90c5f6a200090c..3af8501fc4ac39 100644 --- a/src/sentry/integrations/slack/views/unlink_identity.py +++ b/src/sentry/integrations/slack/views/unlink_identity.py @@ -5,7 +5,7 @@ from sentry.integrations.messaging.linkage import UnlinkIdentityView from sentry.integrations.models.integration import Integration from sentry.integrations.slack.utils.notifications import SlackCommandResponse -from sentry.integrations.slack.views.base import build_linking_url as base_build_linking_url +from sentry.integrations.slack.views import build_linking_url as base_build_linking_url from sentry.integrations.slack.views.linkage import SlackIdentityLinkageView from sentry.web.frontend.base import control_silo_view diff --git a/src/sentry/integrations/slack/views/unlink_team.py b/src/sentry/integrations/slack/views/unlink_team.py index 05b1d714f92f29..74f6d36e46b2df 100644 --- a/src/sentry/integrations/slack/views/unlink_team.py +++ b/src/sentry/integrations/slack/views/unlink_team.py @@ -2,10 +2,11 @@ from sentry.integrations.messaging.linkage import UnlinkTeamView from sentry.integrations.models.integration import Integration -from sentry.integrations.slack.views.base import build_linking_url as base_build_linking_url from sentry.integrations.slack.views.linkage import SlackLinkageView from sentry.web.frontend.base import region_silo_view +from . import build_linking_url as base_build_linking_url + _logger = logging.getLogger(__name__) INSUFFICIENT_ACCESS = ( diff --git a/src/sentry/middleware/integrations/parsers/slack.py b/src/sentry/middleware/integrations/parsers/slack.py index 016ba0e2a7f903..7c39ef9a34e95d 100644 --- a/src/sentry/middleware/integrations/parsers/slack.py +++ b/src/sentry/middleware/integrations/parsers/slack.py @@ -26,7 +26,7 @@ from sentry.integrations.slack.requests.base import SlackRequestError from sentry.integrations.slack.requests.event import is_event_challenge from sentry.integrations.slack.sdk_client import SlackSdkClient -from sentry.integrations.slack.views.base import SALT +from sentry.integrations.slack.views import SALT from sentry.integrations.slack.views.link_identity import SlackLinkIdentityView from sentry.integrations.slack.views.link_team import SlackLinkTeamView from sentry.integrations.slack.views.unlink_identity import SlackUnlinkIdentityView diff --git a/tests/sentry/integrations/discord/message_builder/test_builder.py b/tests/sentry/integrations/discord/message_builder/test_builder.py index 998557731b511e..b02ae669fb6f78 100644 --- a/tests/sentry/integrations/discord/message_builder/test_builder.py +++ b/tests/sentry/integrations/discord/message_builder/test_builder.py @@ -1,3 +1,4 @@ +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.button import ( @@ -13,7 +14,6 @@ EPHEMERAL_FLAG, DiscordMessageFlags, ) -from sentry.integrations.discord.message_builder.constants import LEVEL_TO_COLOR from sentry.integrations.discord.requests.base import DiscordMessageComponentTypes from sentry.testutils.cases import TestCase diff --git a/tests/sentry/integrations/discord/message_builder/test_embed.py b/tests/sentry/integrations/discord/message_builder/test_embed.py index 6987a71066dc9e..182018b916c551 100644 --- a/tests/sentry/integrations/discord/message_builder/test_embed.py +++ b/tests/sentry/integrations/discord/message_builder/test_embed.py @@ -1,7 +1,7 @@ +from sentry.integrations.discord.message_builder import LEVEL_TO_COLOR 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.testutils.cases import TestCase diff --git a/tests/sentry/integrations/discord/test_issue_alert.py b/tests/sentry/integrations/discord/test_issue_alert.py index 937a3f326a97d8..739b64d77d9d79 100644 --- a/tests/sentry/integrations/discord/test_issue_alert.py +++ b/tests/sentry/integrations/discord/test_issue_alert.py @@ -8,8 +8,8 @@ from sentry.integrations.discord.actions.issue_alert.form import DiscordNotifyServiceForm from sentry.integrations.discord.actions.issue_alert.notification import DiscordNotifyServiceAction from sentry.integrations.discord.client import MESSAGE_URL +from sentry.integrations.discord.message_builder import LEVEL_TO_COLOR from sentry.integrations.discord.message_builder.base.component import DiscordComponentCustomIds -from sentry.integrations.discord.message_builder.constants import LEVEL_TO_COLOR from sentry.integrations.messaging.message_builder import ( build_attachment_title, build_footer, diff --git a/tests/sentry/integrations/discord/test_message_builder.py b/tests/sentry/integrations/discord/test_message_builder.py index ffcd205b34381b..462f4a7812ae7d 100644 --- a/tests/sentry/integrations/discord/test_message_builder.py +++ b/tests/sentry/integrations/discord/test_message_builder.py @@ -13,7 +13,7 @@ AlertRuleSensitivity, ) from sentry.incidents.models.incident import IncidentStatus -from sentry.integrations.discord.message_builder.constants import LEVEL_TO_COLOR +from sentry.integrations.discord.message_builder import LEVEL_TO_COLOR from sentry.integrations.discord.message_builder.metric_alerts import ( DiscordMetricAlertMessageBuilder, get_started_at, diff --git a/tests/sentry/integrations/msteams/notifications/test_assigned.py b/tests/sentry/integrations/msteams/notifications/test_assigned.py index 080f014ded29b7..96a2b72eb99da2 100644 --- a/tests/sentry/integrations/msteams/notifications/test_assigned.py +++ b/tests/sentry/integrations/msteams/notifications/test_assigned.py @@ -10,10 +10,10 @@ @patch( - "sentry.integrations.msteams.client.MsTeamsClientMixin.get_user_conversation_id", + "sentry.integrations.msteams.MsTeamsClientMixin.get_user_conversation_id", Mock(return_value="some_conversation_id"), ) -@patch("sentry.integrations.msteams.client.MsTeamsClientMixin.send_card") +@patch("sentry.integrations.msteams.MsTeamsClientMixin.send_card") class MSTeamsAssignedNotificationTest(MSTeamsActivityNotificationTest): def test_assigned(self, mock_send_card: MagicMock): """ diff --git a/tests/sentry/integrations/msteams/notifications/test_deploy.py b/tests/sentry/integrations/msteams/notifications/test_deploy.py index 8cda2730bb63bc..84e3173bd61ecd 100644 --- a/tests/sentry/integrations/msteams/notifications/test_deploy.py +++ b/tests/sentry/integrations/msteams/notifications/test_deploy.py @@ -11,10 +11,10 @@ @patch( - "sentry.integrations.msteams.client.MsTeamsClientMixin.get_user_conversation_id", + "sentry.integrations.msteams.MsTeamsClientMixin.get_user_conversation_id", Mock(return_value="some_conversation_id"), ) -@patch("sentry.integrations.msteams.client.MsTeamsClientMixin.send_card") +@patch("sentry.integrations.msteams.MsTeamsClientMixin.send_card") class MSTeamsDeployNotificationTest(MSTeamsActivityNotificationTest): @skip("Flaky test") def test_deploy(self, mock_send_card: MagicMock): diff --git a/tests/sentry/integrations/msteams/notifications/test_escalating.py b/tests/sentry/integrations/msteams/notifications/test_escalating.py index 08f46afe088e94..ed9653f0a0d9f4 100644 --- a/tests/sentry/integrations/msteams/notifications/test_escalating.py +++ b/tests/sentry/integrations/msteams/notifications/test_escalating.py @@ -10,10 +10,10 @@ @patch( - "sentry.integrations.msteams.client.MsTeamsClientMixin.get_user_conversation_id", + "sentry.integrations.msteams.MsTeamsClientMixin.get_user_conversation_id", Mock(return_value="some_conversation_id"), ) -@patch("sentry.integrations.msteams.client.MsTeamsClientMixin.send_card") +@patch("sentry.integrations.msteams.MsTeamsClientMixin.send_card") class MSTeamsEscalatingNotificationTest(MSTeamsActivityNotificationTest): def test_note(self, mock_send_card: MagicMock): """ diff --git a/tests/sentry/integrations/msteams/notifications/test_issue_alert.py b/tests/sentry/integrations/msteams/notifications/test_issue_alert.py index 225676414d061e..b0f60cc0eee6aa 100644 --- a/tests/sentry/integrations/msteams/notifications/test_issue_alert.py +++ b/tests/sentry/integrations/msteams/notifications/test_issue_alert.py @@ -13,10 +13,10 @@ @patch( - "sentry.integrations.msteams.client.MsTeamsClientMixin.get_user_conversation_id", + "sentry.integrations.msteams.MsTeamsClientMixin.get_user_conversation_id", Mock(return_value="some_conversation_id"), ) -@patch("sentry.integrations.msteams.client.MsTeamsClientMixin.send_card") +@patch("sentry.integrations.msteams.MsTeamsClientMixin.send_card") class MSTeamsIssueAlertNotificationTest(MSTeamsActivityNotificationTest): def test_issue_alert_user(self, mock_send_card: MagicMock): """Test that issue alerts are sent to a MS Teams user.""" diff --git a/tests/sentry/integrations/msteams/notifications/test_note.py b/tests/sentry/integrations/msteams/notifications/test_note.py index 78c8d85f52ddb5..4a648b04418d53 100644 --- a/tests/sentry/integrations/msteams/notifications/test_note.py +++ b/tests/sentry/integrations/msteams/notifications/test_note.py @@ -10,10 +10,10 @@ @patch( - "sentry.integrations.msteams.client.MsTeamsClientMixin.get_user_conversation_id", + "sentry.integrations.msteams.MsTeamsClientMixin.get_user_conversation_id", Mock(return_value="some_conversation_id"), ) -@patch("sentry.integrations.msteams.client.MsTeamsClientMixin.send_card") +@patch("sentry.integrations.msteams.MsTeamsClientMixin.send_card") class MSTeamsNoteNotificationTest(MSTeamsActivityNotificationTest): def test_note(self, mock_send_card: MagicMock): """ diff --git a/tests/sentry/integrations/msteams/notifications/test_regression.py b/tests/sentry/integrations/msteams/notifications/test_regression.py index b2de25a30bd82a..07283a9e98323a 100644 --- a/tests/sentry/integrations/msteams/notifications/test_regression.py +++ b/tests/sentry/integrations/msteams/notifications/test_regression.py @@ -10,10 +10,10 @@ @patch( - "sentry.integrations.msteams.client.MsTeamsClientMixin.get_user_conversation_id", + "sentry.integrations.msteams.MsTeamsClientMixin.get_user_conversation_id", Mock(return_value="some_conversation_id"), ) -@patch("sentry.integrations.msteams.client.MsTeamsClientMixin.send_card") +@patch("sentry.integrations.msteams.MsTeamsClientMixin.send_card") class MSTeamsRegressionNotificationTest(MSTeamsActivityNotificationTest): def test_regression(self, mock_send_card: MagicMock): """ diff --git a/tests/sentry/integrations/msteams/notifications/test_resolved.py b/tests/sentry/integrations/msteams/notifications/test_resolved.py index 1e5c8585bd0105..612d036e479823 100644 --- a/tests/sentry/integrations/msteams/notifications/test_resolved.py +++ b/tests/sentry/integrations/msteams/notifications/test_resolved.py @@ -13,10 +13,10 @@ @patch( - "sentry.integrations.msteams.client.MsTeamsClientMixin.get_user_conversation_id", + "sentry.integrations.msteams.MsTeamsClientMixin.get_user_conversation_id", Mock(return_value="some_conversation_id"), ) -@patch("sentry.integrations.msteams.client.MsTeamsClientMixin.send_card") +@patch("sentry.integrations.msteams.MsTeamsClientMixin.send_card") class MSTeamsResolvedNotificationTest(MSTeamsActivityNotificationTest): def test_resolved(self, mock_send_card: MagicMock): """ diff --git a/tests/sentry/integrations/msteams/notifications/test_unassigned.py b/tests/sentry/integrations/msteams/notifications/test_unassigned.py index 128ed64fbbe336..e76656cdfe3eb9 100644 --- a/tests/sentry/integrations/msteams/notifications/test_unassigned.py +++ b/tests/sentry/integrations/msteams/notifications/test_unassigned.py @@ -10,10 +10,10 @@ @patch( - "sentry.integrations.msteams.client.MsTeamsClientMixin.get_user_conversation_id", + "sentry.integrations.msteams.MsTeamsClientMixin.get_user_conversation_id", Mock(return_value="some_conversation_id"), ) -@patch("sentry.integrations.msteams.client.MsTeamsClientMixin.send_card") +@patch("sentry.integrations.msteams.MsTeamsClientMixin.send_card") class MSTeamsUnassignedNotificationTest(MSTeamsActivityNotificationTest): def test_unassigned(self, mock_send_card: MagicMock): """ diff --git a/tests/sentry/integrations/msteams/test_integration.py b/tests/sentry/integrations/msteams/test_integration.py index c2c00f61cac670..a4e6ed4809b334 100644 --- a/tests/sentry/integrations/msteams/test_integration.py +++ b/tests/sentry/integrations/msteams/test_integration.py @@ -5,7 +5,7 @@ from sentry.integrations.models.integration import Integration from sentry.integrations.models.organization_integration import OrganizationIntegration -from sentry.integrations.msteams.integration import MsTeamsIntegrationProvider +from sentry.integrations.msteams import MsTeamsIntegrationProvider from sentry.testutils.cases import IntegrationTestCase from sentry.testutils.silo import control_silo_test from sentry.utils.signing import sign diff --git a/tests/sentry/integrations/msteams/test_notifications.py b/tests/sentry/integrations/msteams/test_notifications.py index 8da2ccabc4b43a..26c1193524e4af 100644 --- a/tests/sentry/integrations/msteams/test_notifications.py +++ b/tests/sentry/integrations/msteams/test_notifications.py @@ -24,7 +24,7 @@ @control_silo_test @patch( - "sentry.integrations.msteams.card_builder.notifications.MSTeamsNotificationsMessageBuilder.build_notification_card", + "sentry.integrations.msteams.MSTeamsNotificationsMessageBuilder.build_notification_card", Mock(return_value=TEST_CARD), ) @patch( @@ -32,14 +32,14 @@ [DummyNotification], ) @patch( - "sentry.integrations.msteams.client.MsTeamsClientMixin.get_user_conversation_id", + "sentry.integrations.msteams.MsTeamsClientMixin.get_user_conversation_id", Mock(return_value="some_conversation_id"), ) @patch( - "sentry.integrations.msteams.client.MsTeamsClientMixin.get_member_list", + "sentry.integrations.msteams.MsTeamsClientMixin.get_member_list", Mock(return_value={"members": [{"user": "some_user", "tenantId": "some_tenant_id"}]}), ) -@patch("sentry.integrations.msteams.client.MsTeamsClientMixin.send_card") +@patch("sentry.integrations.msteams.MsTeamsClientMixin.send_card") class MSTeamsNotificationTest(TestCase): def _install_msteams_personal(self): self.tenant_id = "50cccd00-7c9c-4b32-8cda-58a084f9334a" @@ -124,7 +124,7 @@ def test_missing_tenant_id(self, mock_send_card: MagicMock): self._install_msteams_team() with patch( - "sentry.integrations.msteams.client.MsTeamsClientMixin.get_user_conversation_id", + "sentry.integrations.msteams.MsTeamsClientMixin.get_user_conversation_id", ) as mock_get_user_conversation_id: mock_get_user_conversation_id.return_value = "some_conversation_id" diff --git a/tests/sentry/integrations/msteams/test_notify_action.py b/tests/sentry/integrations/msteams/test_notify_action.py index 6daa0f30d050b2..01e08979f0de76 100644 --- a/tests/sentry/integrations/msteams/test_notify_action.py +++ b/tests/sentry/integrations/msteams/test_notify_action.py @@ -6,7 +6,7 @@ import responses from sentry.integrations.models.integration import Integration -from sentry.integrations.msteams.actions.notification import MsTeamsNotifyServiceAction +from sentry.integrations.msteams import MsTeamsNotifyServiceAction from sentry.testutils.cases import PerformanceIssueTestCase, RuleTestCase from sentry.testutils.helpers.notifications import TEST_ISSUE_OCCURRENCE, TEST_PERF_ISSUE_OCCURRENCE from sentry.testutils.silo import assume_test_silo_mode_of diff --git a/tests/sentry/integrations/msteams/webhook/test_ms_teams_events.py b/tests/sentry/integrations/msteams/webhook/test_ms_teams_events.py index 88ab68cc3a885e..0c035c7e280b5b 100644 --- a/tests/sentry/integrations/msteams/webhook/test_ms_teams_events.py +++ b/tests/sentry/integrations/msteams/webhook/test_ms_teams_events.py @@ -1,6 +1,6 @@ from uuid import uuid4 -from sentry.integrations.msteams.webhook import MsTeamsEvents +from sentry.integrations.msteams import MsTeamsEvents class TestGetFromValue: diff --git a/tests/sentry/integrations/msteams/webhook/test_ms_teams_webhook_endpoint.py b/tests/sentry/integrations/msteams/webhook/test_ms_teams_webhook_endpoint.py index 96f6837bc74904..64446f79d1f682 100644 --- a/tests/sentry/integrations/msteams/webhook/test_ms_teams_webhook_endpoint.py +++ b/tests/sentry/integrations/msteams/webhook/test_ms_teams_webhook_endpoint.py @@ -2,7 +2,7 @@ import pytest -from sentry.integrations.msteams.webhook import MsTeamsEvents, MsTeamsWebhookEndpoint +from sentry.integrations.msteams import MsTeamsEvents, MsTeamsWebhookEndpoint from sentry.testutils.cases import TestCase diff --git a/tests/sentry/integrations/slack/actions/notification/test_slack_notify_service_action.py b/tests/sentry/integrations/slack/actions/notification/test_slack_notify_service_action.py index 8c513cbf0d1a5f..7fd54f5aed6abb 100644 --- a/tests/sentry/integrations/slack/actions/notification/test_slack_notify_service_action.py +++ b/tests/sentry/integrations/slack/actions/notification/test_slack_notify_service_action.py @@ -3,7 +3,7 @@ import orjson -from sentry.integrations.slack.actions.notification import SlackNotifyServiceAction +from sentry.integrations.slack import SlackNotifyServiceAction from sentry.integrations.slack.sdk_client import SLACK_DATADOG_METRIC from sentry.models.notificationmessage import NotificationMessage from sentry.models.rulefirehistory import RuleFireHistory diff --git a/tests/sentry/integrations/slack/tasks/test_tasks.py b/tests/sentry/integrations/slack/tasks/test_tasks.py index 4f966452f31476..e970eb2cfc91a8 100644 --- a/tests/sentry/integrations/slack/tasks/test_tasks.py +++ b/tests/sentry/integrations/slack/tasks/test_tasks.py @@ -8,11 +8,11 @@ from sentry.incidents.models.alert_rule import AlertRule, AlertRuleTriggerAction from sentry.integrations.services.integration.serial import serialize_integration from sentry.integrations.slack.sdk_client import SLACK_DATADOG_METRIC -from sentry.integrations.slack.tasks.find_channel_id_for_alert_rule import ( +from sentry.integrations.slack.tasks import ( find_channel_id_for_alert_rule, + find_channel_id_for_rule, + post_message, ) -from sentry.integrations.slack.tasks.find_channel_id_for_rule import find_channel_id_for_rule -from sentry.integrations.slack.tasks.post_message import post_message from sentry.integrations.slack.utils.channel import SlackChannelIdData from sentry.integrations.slack.utils.rule_status import RedisRuleStatus from sentry.models.rule import Rule diff --git a/tests/sentry/integrations/slack/test_integration.py b/tests/sentry/integrations/slack/test_integration.py index 013a40befab193..f8738c692e2723 100644 --- a/tests/sentry/integrations/slack/test_integration.py +++ b/tests/sentry/integrations/slack/test_integration.py @@ -11,7 +11,7 @@ from sentry import audit_log from sentry.integrations.models.integration import Integration from sentry.integrations.models.organization_integration import OrganizationIntegration -from sentry.integrations.slack.integration import SlackIntegration, SlackIntegrationProvider +from sentry.integrations.slack import SlackIntegration, SlackIntegrationProvider from sentry.integrations.slack.utils.users import SLACK_GET_USERS_PAGE_SIZE from sentry.models.auditlogentry import AuditLogEntry from sentry.testutils.cases import APITestCase, IntegrationTestCase, TestCase diff --git a/tests/sentry/integrations/slack/test_notify_action.py b/tests/sentry/integrations/slack/test_notify_action.py index 4d6df8d54f115e..77784057b49c1a 100644 --- a/tests/sentry/integrations/slack/test_notify_action.py +++ b/tests/sentry/integrations/slack/test_notify_action.py @@ -7,7 +7,7 @@ from slack_sdk.web.slack_response import SlackResponse from sentry.constants import ObjectStatus -from sentry.integrations.slack.actions.notification import SlackNotifyServiceAction +from sentry.integrations.slack import SlackNotifyServiceAction from sentry.integrations.slack.utils.constants import SLACK_RATE_LIMITED_MESSAGE from sentry.integrations.types import ExternalProviders from sentry.notifications.additional_attachment_manager import manager diff --git a/tests/sentry/integrations/slack/webhooks/actions/test_status.py b/tests/sentry/integrations/slack/webhooks/actions/test_status.py index 650b3db6197c00..bcb92d27fa2d47 100644 --- a/tests/sentry/integrations/slack/webhooks/actions/test_status.py +++ b/tests/sentry/integrations/slack/webhooks/actions/test_status.py @@ -1154,8 +1154,7 @@ def test_handle_submission_fail_through_unfurl(self, mock_open_view): ) @patch( - "sentry.integrations.slack.requests.base.SlackRequest._check_signing_secret", - return_value=True, + "sentry.integrations.slack.requests.SlackRequest._check_signing_secret", return_value=True ) def test_no_integration(self, check_signing_secret_mock): with assume_test_silo_mode(SiloMode.CONTROL): @@ -1164,16 +1163,14 @@ def test_no_integration(self, check_signing_secret_mock): assert resp.status_code == 403 @patch( - "sentry.integrations.slack.requests.base.SlackRequest._check_signing_secret", - return_value=True, + "sentry.integrations.slack.requests.SlackRequest._check_signing_secret", return_value=True ) def test_slack_bad_payload(self, check_signing_secret_mock): resp = self.client.post("/extensions/slack/action/", data={"nopayload": 0}) assert resp.status_code == 400 @patch( - "sentry.integrations.slack.requests.base.SlackRequest._check_signing_secret", - return_value=True, + "sentry.integrations.slack.requests.SlackRequest._check_signing_secret", return_value=True ) def test_sentry_docs_link_clicked(self, check_signing_secret_mock): payload = { diff --git a/tests/sentry/integrations/slack/webhooks/events/__init__.py b/tests/sentry/integrations/slack/webhooks/events/__init__.py index 7cf71b00eb1663..bd610cee82121b 100644 --- a/tests/sentry/integrations/slack/webhooks/events/__init__.py +++ b/tests/sentry/integrations/slack/webhooks/events/__init__.py @@ -53,8 +53,7 @@ def setUp(self): self.integration = install_slack(self.organization) @patch( - "sentry.integrations.slack.requests.base.SlackRequest._check_signing_secret", - return_value=True, + "sentry.integrations.slack.requests.SlackRequest._check_signing_secret", return_value=True ) def post_webhook( self, diff --git a/tests/sentry/integrations/slack/webhooks/events/test_url_verification.py b/tests/sentry/integrations/slack/webhooks/events/test_url_verification.py index f873ffca2a04fa..2d2c69b594f718 100644 --- a/tests/sentry/integrations/slack/webhooks/events/test_url_verification.py +++ b/tests/sentry/integrations/slack/webhooks/events/test_url_verification.py @@ -7,8 +7,7 @@ class UrlVerificationEventTest(BaseEventTest): challenge = "3eZbrw1aBm2rZgRNFdxV2595E9CY3gmdALWMmHkvFXO7tYXAYM8P" @patch( - "sentry.integrations.slack.requests.base.SlackRequest._check_signing_secret", - return_value=True, + "sentry.integrations.slack.requests.SlackRequest._check_signing_secret", return_value=True ) def test_valid_event(self, check_signing_secret_mock): resp = self.client.post( diff --git a/tests/sentry/integrations/slack/webhooks/options_load/__init__.py b/tests/sentry/integrations/slack/webhooks/options_load/__init__.py index 6cc45d51c24d7a..acb7b85342a965 100644 --- a/tests/sentry/integrations/slack/webhooks/options_load/__init__.py +++ b/tests/sentry/integrations/slack/webhooks/options_load/__init__.py @@ -14,8 +14,7 @@ def setUp(self): self.channel = {"channel_id": "C065W1189", "name": "workflow"} @patch( - "sentry.integrations.slack.requests.base.SlackRequest._check_signing_secret", - return_value=True, + "sentry.integrations.slack.requests.SlackRequest._check_signing_secret", return_value=True ) def post_webhook( self, diff --git a/tests/sentry/middleware/integrations/parsers/test_slack.py b/tests/sentry/middleware/integrations/parsers/test_slack.py index 196895407c8852..260f2259a28928 100644 --- a/tests/sentry/middleware/integrations/parsers/test_slack.py +++ b/tests/sentry/middleware/integrations/parsers/test_slack.py @@ -14,7 +14,7 @@ from sentry.integrations.middleware.hybrid_cloud.parser import create_async_request_payload from sentry.integrations.models.organization_integration import OrganizationIntegration from sentry.integrations.slack.utils.auth import _encode_data -from sentry.integrations.slack.views.base import SALT +from sentry.integrations.slack.views import SALT from sentry.middleware.integrations.parsers.slack import SlackRequestParser from sentry.testutils.cases import TestCase from sentry.testutils.outbox import assert_no_webhook_payloads diff --git a/tests/sentry/rules/actions/test_base.py b/tests/sentry/rules/actions/test_base.py index 9d528c86c34628..430188ef9b515b 100644 --- a/tests/sentry/rules/actions/test_base.py +++ b/tests/sentry/rules/actions/test_base.py @@ -1,6 +1,6 @@ from uuid import uuid4 -from sentry.integrations.slack.actions.notification import SlackNotifyServiceAction +from sentry.integrations.slack import SlackNotifyServiceAction from sentry.models.rulefirehistory import RuleFireHistory from sentry.rules.actions.base import instantiate_action from sentry.testutils.cases import TestCase