Example #1
0
def convert_to_workflow(command_line_tool, location=None):
    """
    Converts "command_line_tool" to Workflow trying to keep all
    important elements. If "command_line_tool" is already Workflow,
    doesn't apply any changes. If "location" is not None, dumps
    results to json file.
    """

    if command_line_tool["class"] == "Workflow":
        workflow_tool = command_line_tool
    else:
        workflow_tool = {
            "class": "Workflow",
            "cwlVersion": command_line_tool["cwlVersion"],
            "inputs": [],
            "outputs": []
        }

        for key in ["requirements"]:
            if key in command_line_tool:
                workflow_tool[key] = command_line_tool[key]

        for input_id, input_data in get_items(command_line_tool["inputs"]):
            workflow_input = {
                "id": input_id,
                "type": remove_field_from_dict(
                    input_data["type"], "inputBinding"
                )  # "type" in WorkflowInputParameter cannot have "inputBinding"
            }
            for key in ["secondaryFiles",
                        "default"]:  # TODO: Do I need to copy format?
                if key in input_data:
                    workflow_input[key] = input_data[key]
            workflow_tool["inputs"].append(workflow_input)

        for output_id, output_data in get_items(command_line_tool["outputs"]):
            workflow_output = {
                "id":
                output_id,
                "type":
                output_data["type"],
                "outputSource":
                get_rootname(command_line_tool["id"]) + "/" + output_id
            }
            # TODO: not sure if I need format here
            # for key in ["format"]:
            #     if key in output_data:
            #         workflow_output[key] = output_data[key]
            workflow_tool["outputs"].append(workflow_output)

        workflow_tool["steps"] = [{
            "id":
            get_rootname(command_line_tool["id"]),
            "run":
            command_line_tool,
            "in": [{
                "id": input_id,
                "source": input_id
            } for input_id, _ in get_items(workflow_tool["inputs"])],
            "out": [
                output_id
                for output_id, _ in get_items(workflow_tool["outputs"])
            ]
        }]

    if location is not None:
        dump_json(workflow_tool, location)

    return workflow_tool
Example #2
0
def test_remove_field_from_dict(data, key, control_data):
    clean_data = remove_field_from_dict(data, key)
    assert all(control_data[key] == value for key, value in
               clean_data.items()), "Failed to remove field from dictionary"