def test_some_successful_with_one_arg(): trigger = triggers.some_successful(at_least=4) assert trigger(generate_states(success=4, failed=2)) with pytest.raises(signals.TRIGGERFAIL): trigger(generate_states(success=3)) trigger = triggers.some_successful(at_most=4) assert trigger(generate_states(failed=4, pending=5)) with pytest.raises(signals.TRIGGERFAIL): trigger(generate_states(success=5))
def test_some_successful_is_pickleable(): trigger = triggers.some_successful(at_least=0.1, at_most=2) new_trigger = cloudpickle.loads(cloudpickle.dumps(trigger)) assert new_trigger(generate_states(success=2, pending=18)) with pytest.raises(signals.TRIGGERFAIL): new_trigger(generate_states(success=1, pending=18))
def test_some_successful_does_the_math(): trigger = triggers.some_successful(at_least=0.1, at_most=2) assert trigger(generate_states(success=2, pending=18)) with pytest.raises(signals.TRIGGERFAIL): trigger(generate_states(success=1, pending=18)) with pytest.raises(signals.TRIGGERFAIL): trigger(generate_states(success=3, pending=18)) trigger = triggers.some_successful(at_least=2, at_most=0.1) assert trigger(generate_states(success=2, pending=18)) with pytest.raises(signals.TRIGGERFAIL): trigger(generate_states(success=1, pending=18)) with pytest.raises(signals.TRIGGERFAIL): trigger(generate_states(success=3, pending=18))
def test_some_successful_with_all_failed(at_least, at_most): trigger = triggers.some_successful(at_least=at_least, at_most=at_most) with pytest.raises(signals.TRIGGERFAIL): trigger(generate_states(failed=3))
def test_some_successful_error_msg(): trigger = triggers.some_successful(at_least=23) with pytest.raises(signals.TRIGGERFAIL, match="some_successful"): trigger(generate_states(success=1))
def test_some_successful_with_no_args(states): assert triggers.some_successful(states)
def DoNotLikeEven(Exception): pass @task(name="multiply input if even", max_retries=1, retry_delay=timedelta(seconds=5)) def transform(x: int, factor: int) -> int: """Multiply the input by `factor`""" if (x % 2) == 0: raise DoNotLikeEven(f'Do not like even numbers and received {x}') return x * factor @task(trigger=some_successful(at_least=1, at_most=6), state_handlers=[slack_notifier]) def load(data: list): """Print the data to indicate it was received""" print("Here's your output data: {}".format(data)) # Set dependency graph with Flow('ETL') as flow: e = extract() t = transform.map(e, unmapped(factor)) l = load(t) # with prefect.context(secrets=dict(SLACK_WEBHOOK_URL="https://hooks.slack.com/services/XXX" )): # flow.run()quit()
def test_some_successful_error_msg(): trigger = triggers.some_successful(at_least=23) with pytest.raises(signals.TRIGGERFAIL) as exc: trigger(generate_states(success=1)) assert "some_successful" in str(exc.value)
@task def create_array_of_randoms(length): array = [] for x in range(0, length): array.append(random.randint(0, 10)) return array @task def check_even(num): if num % 2 != 0: raise ValueError("number is odd!") @task(trigger=some_successful(at_least=0.5)) def mostly_ok(): return True with Flow("random list") as flow: n = choose_array_length() arr = create_array_of_randoms(n) ok = mostly_ok(upstream_tasks=[check_even.map(arr)]) flow.set_reference_tasks([ok]) flow.storage = GitHub(repo="whimsicallyson/example-flows", path="flows/random-flow.py", secrets=["ALLYSON_GITHUB_ACCESS_TOKEN"])