def create_inputs(tool, model, **kwargs): inputs_node = SubElement(tool, "inputs") # some suites (such as OpenMS) need some advanced options when handling inputs expand_advanced_node = None parameter_hardcoder = kwargs["parameter_hardcoder"] # treat all non output-file parameters as inputs for param in utils.extract_and_flatten_parameters(model): # no need to show hardcoded parameters hardcoded_value = parameter_hardcoder.get_hardcoded_value( param.name, model.name) if param.name in kwargs["blacklisted_parameters"] or hardcoded_value: # let's not use an extra level of indentation and use NOP continue if param.type is _OutFile: continue if param.advanced: continue parent_node = inputs_node # for lists we need a repeat tag if param.is_list and param.type is not _InFile: rep_node = add_child_node(parent_node, "repeat") create_repeat_attribute_list(rep_node, param) parent_node = rep_node param_node = add_child_node(parent_node, "param") create_param_attribute_list(param_node, param, kwargs["supported_file_formats"]) for param in utils.extract_and_flatten_parameters(model): # no need to show hardcoded parameters hardcoded_value = parameter_hardcoder.get_hardcoded_value( param.name, model.name) if param.name in kwargs["blacklisted_parameters"] or hardcoded_value: # let's not use an extra level of indentation and use NOP continue if param.type is _OutFile: continue if not param.advanced: continue if expand_advanced_node is None: expand_advanced_node = add_child_node( inputs_node, "expand", OrderedDict([("macro", ADVANCED_OPTIONS_MACRO_NAME)])) parent_node = expand_advanced_node # for lists we need a repeat tag if param.is_list and param.type is not _InFile: rep_node = add_child_node(parent_node, "repeat") create_repeat_attribute_list(rep_node, param) parent_node = rep_node param_node = add_child_node(parent_node, "param") create_param_attribute_list(param_node, param, kwargs["supported_file_formats"])
def get_input_with_same_restrictions(out_param, model, supported_file_formats): for param in utils.extract_and_flatten_parameters(model): if param.type is _InFile: if param.restrictions is not None: in_param_formats = get_supported_file_types(param.restrictions.formats, supported_file_formats) out_param_formats = get_supported_file_types(out_param.restrictions.formats, supported_file_formats) if in_param_formats == out_param_formats: return param
def create_outputs(parent, model, **kwargs): outputs_node = add_child_node(parent, "outputs") parameter_hardcoder = kwargs["parameter_hardcoder"] for param in utils.extract_and_flatten_parameters(model): # no need to show hardcoded parameters hardcoded_value = parameter_hardcoder.get_hardcoded_value(param.name, model.name) if param.name in kwargs["blacklisted_parameters"] or hardcoded_value: # let's not use an extra level of indentation and use NOP continue if param.type is _OutFile: create_output_node(outputs_node, param, model, kwargs["supported_file_formats"]) # If there are no outputs defined in the ctd the node will have no children # and the stdout will be used as output if len(outputs_node) == 0: add_child_node(outputs_node, "data", OrderedDict([("name", "param_stdout"), ("format", "txt"), ("label", "Output from stdout")]))
def create_inputs(tool, model, **kwargs): inputs_node = SubElement(tool, "inputs") # some suites (such as OpenMS) need some advanced options when handling inputs expand_advanced_node = add_child_node(tool, "expand", OrderedDict([("macro", ADVANCED_OPTIONS_MACRO_NAME)])) parameter_hardcoder = kwargs["parameter_hardcoder"] # treat all non output-file parameters as inputs for param in utils.extract_and_flatten_parameters(model): # no need to show hardcoded parameters hardcoded_value = parameter_hardcoder.get_hardcoded_value(param.name, model.name) if param.name in kwargs["blacklisted_parameters"] or hardcoded_value: # let's not use an extra level of indentation and use NOP continue if param.type is not _OutFile: if param.advanced: if expand_advanced_node is not None: parent_node = expand_advanced_node else: # something went wrong... we are handling an advanced parameter and the # advanced input macro was not set... inform the user about it logger.info("The parameter %s has been set as advanced, but advanced_input_macro has " "not been set." % param.name, 1) # there is not much we can do, other than use the inputs_node as a parent node! parent_node = inputs_node else: parent_node = inputs_node # for lists we need a repeat tag if param.is_list and param.type is not _InFile: rep_node = add_child_node(parent_node, "repeat") create_repeat_attribute_list(rep_node, param) parent_node = rep_node param_node = add_child_node(parent_node, "param") create_param_attribute_list(param_node, param, kwargs["supported_file_formats"]) # advanced parameter selection should be at the end # and only available if an advanced parameter exists if expand_advanced_node is not None and len(expand_advanced_node) > 0: inputs_node.append(expand_advanced_node)
def create_command(tool, model, **kwargs): final_command = utils.extract_tool_executable_path( model, kwargs["default_executable_path"]) + '\n' final_command += kwargs["add_to_command_line"] + '\n' advanced_command_start = "#if $adv_opts.adv_opts_selector=='advanced':\n" advanced_command_end = "#end if" advanced_command = "" parameter_hardcoder = kwargs["parameter_hardcoder"] found_output_parameter = False for param in utils.extract_and_flatten_parameters(model): if param.type is _OutFile: found_output_parameter = True command = "" param_name = utils.extract_param_name(param) command_line_prefix = utils.extract_command_line_prefix(param, model) if param.name in kwargs["blacklisted_parameters"]: continue hardcoded_value = parameter_hardcoder.get_hardcoded_value( param_name, model.name) if hardcoded_value: command += "%s %s\n" % (command_line_prefix, hardcoded_value) else: # parameter is neither blacklisted nor hardcoded... galaxy_parameter_name = get_galaxy_parameter_name(param) repeat_galaxy_parameter_name = get_repeat_galaxy_parameter_name( param) # logic for ITEMLISTs if param.is_list: if param.type is _InFile: command += command_line_prefix + "\n" command += " #for token in $" + galaxy_parameter_name + ":\n" command += " $token\n" command += " #end for\n" else: command += "\n#if $" + repeat_galaxy_parameter_name + ":\n" command += command_line_prefix + "\n" command += " #for token in $" + repeat_galaxy_parameter_name + ":\n" command += " #if \" \" in str(token):\n" command += " \"$token." + galaxy_parameter_name + "\"\n" command += " #else\n" command += " $token." + galaxy_parameter_name + "\n" command += " #end if\n" command += " #end for\n" command += "#end if\n" # logic for other ITEMs else: if param.advanced and param.type is not _OutFile: actual_parameter = "$adv_opts.%s" % galaxy_parameter_name else: actual_parameter = "$%s" % galaxy_parameter_name # TODO only useful for text fields, integers or floats # not useful for choices, input fields ... if not is_boolean_parameter(param) and type( param.restrictions) is _Choices: command += "#if " + actual_parameter + ":\n" command += " %s\n" % command_line_prefix command += " #if \" \" in str(" + actual_parameter + "):\n" command += " \"" + actual_parameter + "\"\n" command += " #else\n" command += " " + actual_parameter + "\n" command += " #end if\n" command += "#end if\n" elif is_boolean_parameter(param): command += "#if " + actual_parameter + ":\n" command += " %s\n" % command_line_prefix command += "#end if\n" elif TYPE_TO_GALAXY_TYPE[param.type] is 'text': command += "#if str(" + actual_parameter + "):\n" command += " %s " % command_line_prefix command += " \"" + actual_parameter + "\"\n" command += "#end if\n" else: command += "#if str(" + actual_parameter + "):\n" command += " %s " % command_line_prefix command += actual_parameter + "\n" command += "#end if\n" if param.advanced and param.type is not _OutFile: advanced_command += " %s" % command else: final_command += command if advanced_command: final_command += "%s%s%s\n" % (advanced_command_start, advanced_command, advanced_command_end) if not found_output_parameter: final_command += "> $param_stdout\n" command_node = add_child_node(tool, "command") command_node.text = final_command
def convert_to_cwl(ctd_model, args): # create cwl_tool object with the basic information base_command = utils.extract_tool_executable_path( ctd_model, args.default_executable_path) # add basic properties cwl_tool = {} cwl_tool[CWL_VERSION] = CURRENT_CWL_VERSION cwl_tool[CLASS] = 'CommandLineTool' cwl_tool[LABEL] = ctd_model.opt_attribs["description"] cwl_tool[DOC] = utils.extract_tool_help_text(ctd_model) cwl_tool[BASE_COMMAND] = base_command # TODO: test with optional output files # add inputs/outputs for param in utils.extract_and_flatten_parameters(ctd_model): if param.name in args.blacklisted_parameters: continue param_name = utils.extract_param_name(param) cwl_fixed_param_name = fix_param_name(param_name) hardcoded_value = args.parameter_hardcoder.get_hardcoded_value( param_name, ctd_model.name) param_default = str( param.default ) if param.default is not _Null and param.default is not None else None if param.type is _OutFile: create_lists_if_missing(cwl_tool, [INPUTS, OUTPUTS]) # we know the only outputs are of type _OutFile # we need an input of type string that will contain the name of the output file label = "Filename for %s output file" % param_name input_name_for_output_filename = get_input_name_for_output_filename( param) input_param = {} input_param[ID] = input_name_for_output_filename input_param[DOC] = label input_param[LABEL] = label if param_default is not None: input_param[DEFAULT] = param_default input_param[TYPE] = generate_cwl_param_type(param, TYPE_STRING) insert_input_binding(ctd_model, param, hardcoded_value, input_param) output_binding = {} output_binding[ GLOB] = "$(inputs.%s)" % input_name_for_output_filename output_param = {} output_param[ID] = cwl_fixed_param_name output_param[OUTPUT_BINDING] = output_binding output_param[DOC] = param.description output_param[LABEL] = param.description output_param[TYPE] = generate_cwl_param_type(param) cwl_tool[INPUTS].append(input_param) cwl_tool[OUTPUTS].append(output_param) else: create_lists_if_missing(cwl_tool, [INPUTS]) # we know that anything that is not an _OutFile is an input input_param = {} input_param[ID] = cwl_fixed_param_name input_param[DOC] = param.description input_param[LABEL] = param.description if param_default is not None: input_param[DEFAULT] = param_default input_param[TYPE] = generate_cwl_param_type(param) insert_input_binding(ctd_model, param, hardcoded_value, input_param) cwl_tool[INPUTS].append(input_param) return cwl_tool
def create_command(tool, model, **kwargs): final_command = utils.extract_tool_executable_path(model, kwargs["default_executable_path"]) + '\n' final_command += kwargs["add_to_command_line"] + '\n' advanced_command_start = "#if $adv_opts.adv_opts_selector=='advanced':\n" advanced_command_end = "#end if" advanced_command = "" parameter_hardcoder = kwargs["parameter_hardcoder"] found_output_parameter = False for param in utils.extract_and_flatten_parameters(model): if param.type is _OutFile: found_output_parameter = True command = "" param_name = utils.extract_param_name(param) command_line_prefix = utils.extract_command_line_prefix(param, model) if param.name in kwargs["blacklisted_parameters"]: continue hardcoded_value = parameter_hardcoder.get_hardcoded_value(param_name, model.name) if hardcoded_value: command += "%s %s\n" % (command_line_prefix, hardcoded_value) else: # parameter is neither blacklisted nor hardcoded... galaxy_parameter_name = get_galaxy_parameter_name(param) repeat_galaxy_parameter_name = get_repeat_galaxy_parameter_name(param) # logic for ITEMLISTs if param.is_list: if param.type is _InFile: command += command_line_prefix + "\n" command += " #for token in $" + galaxy_parameter_name + ":\n" command += " $token\n" command += " #end for\n" else: command += "\n#if $" + repeat_galaxy_parameter_name + ":\n" command += command_line_prefix + "\n" command += " #for token in $" + repeat_galaxy_parameter_name + ":\n" command += " #if \" \" in str(token):\n" command += " \"$token." + galaxy_parameter_name + "\"\n" command += " #else\n" command += " $token." + galaxy_parameter_name + "\n" command += " #end if\n" command += " #end for\n" command += "#end if\n" # logic for other ITEMs else: if param.advanced and param.type is not _OutFile: actual_parameter = "$adv_opts.%s" % galaxy_parameter_name else: actual_parameter = "$%s" % galaxy_parameter_name # TODO only useful for text fields, integers or floats # not useful for choices, input fields ... if not is_boolean_parameter(param) and type(param.restrictions) is _Choices : command += "#if " + actual_parameter + ":\n" command += " %s\n" % command_line_prefix command += " #if \" \" in str(" + actual_parameter + "):\n" command += " \"" + actual_parameter + "\"\n" command += " #else\n" command += " " + actual_parameter + "\n" command += " #end if\n" command += "#end if\n" elif is_boolean_parameter(param): command += "#if " + actual_parameter + ":\n" command += " %s\n" % command_line_prefix command += "#end if\n" elif TYPE_TO_GALAXY_TYPE[param.type] is 'text': command += "#if " + actual_parameter + ":\n" command += " %s " % command_line_prefix command += " \"" + actual_parameter + "\"\n" command += "#end if\n" else: command += "#if " + actual_parameter + ":\n" command += " %s " % command_line_prefix command += actual_parameter + "\n" command += "#end if\n" if param.advanced and param.type is not _OutFile: advanced_command += " %s" % command else: final_command += command if advanced_command: final_command += "%s%s%s\n" % (advanced_command_start, advanced_command, advanced_command_end) if not found_output_parameter: final_command += "> $param_stdout\n" command_node = add_child_node(tool, "command") command_node.text = final_command
def convert_to_cwl(ctd_model, args): # create cwl_tool object with the basic information base_command = utils.extract_tool_executable_path(ctd_model, args.default_executable_path) # add basic properties cwl_tool = {} cwl_tool[CWL_VERSION] = CURRENT_CWL_VERSION cwl_tool[CLASS] = 'CommandLineTool' cwl_tool[LABEL] = ctd_model.opt_attribs["description"] cwl_tool[DOC] = utils.extract_tool_help_text(ctd_model) cwl_tool[BASE_COMMAND] = base_command # TODO: test with optional output files # add inputs/outputs for param in utils.extract_and_flatten_parameters(ctd_model): if param.name in args.blacklisted_parameters: continue param_name = utils.extract_param_name(param) cwl_fixed_param_name = fix_param_name(param_name) hardcoded_value = args.parameter_hardcoder.get_hardcoded_value(param_name, ctd_model.name) param_default = str(param.default) if param.default is not _Null and param.default is not None else None if param.type is _OutFile: create_lists_if_missing(cwl_tool, [INPUTS, OUTPUTS]) # we know the only outputs are of type _OutFile # we need an input of type string that will contain the name of the output file label = "Filename for %s output file" % param_name input_name_for_output_filename = get_input_name_for_output_filename(param) input_param = {} input_param[ID] = input_name_for_output_filename input_param[DOC] = label input_param[LABEL] = label if param_default is not None: input_param[DEFAULT] = param_default input_param[TYPE] = generate_cwl_param_type(param, TYPE_STRING) insert_input_binding(ctd_model, param, hardcoded_value, input_param) output_binding = {} output_binding[GLOB] = "$(inputs.%s)" % input_name_for_output_filename output_param = {} output_param[ID] = cwl_fixed_param_name output_param[OUTPUT_BINDING] = output_binding output_param[DOC] = param.description output_param[LABEL] = param.description output_param[TYPE] = generate_cwl_param_type(param) cwl_tool[INPUTS].append(input_param) cwl_tool[OUTPUTS].append(output_param) else: create_lists_if_missing(cwl_tool, [INPUTS]) # we know that anything that is not an _OutFile is an input input_param = {} input_param[ID] = cwl_fixed_param_name input_param[DOC] = param.description input_param[LABEL] = param.description if param_default is not None: input_param[DEFAULT] = param_default input_param[TYPE] = generate_cwl_param_type(param) insert_input_binding(ctd_model, param, hardcoded_value, input_param) cwl_tool[INPUTS].append(input_param) return cwl_tool