Esempio n. 1
0
def test_auto_expose_all(wf):
    t = CommandLineTool(id='t')

    input = t.add_input(cwl.String(), 'input')
    output = t.add_output(cwl.String(), 'output')

    wf.add_step(t)

    assert wf.inputs == [
        WorkflowInput(id='input',
                      label='input',
                      type=Workflow.set_required(Primitive.STRING, False))
    ]

    assert wf.outputs == [
        WorkflowOutput(id='output',
                       label='output',
                       output_source='{}/{}'.format(t.id, output.id),
                       type=Workflow.set_required(Primitive.STRING, False))
    ]

    assert wf.steps[0] == Step(id=t.id,
                               in_=[StepInput(input.id, source=input.id)],
                               out=[StepOutput(output.id)],
                               run=t)
Esempio n. 2
0
def test_get_step(wf):
    t1 = CommandLineTool(id='t1')
    t2 = CommandLineTool(id='t2')
    wf.add_step(t1)
    wf.add_step(t2)
    assert wf.get_step('t1').run == t1
    assert wf.get_step('t2').run == t2
Esempio n. 3
0
def test_add_step(wf):
    t1 = CommandLineTool(id='t1')
    t2 = CommandLineTool(id='t2')
    t3 = Workflow()
    wf.add_step(t1)
    wf.add_step(t2)
    wf.add_step(t3)
    assert wf.steps[0] == Step(t1.id, [], [], t1)
    assert wf.steps[1] == Step(t2.id, [], [], t2)
    assert wf.steps[2] == Step(t3.id, [], [], t3)
Esempio n. 4
0
def test_add_connection_wf_input(wf):
    wf.add_input(cwl.String(), 'input_str')

    t1 = CommandLineTool(id='t1')
    t1.add_input(cwl.String(), 'input_str')

    wf.add_step(t1, expose=[])

    wf.add_connection('input_str', 't1.input_str')

    assert wf.steps[0].in_ == [StepInput('input_str', source='input_str')]
Esempio n. 5
0
def test_scatter_single_check_input(wf, hint, required):
    t1 = CommandLineTool(id='t1')
    ihint = hint(required=required)
    t = TypeFactory.create(ihint, True)

    t1.add_input(ihint, 'input')
    step1 = wf.add_step(t1, expose=['input'])
    wf.scatter(step1, ['input'], None)
    assert isinstance(wf.inputs[0].type, InputArray)
    if is_primitive(t) and not ihint.required:
        t = [Primitive.NULL, t.rstrip('?')]
    assert wf.inputs[0].type.items_ == t
Esempio n. 6
0
def test_add_connection_wf_output(wf):
    wf.add_output(cwl.String(), 'output_str')

    t1 = CommandLineTool(id='t1')
    t1.add_output(cwl.String(), 'output_str')

    wf.add_step(t1, expose=[])

    wf.add_connection('t1.output_str', 'output_str')

    assert wf.outputs[0] == WorkflowOutput(id='output_str',
                                           output_source='t1/output_str',
                                           type=set_required(
                                               Primitive.STRING, False))
Esempio n. 7
0
def test_expose_except(wf):
    t = CommandLineTool(id='test')
    t.add_input(cwl.Int(default=10, required=True), id='x')
    t.add_input(cwl.String(), id='y')
    t.add_output(cwl.File(glob='something', required=True), id='out')
    wf.add_step(t, expose_except=['y', 'out'])
    assert wf.inputs == [WorkflowInput(id='x', label='x', type=Primitive.INT)]
    assert wf.outputs == []
Esempio n. 8
0
def test_scatter_multi_check_input(wf, hint, req, method):
    tool = CommandLineTool(id='t')
    h = hint(required=req)
    hint_type = TypeFactory.create(h, True)

    inputs = [tool.add_input(h, 'input1'), tool.add_input(h, 'input2')]
    step = wf.add_step(tool, expose=['input1', 'input2'])
    wf.scatter(step, ['input1', 'input2'], method)

    if is_primitive(hint_type) and not h.required:
        hint_type = [Primitive.NULL, hint_type.rstrip('?')]

    for i in inputs:
        wfi = wf.get_port(i.id)
        assert isinstance(wfi.type, InputArray)
        assert wfi.type.items_ == hint_type
Esempio n. 9
0
def test_scatter_multi_check_output(wf, hint, req, method):
    tool = CommandLineTool(id='t')
    h = hint(required=req)

    inputs = [
        tool.add_input(h, 'input1'),
        tool.add_input(h, 'input2'),
        tool.add_input(h, 'input3')
    ]
    outputs = [tool.add_output(h, 'output1'), tool.add_output(h, 'output2')]
    scatter = [i.id for i in inputs]
    step = wf.add_step(tool, expose=scatter + [o.id for o in outputs])
    wf.scatter(step, scatter, method)

    # number of iterations
    n = len(scatter) if method == ScatterMethod.NESTED_CROSSPRODUCT else 1

    for o in outputs:
        wfo = wf.get_port(o.id)
        if req:
            parent = wfo.type
            for _ in range(n):
                assert isinstance(parent, OutputArray)
                parent = parent.items_
        else:
            assert Primitive.NULL in wfo.type
            wfo.type.remove(Primitive.NULL)
            assert len(wfo.type) == 1
            parent = wfo.type[0]
            for _ in range(n):
                assert isinstance(parent, OutputArray)
                parent = parent.items_

        h.required = True
        assert parent == TypeFactory.create(h, False)
Esempio n. 10
0
def test_is_scattered(wf, hint, req, scatter):
    tool = CommandLineTool(id='t')
    h = hint(required=req)

    tool.add_input(h, 'input1')
    tool.add_input(h, 'input2')
    tool.add_input(h, 'input3')

    step = wf.add_step(tool, scatter=scatter)

    for k in scatter:
        assert step.is_scattered(k) is True
Esempio n. 11
0
def test_scatter_single_check_output(wf, hint, req):
    tool = CommandLineTool(id='t')
    h = hint(required=req)

    tool.add_input(h, 'input')
    tool.add_output(h, 'output')

    step = wf.add_step(tool, expose=['output'])

    wf.scatter(step, ['input'], None)
    if req:
        assert isinstance(wf.outputs[0].type, OutputArray)
    else:
        assert Primitive.NULL in wf.outputs[0].type
        wf.outputs[0].type.remove(Primitive.NULL)
        assert len(wf.outputs[0].type) == 1
        assert isinstance(wf.outputs[0].type[0], OutputArray)
        h.required = True
        assert wf.outputs[0].type[0].items_ == TypeFactory.create(h, False)
Esempio n. 12
0
def test_add_connection_inner_nodes(wf):
    t1 = CommandLineTool(id='t1')
    t2 = CommandLineTool(id='t2')

    t1.add_input(cwl.String(), 'input')
    t1.add_output(cwl.String(), 'output')

    t2.add_input(cwl.String(), 'input')
    t2.add_output(cwl.String(), 'output')

    wf.add_step(t1, expose=[])
    wf.add_step(t2, expose=[])

    wf.add_connection('t1.output', 't2.input')

    assert wf.steps[0].out == [StepOutput('output')]
    assert wf.steps[1].in_ == [StepInput('input', source='t1/output')]