def test_gmail_notifier_ignores_ignore_states(monkeypatch): all_states = [ Running, Pending, Finished, Failed, TriggerFailed, Cached, Scheduled, Retrying, Success, Skipped, ] smtp = MagicMock() sendmail = MagicMock() smtp.SMTP_SSL.return_value.sendmail = sendmail monkeypatch.setattr(prefect.utilities.notifications.notifications, "smtplib", smtp) for state in all_states: s = state() with set_temporary_config({"cloud.use_local_secrets": True}): with prefect.context( secrets=dict(EMAIL_USERNAME="", EMAIL_PASSWORD="")): returned = gmail_notifier(Task(), "", s, ignore_states=[State]) assert returned is s assert sendmail.called is False
def test_gmail_notifier_is_curried_and_uses_only_states(monkeypatch, state): state = state() smtp = MagicMock() sendmail = MagicMock() smtp.SMTP_SSL.return_value.sendmail = sendmail monkeypatch.setattr(prefect.utilities.notifications, "smtplib", smtp) monkeypatch.setattr(prefect.config.cloud, "use_local_secrets", True) handler = gmail_notifier(only_states=[TriggerFailed]) returned = handler(Task(), "", state) assert returned is state assert sendmail.called is isinstance(state, TriggerFailed)
def test_gmail_notifier_is_curried_and_uses_only_states(monkeypatch, state): state = state() smtp = MagicMock() sendmail = MagicMock() smtp.SMTP_SSL.return_value.sendmail = sendmail monkeypatch.setattr(prefect.utilities.notifications, "smtplib", smtp) with set_temporary_config({"cloud.use_local_secrets": True}): with prefect.context(secrets=dict(EMAIL_USERNAME="", EMAIL_PASSWORD="")): handler = gmail_notifier(only_states=[TriggerFailed]) returned = handler(Task(), "", state) assert returned is state assert sendmail.called is isinstance(state, TriggerFailed)
def test_gmail_notifier_sends_simple_email(monkeypatch): smtp = MagicMock() sendmail = MagicMock() smtp.SMTP_SSL.return_value.sendmail = sendmail monkeypatch.setattr(prefect.utilities.notifications, "smtplib", smtp) s = Failed("optional message...") monkeypatch.setattr(prefect.config.cloud, "use_local_secrets", True) with prefect.context(secrets=dict(EMAIL_USERNAME="******", EMAIL_PASSWORD=1234)): returned = gmail_notifier(Task(name="dud"), "", s) assert returned is s email_from, to, body = sendmail.call_args[0] assert email_from == "*****@*****.**" assert to == "alice" assert "Failed" in body assert "optional message" in body assert s.color in body
def test_gmail_notifier_ignores_ignore_states(monkeypatch): all_states = [ Running, Pending, Finished, Failed, TriggerFailed, Cached, Scheduled, Retrying, Success, Skipped, ] smtp = MagicMock() sendmail = MagicMock() smtp.SMTP_SSL.return_value.sendmail = sendmail monkeypatch.setattr(prefect.config.cloud, "use_local_secrets", True) monkeypatch.setattr(prefect.utilities.notifications, "smtplib", smtp) for state in all_states: s = state() returned = gmail_notifier(Task(), "", s, ignore_states=[State]) assert returned is s assert sendmail.called is False
from prefect import task, Flow, Parameter import requests from prefect.engine.state import Failed from prefect.utilities.notifications import gmail_notifier handler = gmail_notifier(only_states=[Failed]) @task (name= 'fail', state_handlers = [handler]) def getNothing(nothing): empty = requests.post(nothing) return empty with Flow("FailingFlow", state_handlers=[handler]) as flow: getNothing('42') flow.run()