コード例 #1
0
def complete_input_references_in_outputs(cli_outputs, inputs_to_reference):
    """
    Takes the cli outputs and inputs to reference and returns the cli outputs, but with resolved input references

    :param cli_outputs: The cli outputs to resolve input references for
    :param inputs_to_reference: The inputs to reference
    """
    resolved_outputs = deepcopy(cli_outputs)

    for output_key, output_value in resolved_outputs.items():
        if output_value['type'] == 'stdout' or output_value['type'] == 'stderr':
            continue
        output_binding = output_value['outputBinding']

        try:
            resolved_glob = resolve_input_references(output_binding['glob'],
                                                     inputs_to_reference)
        except InvalidInputReference as e:
            raise InvalidInputReference(
                'Invalid Input Reference for output key "{}":\n{}'.format(
                    output_key, str(e)))

        output_binding['glob'] = resolved_glob

    return resolved_outputs
コード例 #2
0
def test_recursive_references():
    glob = '$(inputs.$(inputs.a_file.basename).basename'
    with pytest.raises(InvalidInputReference):
        resolve_input_references(glob, INPUT_TO_REFERENCE)
コード例 #3
0
def test_multiple_references():
    glob = '$(inputs.a_file.basename) - $(inputs.a_file.class)'
    result = resolve_input_references(glob, INPUT_TO_REFERENCE)

    assert result == 'a_file - File'
コード例 #4
0
def test_not_closed_bracket():
    glob = '$(inputs["a_file.basename)'
    with pytest.raises(InvalidInputReference):
        resolve_input_references(glob, INPUT_TO_REFERENCE)
コード例 #5
0
def test_could_not_resolve_attribute():
    glob = '$(inputs.a_file.invalid)'
    with pytest.raises(InvalidInputReference):
        resolve_input_references(glob, INPUT_TO_REFERENCE)
コード例 #6
0
def test_file_list():
    glob = 'PRE-$(inputs.a_file[0].basename)-POST'
    result = resolve_input_references(glob, INPUT_LIST_TO_REFERENCE)

    assert result == 'PRE-a_file-POST'
コード例 #7
0
def test_bracket_dots():
    glob = 'PRE-$(inputs.a_file.basename)-POST'
    result = resolve_input_references(glob, INPUT_TO_REFERENCE)

    assert result == 'PRE-a_file-POST'
コード例 #8
0
def test_bracket_single_quote():
    glob = 'PRE-$(inputs[\'a_file\'][\'basename\'])-POST'
    result = resolve_input_references(glob, INPUT_TO_REFERENCE)

    assert result == 'PRE-a_file-POST'
コード例 #9
0
def test_bracket_double_quote():
    glob = 'PRE-$(inputs["a_file"]["basename"])-POST'
    result = resolve_input_references(glob, INPUT_TO_REFERENCE)

    assert result == 'PRE-a_file-POST'
コード例 #10
0
def test_int_value():
    glob = '$(inputs.a_file.size)'
    result = resolve_input_references(glob, INPUT_TO_REFERENCE)

    assert result == '1000'
コード例 #11
0
def test_wrong_order():
    glob = '$(inputs.a_file["basename)"]'
    with pytest.raises(InvalidInputReference):
        resolve_input_references(glob, INPUT_TO_REFERENCE)
コード例 #12
0
def test_missing_inputs():
    glob = '$(invalid.a_file.basename)'
    with pytest.raises(InvalidInputReference):
        resolve_input_references(glob, INPUT_TO_REFERENCE)
コード例 #13
0
def test_could_not_resolve_identifier():
    glob = '$(inputs["invalid"])'
    with pytest.raises(InvalidInputReference):
        resolve_input_references(glob, INPUT_TO_REFERENCE)
コード例 #14
0
def test_string_index_in_list():
    glob = '$(inputs.a_file[invalid].basename)'
    with pytest.raises(InvalidInputReference):
        resolve_input_references(glob, INPUT_LIST_TO_REFERENCE)
コード例 #15
0
def test_string_index_and_dot():
    glob = '$(inputs["a_file"].basename)'
    result = resolve_input_references(glob, INPUT_TO_REFERENCE)

    assert result == 'a_file'
コード例 #16
0
def test_recursive_attributes():
    glob = '$(inputs["inputs["a_file"]"].basename)'
    with pytest.raises(InvalidInputReference):
        resolve_input_references(glob, INPUT_TO_REFERENCE)