From a1fcba513a525bc27752c69af2c2b9bff0ad4c26 Mon Sep 17 00:00:00 2001 From: "mauricio.barg" <> Date: Thu, 20 Apr 2023 12:54:21 -0300 Subject: [PATCH 1/3] Add changes --- spidermon/contrib/actions/slack/__init__.py | 24 +++++++- .../actions/slack/test_slack_action.py | 59 ++++++++++++++++++- 2 files changed, 79 insertions(+), 4 deletions(-) diff --git a/spidermon/contrib/actions/slack/__init__.py b/spidermon/contrib/actions/slack/__init__.py index 04bdc623..6e621acd 100644 --- a/spidermon/contrib/actions/slack/__init__.py +++ b/spidermon/contrib/actions/slack/__init__.py @@ -39,7 +39,14 @@ def users(self): return self._users def send_message( - self, to, text, parse=None, link_names=1, attachments=None, use_mention=False + self, + to, + text, + parse=None, + link_names=1, + attachments=None, + use_mention=False, + **kwargs, ): if self.fake: logger.info(text) @@ -56,6 +63,7 @@ def send_message( link_names=link_names, attachments=attachments, use_mention=use_mention, + **kwargs, ) for recipient in to ] @@ -66,6 +74,7 @@ def send_message( parse=parse, link_names=link_names, attachments=attachments, + **kwargs, ) else: if use_mention: @@ -79,6 +88,7 @@ def send_message( parse=parse, link_names=link_names, attachments=attachments, + **kwargs, ) def _get_user_id(self, username): @@ -95,7 +105,7 @@ def _get_users_info(self): ) def _send_user_message( - self, username, text, parse="full", link_names=1, attachments=None + self, username, text, parse="full", link_names=1, attachments=None, **kwargs ): user_id = self._get_user_id(username) if user_id: @@ -105,11 +115,13 @@ def _send_user_message( parse=parse, link_names=link_names, attachments=attachments, + **kwargs, ) def _send_channel_message( - self, channel, text, parse="full", link_names=1, attachments=None + self, channel, text, parse="full", link_names=1, attachments=None, **kwargs ): + self._client.chat_postMessage( channel=channel, text=text, @@ -118,6 +130,7 @@ def _send_channel_message( attachments=self._parse_attachments(attachments), username=self.sender_name, icon_url=self._get_icon_url(), + **kwargs, ) def _get_icon_url(self): @@ -171,6 +184,7 @@ class SendSlackMessage(ActionWithTemplates): include_message = True include_attachments = True fake = False + kwargs = {} def __init__( self, @@ -184,6 +198,7 @@ def __init__( attachments_template=None, include_attachments=None, fake=None, + **kwargs, ): super().__init__() @@ -207,6 +222,8 @@ def __init__( self.attachments = attachments or self.attachments self.attachments_template = attachments_template or self.attachments_template + self.kwargs = kwargs + if not self.fake and not self.recipients: raise NotConfigured( "You must provide a value for SPIDERMON_SLACK_RECIPIENTS setting." @@ -238,6 +255,7 @@ def run_action(self): to=self.recipients, text=self.get_message(), attachments=self.get_attachments(), + **self.kwargs, ) def get_message(self): diff --git a/tests/contrib/actions/slack/test_slack_action.py b/tests/contrib/actions/slack/test_slack_action.py index 5cdd0588..37795901 100644 --- a/tests/contrib/actions/slack/test_slack_action.py +++ b/tests/contrib/actions/slack/test_slack_action.py @@ -1,7 +1,8 @@ import sys import pytest -from spidermon.contrib.actions.slack import SlackMessageManager +from unittest.mock import MagicMock, patch +from spidermon.contrib.actions.slack import SendSlackMessage, SlackMessageManager @pytest.fixture @@ -58,3 +59,59 @@ def test_do_not_log_text_and_attach_when_fake_is_not_set(logger_info): ) assert logger_info.call_count == 0 + + +@patch("spidermon.contrib.actions.slack.WebClient") +def test_pass_arbitrary_args_to_manager_send_message_channel(_slack_mock): + + manager = SlackMessageManager( + sender_token="anything", + sender_name="@someone", + ) + + manager.send_message( + to=["channel"], text="a message", use_mention=True, arbitrary_arg=True + ) + + _, kwargs = manager._client.chat_postMessage.call_args_list[0] + assert "arbitrary_arg" in kwargs + + +@patch("spidermon.contrib.actions.slack.WebClient") +def test_pass_arbitrary_args_to_manager_send_message_user(_slack_mock): + + manager = SlackMessageManager( + sender_token="anything", + sender_name="@someone", + ) + + manager._users = {"user": {"id": 10}} + + manager.send_message( + to=["@user"], text="a message", use_mention=True, arbitrary_arg=True + ) + + _, kwargs = manager._client.chat_postMessage.call_args_list[0] + assert "arbitrary_arg" in kwargs + + +def test_message_sender_pass_kwargs(): + + sender = SendSlackMessage( + sender_token="anything", + sender_name="@someone", + recipients=["user"], + a_new_arg="hello", + ) + + sender.manager._client = MagicMock() + sender.get_message = MagicMock() + sender.get_attachments = MagicMock() + + sender.get_message.return_value = "a message" + sender.get_attachments.return_value = None + + sender.run_action() + + _, kwargs = sender.manager._client.chat_postMessage.call_args_list[0] + assert "a_new_arg" in kwargs From 3e3382728da5f59348a646030b0e691845e3f7a7 Mon Sep 17 00:00:00 2001 From: "mauricio.barg" <> Date: Mon, 24 Apr 2023 09:28:07 -0300 Subject: [PATCH 2/3] lint --- spidermon/contrib/actions/slack/__init__.py | 1 - tests/contrib/actions/slack/test_slack_action.py | 3 --- 2 files changed, 4 deletions(-) diff --git a/spidermon/contrib/actions/slack/__init__.py b/spidermon/contrib/actions/slack/__init__.py index 6e621acd..be979696 100644 --- a/spidermon/contrib/actions/slack/__init__.py +++ b/spidermon/contrib/actions/slack/__init__.py @@ -121,7 +121,6 @@ def _send_user_message( def _send_channel_message( self, channel, text, parse="full", link_names=1, attachments=None, **kwargs ): - self._client.chat_postMessage( channel=channel, text=text, diff --git a/tests/contrib/actions/slack/test_slack_action.py b/tests/contrib/actions/slack/test_slack_action.py index 37795901..5427a224 100644 --- a/tests/contrib/actions/slack/test_slack_action.py +++ b/tests/contrib/actions/slack/test_slack_action.py @@ -63,7 +63,6 @@ def test_do_not_log_text_and_attach_when_fake_is_not_set(logger_info): @patch("spidermon.contrib.actions.slack.WebClient") def test_pass_arbitrary_args_to_manager_send_message_channel(_slack_mock): - manager = SlackMessageManager( sender_token="anything", sender_name="@someone", @@ -79,7 +78,6 @@ def test_pass_arbitrary_args_to_manager_send_message_channel(_slack_mock): @patch("spidermon.contrib.actions.slack.WebClient") def test_pass_arbitrary_args_to_manager_send_message_user(_slack_mock): - manager = SlackMessageManager( sender_token="anything", sender_name="@someone", @@ -96,7 +94,6 @@ def test_pass_arbitrary_args_to_manager_send_message_user(_slack_mock): def test_message_sender_pass_kwargs(): - sender = SendSlackMessage( sender_token="anything", sender_name="@someone", From dce1c55dc4808c0a4e1cb58569427e85adb096d0 Mon Sep 17 00:00:00 2001 From: "mauricio.barg" <> Date: Mon, 24 Apr 2023 16:51:39 -0300 Subject: [PATCH 3/3] styling --- spidermon/contrib/actions/slack/__init__.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/spidermon/contrib/actions/slack/__init__.py b/spidermon/contrib/actions/slack/__init__.py index be979696..23779ee2 100644 --- a/spidermon/contrib/actions/slack/__init__.py +++ b/spidermon/contrib/actions/slack/__init__.py @@ -183,7 +183,6 @@ class SendSlackMessage(ActionWithTemplates): include_message = True include_attachments = True fake = False - kwargs = {} def __init__( self, @@ -221,7 +220,7 @@ def __init__( self.attachments = attachments or self.attachments self.attachments_template = attachments_template or self.attachments_template - self.kwargs = kwargs + self.kwargs = kwargs or {} if not self.fake and not self.recipients: raise NotConfigured(