code: def _wf_to_dict(wf):
      
      inputs, outputs = _get_wf_inout(wf)
      out = {"name": _id_to_name(wf.tool["id"]).replace("-", "_"), "inputs": inputs,
             "outputs": outputs, "steps": [], "subworkflows": [],
             "requirements": []}
      for step in wf.steps:
          inputs, outputs = _get_step_inout(step)
          inputs, scatter = _organize_step_scatter(step, inputs)
          if isinstance(step.embedded_tool, cwltool.workflow.Workflow):
              wf_def = _wf_to_dict(step.embedded_tool)
              out["subworkflows"].append({"id": wf_def["name"], "definition": wf_def,
                                          "inputs": inputs, "outputs": outputs, "scatter": scatter})
          else:
              task_def = _tool_to_dict(step.embedded_tool)
              out["steps"].append({"task_id": task_def["name"], "task_definition": task_def,
                                   "inputs": inputs, "outputs": outputs, "scatter": scatter})
      return out
docs: Parse a workflow into cwl2wdl style dictionary.