This is an automated email from the ASF dual-hosted git repository. potiuk pushed a commit to branch v1-10-test in repository https://gitbox.apache.org/repos/asf/airflow.git
commit 2d6452a316aa7d2f30e5c9fd2b2c1f36c907dca1 Author: Ben Chen <[email protected]> AuthorDate: Tue Jun 23 18:38:22 2020 +0200 Add extra options to fix SSL issue and be more flexible (#9409) --- airflow/contrib/hooks/slack_webhook_hook.py | 10 +++++++--- airflow/contrib/operators/slack_webhook_operator.py | 9 +++++++-- tests/contrib/hooks/test_slack_webhook_hook.py | 3 ++- tests/contrib/operators/test_slack_webhook_operator.py | 6 ++++-- 4 files changed, 20 insertions(+), 8 deletions(-) diff --git a/airflow/contrib/hooks/slack_webhook_hook.py b/airflow/contrib/hooks/slack_webhook_hook.py index f3817b3..001973a 100644 --- a/airflow/contrib/hooks/slack_webhook_hook.py +++ b/airflow/contrib/hooks/slack_webhook_hook.py @@ -58,6 +58,8 @@ class SlackWebhookHook(HttpHook): :type link_names: bool :param proxy: Proxy to use to make the Slack webhook call :type proxy: str + :param extra_options: Extra options for http hook + :type extra_options: dict """ def __init__(self, @@ -72,6 +74,7 @@ class SlackWebhookHook(HttpHook): icon_url=None, link_names=False, proxy=None, + extra_options=None, *args, **kwargs ): @@ -86,6 +89,7 @@ class SlackWebhookHook(HttpHook): self.icon_url = icon_url self.link_names = link_names self.proxy = proxy + self.extra_options = extra_options or {} def _get_token(self, token, http_conn_id): """ @@ -140,13 +144,13 @@ class SlackWebhookHook(HttpHook): """ Remote Popen (actually execute the slack webhook call) """ - proxies = {} + if self.proxy: # we only need https proxy for Slack, as the endpoint is https - proxies = {'https': self.proxy} + self.extra_options.update({'proxies': {'https': self.proxy}}) slack_message = self._build_slack_message() self.run(endpoint=self.webhook_token, data=slack_message, headers={'Content-type': 'application/json'}, - extra_options={'proxies': proxies}) + extra_options=self.extra_options) diff --git a/airflow/contrib/operators/slack_webhook_operator.py b/airflow/contrib/operators/slack_webhook_operator.py index 6169524..3b1bcfa 100644 --- a/airflow/contrib/operators/slack_webhook_operator.py +++ b/airflow/contrib/operators/slack_webhook_operator.py @@ -57,10 +57,12 @@ class SlackWebhookOperator(SimpleHttpOperator): :type link_names: bool :param proxy: Proxy to use to make the Slack webhook call :type proxy: str + :param extra_options: Extra options for http hook + :type extra_options: dict """ template_fields = ['webhook_token', 'message', 'attachments', 'blocks', 'channel', - 'username', 'proxy', ] + 'username', 'proxy', 'extra_options', ] @apply_defaults def __init__(self, @@ -74,6 +76,7 @@ class SlackWebhookOperator(SimpleHttpOperator): icon_emoji=None, icon_url=None, link_names=False, + extra_options=None, proxy=None, *args, **kwargs): @@ -92,6 +95,7 @@ class SlackWebhookOperator(SimpleHttpOperator): self.link_names = link_names self.proxy = proxy self.hook = None + self.extra_options = extra_options def execute(self, context): """ @@ -108,6 +112,7 @@ class SlackWebhookOperator(SimpleHttpOperator): self.icon_emoji, self.icon_url, self.link_names, - self.proxy + self.proxy, + self.extra_options ) self.hook.execute() diff --git a/tests/contrib/hooks/test_slack_webhook_hook.py b/tests/contrib/hooks/test_slack_webhook_hook.py index 13663c5..fea2d82 100644 --- a/tests/contrib/hooks/test_slack_webhook_hook.py +++ b/tests/contrib/hooks/test_slack_webhook_hook.py @@ -40,7 +40,8 @@ class TestSlackWebhookHook(unittest.TestCase): 'icon_emoji': ':hankey:', 'icon_url': 'https://airflow.apache.org/_images/pin_large.png', 'link_names': True, - 'proxy': 'https://my-horrible-proxy.proxyist.com:8080' + 'proxy': 'https://my-horrible-proxy.proxyist.com:8080', + 'extra_options': {"verify": True} } expected_message_dict = { 'channel': _config['channel'], diff --git a/tests/contrib/operators/test_slack_webhook_operator.py b/tests/contrib/operators/test_slack_webhook_operator.py index 81ba6b8..e42cb0e 100644 --- a/tests/contrib/operators/test_slack_webhook_operator.py +++ b/tests/contrib/operators/test_slack_webhook_operator.py @@ -39,7 +39,8 @@ class TestSlackWebhookOperator(unittest.TestCase): 'icon_emoji': ':hankey', 'icon_url': 'https://airflow.apache.org/_images/pin_large.png', 'link_names': True, - 'proxy': 'https://my-horrible-proxy.proxyist.com:8080' + 'proxy': 'https://my-horrible-proxy.proxyist.com:8080', + 'extra_options': {"verify": True} } def setUp(self): @@ -68,6 +69,7 @@ class TestSlackWebhookOperator(unittest.TestCase): self.assertEqual(self._config['icon_url'], operator.icon_url) self.assertEqual(self._config['link_names'], operator.link_names) self.assertEqual(self._config['proxy'], operator.proxy) + self.assertEqual(self._config['extra_options'], operator.extra_options) def test_assert_templated_fields(self): operator = SlackWebhookOperator( @@ -77,7 +79,7 @@ class TestSlackWebhookOperator(unittest.TestCase): ) template_fields = ['webhook_token', 'message', 'attachments', 'blocks', 'channel', - 'username', 'proxy'] + 'username', 'proxy', 'extra_options'] self.assertEqual(operator.template_fields, template_fields)
