Пример #1
0
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"}
Пример #2
0
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
Пример #3
0
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
Пример #4
0
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)
Пример #5
0
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)
Пример #6
0
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()
Пример #7
0
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()
Пример #8
0
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
Пример #9
0
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"
Пример #10
0
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']