def test_slack_notifier_uses_proxies(monkeypatch): post = MagicMock(ok=True) monkeypatch.setattr(requests, "post", post) state = Failed(message="1", result=0) with set_temporary_config({"cloud.use_local_secrets": True}): with prefect.context(secrets=dict(SLACK_WEBHOOK_URL="")): slack_notifier(Task(), "", state, proxies={"http": "some.proxy.I.P"}) assert post.call_args[1]["proxies"] == {"http": "some.proxy.I.P"}
def test_slack_notifier_returns_new_state_and_old_state_is_ignored( monkeypatch): ok = MagicMock(ok=True) monkeypatch.setattr(prefect.utilities.notifications.requests, "post", ok) new_state = Failed(message="1", result=0) with set_temporary_config({"cloud.use_local_secrets": True}): assert slack_notifier(Task(), "", new_state) is new_state
def test_slack_notifier_returns_new_state_and_old_state_is_ignored(monkeypatch): ok = MagicMock(ok=True) monkeypatch.setattr(requests, "post", ok) new_state = Failed(message="1", result=0) with set_temporary_config({"cloud.use_local_secrets": True}): with prefect.context(secrets=dict(SLACK_WEBHOOK_URL="")): assert slack_notifier(Task(), "", new_state) is new_state
def test_slack_notifier_is_curried_and_uses_only_states(monkeypatch, state): state = state() ok = MagicMock(ok=True) monkeypatch.setattr(prefect.utilities.notifications.requests, "post", ok) handler = slack_notifier(only_states=[TriggerFailed]) with set_temporary_config({"cloud.use_local_secrets": True}): returned = handler(Task(), "", state) assert returned is state assert ok.called is isinstance(state, TriggerFailed)
def test_slack_notifier_is_curried_and_uses_only_states(monkeypatch, state): state = state() ok = MagicMock(ok=True) monkeypatch.setattr(requests, "post", ok) handler = slack_notifier(only_states=[TriggerFailed]) with set_temporary_config({"cloud.use_local_secrets": True}): with prefect.context(secrets=dict(SLACK_WEBHOOK_URL="")): returned = handler(Task(), "", state) assert returned is state assert ok.called is isinstance(state, TriggerFailed)
def test_slack_notifier_is_curried_and_ignores_ignore_states( monkeypatch, state): state = state() ok = MagicMock(ok=True) monkeypatch.setattr(prefect.utilities.notifications.requests, "post", ok) handler = slack_notifier(ignore_states=[Finished]) with set_temporary_config({"cloud.use_local_secrets": True}): returned = handler(Task(), "", state) assert returned is state assert ok.called is not state.is_finished()
def test_slack_notifier_is_curried_and_ignores_ignore_states(monkeypatch, state): state = state() ok = MagicMock(ok=True) monkeypatch.setattr(requests, "post", ok) handler = slack_notifier(ignore_states=[Finished]) with set_temporary_config({"cloud.use_local_secrets": True}): with prefect.context(secrets=dict(SLACK_WEBHOOK_URL="")): returned = handler(Task(), "", state) assert returned is state assert ok.called is not state.is_finished()
def test_slack_notifier_ignores_ignore_states(monkeypatch): all_states = [ Running, Pending, Finished, Failed, TriggerFailed, Cached, Scheduled, Retrying, Success, Skipped, ] ok = MagicMock(ok=True) monkeypatch.setattr(prefect.utilities.notifications.requests, "post", ok) for state in all_states: s = state() with set_temporary_config({"cloud.use_local_secrets": True}): returned = slack_notifier(Task(), "", s, ignore_states=[State]) assert returned is s assert ok.called is False
def test_slack_notifier_pulls_url_from_secret(monkeypatch): post = MagicMock(ok=True) monkeypatch.setattr("requests.post", post) state = Failed(message="1", result=0) with set_temporary_config({"cloud.use_local_secrets": True}): with pytest.raises(ValueError, match="SLACK_WEBHOOK_URL"): slack_notifier(Task(), "", state) with prefect.context(secrets=dict(SLACK_WEBHOOK_URL="https://foo/bar")): slack_notifier(Task(), "", state) assert post.call_args[0][0] == "https://foo/bar" with prefect.context(secrets=dict(TOP_SECRET='"42"')): slack_notifier(Task(), "", state, webhook_secret="TOP_SECRET") assert post.call_args[0][0] == "42"
from prefect.utilities.notifications import slack_notifier from prefect.tasks.notifications.slack_task import SlackTask from prefect.engine.result_handlers import LocalResultHandler from datetime import datetime, timedelta, date import mypass from tweet import create_twitter_api from arxivapi import arx_dict, arx_list from resources.config import feeds # Build a handler for slack # https://docs.prefect.io/core/tutorials/slack-notifications.html#using-your-url-to-get-notifications # You need to store the secrets in ~/.prefect/config.toml # Visit slack: https://app.slack.com/client/T04SR64EX/CS0P8PVKM slack_handler = slack_notifier(webhook_secret='SLACK_WEBHOOK_URL_DSARXIV') slack_message = SlackTask(webhook_secret='SLACK_WEBHOOK_URL_DSARXIV') def extract_domain(url): parsed_uri = urlparse(url) return '{uri.netloc}'.format(uri=parsed_uri).replace('www.', '').replace( '.com', '') def strip_html(text): return BeautifulSoup(str(text), 'html5lib').text def parse_rss(url: str) -> pd.DataFrame: items = feedparser.parse(url)['items']