Skip to content

Commit 8251a0f

Browse files
mrwbargVMRuiz
andauthored
Allow kwargs on Slack API. (#397)
* Add changes * lint * styling --------- Co-authored-by: mauricio.barg <> Co-authored-by: Víctor Ruiz <[email protected]>
1 parent 1993f46 commit 8251a0f

File tree

2 files changed

+74
-4
lines changed

2 files changed

+74
-4
lines changed

spidermon/contrib/actions/slack/__init__.py

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,14 @@ def users(self):
3939
return self._users
4040

4141
def send_message(
42-
self, to, text, parse=None, link_names=1, attachments=None, use_mention=False
42+
self,
43+
to,
44+
text,
45+
parse=None,
46+
link_names=1,
47+
attachments=None,
48+
use_mention=False,
49+
**kwargs,
4350
):
4451
if self.fake:
4552
logger.info(text)
@@ -56,6 +63,7 @@ def send_message(
5663
link_names=link_names,
5764
attachments=attachments,
5865
use_mention=use_mention,
66+
**kwargs,
5967
)
6068
for recipient in to
6169
]
@@ -66,6 +74,7 @@ def send_message(
6674
parse=parse,
6775
link_names=link_names,
6876
attachments=attachments,
77+
**kwargs,
6978
)
7079
else:
7180
if use_mention:
@@ -79,6 +88,7 @@ def send_message(
7988
parse=parse,
8089
link_names=link_names,
8190
attachments=attachments,
91+
**kwargs,
8292
)
8393

8494
def _get_user_id(self, username):
@@ -95,7 +105,7 @@ def _get_users_info(self):
95105
)
96106

97107
def _send_user_message(
98-
self, username, text, parse="full", link_names=1, attachments=None
108+
self, username, text, parse="full", link_names=1, attachments=None, **kwargs
99109
):
100110
user_id = self._get_user_id(username)
101111
if user_id:
@@ -105,10 +115,11 @@ def _send_user_message(
105115
parse=parse,
106116
link_names=link_names,
107117
attachments=attachments,
118+
**kwargs,
108119
)
109120

110121
def _send_channel_message(
111-
self, channel, text, parse="full", link_names=1, attachments=None
122+
self, channel, text, parse="full", link_names=1, attachments=None, **kwargs
112123
):
113124
self._client.chat_postMessage(
114125
channel=channel,
@@ -118,6 +129,7 @@ def _send_channel_message(
118129
attachments=self._parse_attachments(attachments),
119130
username=self.sender_name,
120131
icon_url=self._get_icon_url(),
132+
**kwargs,
121133
)
122134

123135
def _get_icon_url(self):
@@ -184,6 +196,7 @@ def __init__(
184196
attachments_template=None,
185197
include_attachments=None,
186198
fake=None,
199+
**kwargs,
187200
):
188201
super().__init__()
189202

@@ -207,6 +220,8 @@ def __init__(
207220
self.attachments = attachments or self.attachments
208221
self.attachments_template = attachments_template or self.attachments_template
209222

223+
self.kwargs = kwargs or {}
224+
210225
if not self.fake and not self.recipients:
211226
raise NotConfigured(
212227
"You must provide a value for SPIDERMON_SLACK_RECIPIENTS setting."
@@ -238,6 +253,7 @@ def run_action(self):
238253
to=self.recipients,
239254
text=self.get_message(),
240255
attachments=self.get_attachments(),
256+
**self.kwargs,
241257
)
242258

243259
def get_message(self):

tests/contrib/actions/slack/test_slack_action.py

Lines changed: 55 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import sys
22
import pytest
33

4-
from spidermon.contrib.actions.slack import SlackMessageManager
4+
from unittest.mock import MagicMock, patch
5+
from spidermon.contrib.actions.slack import SendSlackMessage, SlackMessageManager
56

67

78
@pytest.fixture
@@ -58,3 +59,56 @@ def test_do_not_log_text_and_attach_when_fake_is_not_set(logger_info):
5859
)
5960

6061
assert logger_info.call_count == 0
62+
63+
64+
@patch("spidermon.contrib.actions.slack.WebClient")
65+
def test_pass_arbitrary_args_to_manager_send_message_channel(_slack_mock):
66+
manager = SlackMessageManager(
67+
sender_token="anything",
68+
sender_name="@someone",
69+
)
70+
71+
manager.send_message(
72+
to=["channel"], text="a message", use_mention=True, arbitrary_arg=True
73+
)
74+
75+
_, kwargs = manager._client.chat_postMessage.call_args_list[0]
76+
assert "arbitrary_arg" in kwargs
77+
78+
79+
@patch("spidermon.contrib.actions.slack.WebClient")
80+
def test_pass_arbitrary_args_to_manager_send_message_user(_slack_mock):
81+
manager = SlackMessageManager(
82+
sender_token="anything",
83+
sender_name="@someone",
84+
)
85+
86+
manager._users = {"user": {"id": 10}}
87+
88+
manager.send_message(
89+
to=["@user"], text="a message", use_mention=True, arbitrary_arg=True
90+
)
91+
92+
_, kwargs = manager._client.chat_postMessage.call_args_list[0]
93+
assert "arbitrary_arg" in kwargs
94+
95+
96+
def test_message_sender_pass_kwargs():
97+
sender = SendSlackMessage(
98+
sender_token="anything",
99+
sender_name="@someone",
100+
recipients=["user"],
101+
a_new_arg="hello",
102+
)
103+
104+
sender.manager._client = MagicMock()
105+
sender.get_message = MagicMock()
106+
sender.get_attachments = MagicMock()
107+
108+
sender.get_message.return_value = "a message"
109+
sender.get_attachments.return_value = None
110+
111+
sender.run_action()
112+
113+
_, kwargs = sender.manager._client.chat_postMessage.call_args_list[0]
114+
assert "a_new_arg" in kwargs

0 commit comments

Comments
 (0)