Esempio n. 1
0
def test_circular_resolve(memory_jobstore):
    from jobflow.core.reference import OutputReference

    # test catching circular resolve failure
    ref1 = OutputReference("12345")
    task_data = {"uuid": ref1.uuid, "index": 1, "output": ref1}
    memory_jobstore.update(task_data)
    with pytest.raises(RuntimeError):
        ref1.resolve(memory_jobstore)
Esempio n. 2
0
def test_reference_in_output(memory_jobstore):
    from jobflow.core.reference import OnMissing, OutputReference

    # test resolvable reference in job output
    ref1 = OutputReference("12345")
    ref2 = OutputReference("56789")
    task_data1 = {"uuid": ref1.uuid, "index": 1, "output": ref2}
    task_data2 = {"uuid": ref2.uuid, "index": 1, "output": "xyz"}
    memory_jobstore.update(task_data1)
    memory_jobstore.update(task_data2)
    assert "xyz" == ref1.resolve(memory_jobstore)

    # test missing reference in output
    ref1 = OutputReference("12345")
    ref2 = OutputReference("999")
    task_data = {"uuid": ref1.uuid, "index": 1, "output": ref2}
    memory_jobstore.update(task_data)
    assert ref1.resolve(memory_jobstore, on_missing=OnMissing.NONE) is None
    assert ref1.resolve(memory_jobstore, on_missing=OnMissing.PASS) == ref2
    with pytest.raises(ValueError):
        ref1.resolve(memory_jobstore, on_missing=OnMissing.ERROR)
Esempio n. 3
0
def test_resolve(memory_jobstore):
    from jobflow import OnMissing, OutputReference

    ref = OutputReference("123")

    # fail if cache or store not provided
    with pytest.raises(TypeError):
        ref.resolve()

    # test on missing
    assert ref.resolve(memory_jobstore, on_missing=OnMissing.NONE) is None
    assert ref.resolve(memory_jobstore, on_missing=OnMissing.PASS) == ref

    with pytest.raises(ValueError):
        ref.resolve(memory_jobstore, on_missing=OnMissing.ERROR)

    # resolve using store
    memory_jobstore.update({"uuid": "123", "index": 1, "output": 101})
    assert ref.resolve(store=memory_jobstore) == 101

    # resolve using store and empty cache
    cache = {}
    assert ref.resolve(store=memory_jobstore, cache=cache) == 101
    assert cache["123"][1] == 101

    # check cache supersedes store
    cache = {"123": {1: "xyz"}}
    assert ref.resolve(store=memory_jobstore, cache=cache) == "xyz"
    assert cache["123"][1] == "xyz"

    # test indexing
    ref = OutputReference("123", (("i", "a"), ("i", 1)))
    memory_jobstore.update({"uuid": "123", "index": 1, "output": {"a": [5, 6, 7]}})
    assert ref.resolve(memory_jobstore) == 6

    # test attribute access
    ref = OutputReference("123", (("a", "__module__"),))
    memory_jobstore.update({"uuid": "123", "index": 1, "output": OutputReference})
    assert ref.resolve(memory_jobstore) == "jobflow.core.reference"

    # test missing attribute throws error
    ref = OutputReference("123", (("a", "b"),))
    memory_jobstore.update({"uuid": "123", "index": 1, "output": [1234]})
    with pytest.raises(AttributeError):
        ref.resolve(memory_jobstore)

    # test missing index throws error
    ref = OutputReference("123", (("i", "b"),))
    with pytest.raises(TypeError):
        ref.resolve(memory_jobstore)