예제 #1
0
def complex_states():
    res1 = SafeResult(1, result_handler=JSONResultHandler())
    res2 = SafeResult({"z": 2}, result_handler=JSONResultHandler())
    res3 = SafeResult(dict(x=1, y={"z": 2}),
                      result_handler=JSONResultHandler())
    naive_dt = datetime.datetime(2020, 1, 1)
    utc_dt = pendulum.datetime(2020, 1, 1)
    complex_result = {"x": res1, "y": res2}
    cached_state = state.Cached(
        cached_inputs=complex_result,
        result=res3,
        cached_parameters={
            "x": 1,
            "y": {
                "z": 2
            }
        },
        cached_result_expiration=utc_dt,
    )
    cached_state_naive = state.Cached(
        cached_inputs=complex_result,
        result=res3,
        cached_parameters={
            "x": 1,
            "y": {
                "z": 2
            }
        },
        cached_result_expiration=naive_dt,
    )
    running_tags = state.Running()
    running_tags.context = dict(tags=["1", "2", "3"])
    test_states = [
        state.Looped(loop_count=45),
        state.Pending(cached_inputs=complex_result),
        state.Paused(cached_inputs=complex_result),
        state.Retrying(start_time=utc_dt, run_count=3),
        state.Retrying(start_time=naive_dt, run_count=3),
        state.Scheduled(start_time=utc_dt),
        state.Scheduled(start_time=naive_dt),
        state.Resume(start_time=utc_dt),
        state.Resume(start_time=naive_dt),
        running_tags,
        state.Submitted(state=state.Retrying(start_time=utc_dt, run_count=2)),
        state.Submitted(state=state.Resume(start_time=utc_dt)),
        state.Queued(state=state.Pending()),
        state.Queued(state=state.Pending(), start_time=utc_dt),
        state.Queued(state=state.Retrying(start_time=utc_dt, run_count=2)),
        cached_state,
        cached_state_naive,
        state.TimedOut(cached_inputs=complex_result),
    ]
    return test_states
예제 #2
0
class TestInitializeRun:
    def test_initialize_run_returns_state_and_context(self):
        state_, context = state.Pending(), {}
        s, c = Runner().initialize_run(state=state_, context=context)
        assert s is state_
        assert c is context

    @pytest.mark.parametrize(
        "state",
        [
            state.Success(),
            state.Failed(),
            state.Pending(),
            state.Scheduled(),
            state.Skipped(),
            state.Cached(),
            state.Retrying(),
            state.Running(),
        ],
    )
    def test_initialize_run_returns_state(self, state):
        new_state, _ = Runner().initialize_run(state, context={})
        assert new_state is state

    @pytest.mark.parametrize(
        "state",
        [
            state.Submitted(state=state.Pending()),
            state.Submitted(state=state.Retrying()),
            state.Submitted(state=state.Scheduled()),
            state.Submitted(state=state.Resume()),
            state.Queued(state=state.Pending()),
            state.Queued(state=state.Retrying()),
            state.Queued(state=state.Scheduled()),
            state.Queued(state=state.Resume()),
        ],
    )
    def test_initialize_run_gets_wrapped_state_from_submitted_states(
            self, state):
        new_state, _ = Runner().initialize_run(state, context={})
        assert new_state is state.state

    def test_initialize_run_creates_pending_if_no_state_provided(self):
        new_state, _ = Runner().initialize_run(state=None, context={})
        assert isinstance(new_state, state.Pending)
예제 #3
0
def test_state():
    """
    This test ensures that deserialization works even when
    another Marshmallow serializer called "StateSchema" has been
    created.

    https://github.com/PrefectHQ/prefect/pull/2738
    """
    a = state.Submitted(state=state.Success())
    prefect.serialization.state.StateSchema().load(a.serialize())
예제 #4
0
def complex_states():
    res1 = results.PrefectResult(value=1)
    res2 = results.PrefectResult(value={"z": 2})
    res3 = results.PrefectResult(location=json.dumps(dict(x=1, y={"z": 2})))
    naive_dt = datetime.datetime(2020, 1, 1)
    utc_dt = pendulum.datetime(2020, 1, 1)
    cached_state = state.Cached(
        hashed_inputs=dict(x="foo", y="bar"),
        result=res3,
        cached_result_expiration=utc_dt,
    )
    cached_state_naive = state.Cached(
        hashed_inputs=dict(x="foo", y="bar"),
        result=res3,
        cached_result_expiration=naive_dt,
    )
    running_tags = state.Running()
    running_tags.context = dict(tags=["1", "2", "3"])
    test_states = [
        state.Looped(loop_count=45),
        state.Retrying(start_time=utc_dt, run_count=3),
        state.Retrying(start_time=naive_dt, run_count=3),
        state.Scheduled(start_time=utc_dt),
        state.Scheduled(start_time=naive_dt),
        state.Resume(start_time=utc_dt),
        state.Resume(start_time=naive_dt),
        running_tags,
        state.Submitted(state=state.Retrying(start_time=utc_dt, run_count=2)),
        state.Submitted(state=state.Resume(start_time=utc_dt)),
        state.Queued(state=state.Pending()),
        state.Queued(state=state.Pending(), start_time=utc_dt),
        state.Queued(state=state.Retrying(start_time=utc_dt, run_count=2)),
        cached_state,
        cached_state_naive,
    ]
    return test_states
예제 #5
0
    running_tags.context = dict(tags=["1", "2", "3"])
    test_states = [
        state.Looped(loop_count=45),
<<<<<<< HEAD
=======
        state.Pending(cached_inputs=complex_result),
        state.Paused(cached_inputs=complex_result),
>>>>>>> prefect clone
        state.Retrying(start_time=utc_dt, run_count=3),
        state.Retrying(start_time=naive_dt, run_count=3),
        state.Scheduled(start_time=utc_dt),
        state.Scheduled(start_time=naive_dt),
        state.Resume(start_time=utc_dt),
        state.Resume(start_time=naive_dt),
        running_tags,
        state.Submitted(state=state.Retrying(start_time=utc_dt, run_count=2)),
        state.Submitted(state=state.Resume(start_time=utc_dt)),
        state.Queued(state=state.Pending()),
        state.Queued(state=state.Pending(), start_time=utc_dt),
        state.Queued(state=state.Retrying(start_time=utc_dt, run_count=2)),
        cached_state,
        cached_state_naive,
<<<<<<< HEAD
=======
        state.TimedOut(cached_inputs=complex_result),
>>>>>>> prefect clone
    ]
    return test_states


def test_all_states_have_serialization_schemas_in_stateschema():