Example #1
0
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))
Example #2
0
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))
Example #3
0
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))
Example #4
0
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))
Example #5
0
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))
Example #6
0
def test_some_successful_with_no_args(states):
    assert triggers.some_successful(states)
Example #7
0

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()
Example #8
0
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"])