def doNoXMLparam(self): """filter style package - stdin to stdout""" if len(self.infiles) > 0: alab = self.infiles[0]["label"] if len(alab) == 0: alab = self.infiles[0]["infilename"] max1s = ( "Maximum one input if parampass is 0 but multiple input files supplied - %s" % str(self.infiles)) assert len(self.infiles) == 1, max1s newname = self.infiles[0]["infilename"] aninput = gxtp.DataParam( newname, optional=False, label=alab, help=self.infiles[0]["help"], format=self.infiles[0]["format"], multiple=False, num_dashes=0, ) aninput.command_line_override = "< $%s" % newname aninput.positional = True self.tinputs.append(aninput) tp = gxtp.TestParam(name=newname, value="%s_sample" % newname) self.testparam.append(tp) if len(self.outfiles) > 0: newname = self.outfiles[0]["name"] newfmt = self.outfiles[0]["format"] anout = gxtp.OutputData(newname, format=newfmt, num_dashes=0) anout.command_line_override = "> $%s" % newname anout.positional = self.is_positional self.toutputs.append(anout) tp = gxtp.TestOutput(name=newname, value="%s_sample" % newname) self.testparam.append(tp)
def parse_args_galaxy(self, *args, **kwargs): try: version = self.print_version() or '1.0' except AttributeError: # handle the potential absence of print_version version = '1.0' self.tool = gxt.Tool(self.prog, self.prog, version, self.description, self.prog, interpreter='python', version_command='python %s --version' % sys.argv[0]) self.inputs = gxtp.Inputs() self.outputs = gxtp.Outputs() self.at = agt.ArgparseGalaxyTranslation() # Only build up arguments if the user actually requests it for result in self.argument_list: # I am SO thankful they return the argument here. SO useful. argument_type = result.__class__.__name__ # http://stackoverflow.com/a/3071 if hasattr(self.at, argument_type): methodToCall = getattr(self.at, argument_type) gxt_parameter = methodToCall(result, tool=self.tool) if gxt_parameter is not None: if isinstance(gxt_parameter, gxtp.InputParameter): self.inputs.append(gxt_parameter) else: self.outputs.append(gxt_parameter) # TODO: replace with argparse-esque library to do this. stdout = gxtp.OutputData('default', 'txt') stdout.command_line_override = '> $default' self.outputs.append(stdout) self.tool.inputs = self.inputs self.tool.outputs = self.outputs if self.epilog is not None: self.tool.help = self.epilog else: self.tool.help = "TODO: Write help" data = self.tool.export() print(data) sys.exit()
def _parse_args_galaxy_argp(self, argp): try: version = self.print_version() or '1.0' except AttributeError: # handle the potential absence of print_version version = '1.0' tool = gxt.Tool(argp.prog, argp.prog.replace(" ", "_"), version, argp.description, "python " + argp.prog, interpreter=None, version_command='python %s --version' % argp.prog) inputs = gxtp.Inputs() outputs = gxtp.Outputs() at = agt.ArgparseGalaxyTranslation() # Only build up arguments if the user actually requests it for result in argp.argument_list: # I am SO thankful they return the argument here. SO useful. argument_type = result.__class__.__name__ # http://stackoverflow.com/a/3071 if hasattr(at, argument_type): methodToCall = getattr(at, argument_type) gxt_parameter = methodToCall(result, tool=tool) if gxt_parameter is not None: if isinstance(gxt_parameter, gxtp.InputParameter): inputs.append(gxt_parameter) else: outputs.append(gxt_parameter) # TODO: replace with argparse-esque library to do this. stdout = gxtp.OutputData('default', 'txt') stdout.command_line_override = '> $default' outputs.append(stdout) tool.inputs = inputs tool.outputs = outputs if argp.epilog is not None: tool.help = argp.epilog else: tool.help = "TODO: Write help" return tool.export()
def add_output_file(self, output): """ Add an output to the tool (XML: <outputs>). :param output: Output object. :type output: :class:`tooldog.biotool_model.Output` """ LOGGER.debug("Adding output to GalaxyToolGen object...") if not hasattr(self.tool, 'outputs'): self.tool.outputs = gxtp.Outputs() # Build parameter self.output_ct += 1 data_uri = output.data_type.get_edam_id() # Give unique name to the output name = 'OUTPUT' + str(self.output_ct) # Get all different format for this output list_formats = [] if not output.formats: list_formats.append(self.etog.get_datatype(edam_data=data_uri)) else: for format_obj in output.formats: format_uri = format_obj.get_edam_id() list_formats.append( self.etog.get_datatype(edam_data=data_uri, edam_format=format_uri)) formats = ', '.join(list_formats) # Create the parameter param = gxtp.OutputData(name, format=formats, from_work_dir=name + "." + formats.replace('.', '/')) param.command_line_override = '' # Write comment about this param param.node.insert(0, etree.Comment(FIXME)) param.node.insert(0, etree.Comment(PARAM_COMMENT % (self.biotool_id))) self.tool.outputs.append(param)
def doXMLparam(self): # noqa """Add all needed elements to tool""" for p in self.outfiles: newname = p["name"] newfmt = p["format"] newcl = p["CL"] test = p["test"] oldcl = p["origCL"] test = test.strip() ndash = self.getNdash(newcl) aparm = gxtp.OutputData(name=newname, format=newfmt, num_dashes=ndash, label=newname) aparm.positional = self.is_positional if self.is_positional: if oldcl.upper() == "STDOUT": aparm.positional = 9999999 aparm.command_line_override = "> $%s" % newname else: aparm.positional = int(oldcl) aparm.command_line_override = "$%s" % newname self.toutputs.append(aparm) ld = None if test.strip() > "": if test.startswith("diff"): c = "diff" ld = 0 if test.split(":")[1].isdigit: ld = int(test.split(":")[1]) tp = gxtp.TestOutput( name=newname, value="%s_sample" % newname, compare=c, lines_diff=ld, ) elif test.startswith("sim_size"): c = "sim_size" tn = test.split(":")[1].strip() if tn > "": if "." in tn: delta = None delta_frac = min(1.0, float(tn)) else: delta = int(tn) delta_frac = None tp = gxtp.TestOutput( name=newname, value="%s_sample" % newname, compare=c, delta=delta, delta_frac=delta_frac, ) else: c = test tp = gxtp.TestOutput( name=newname, value="%s_sample" % newname, compare=c, ) self.testparam.append(tp) for p in self.infiles: newname = p["infilename"] newfmt = p["format"] ndash = self.getNdash(newname) reps = p.get("repeat", "0") == "1" if not len(p["label"]) > 0: alab = p["CL"] else: alab = p["label"] aninput = gxtp.DataParam( newname, optional=False, label=alab, help=p["help"], format=newfmt, multiple=False, num_dashes=ndash, ) aninput.positional = self.is_positional if self.is_positional: if p["origCL"].upper() == "STDIN": aninput.positional = 9999998 aninput.command_line_override = "> $%s" % newname else: aninput.positional = int(p["origCL"]) aninput.command_line_override = "$%s" % newname if reps: repe = gxtp.Repeat(name=f"R_{newname}", title=f"Add as many {alab} as needed") repe.append(aninput) self.tinputs.append(repe) tparm = gxtp.TestRepeat(name=f"R_{newname}") tparm2 = gxtp.TestParam(newname, value="%s_sample" % newname) tparm.append(tparm2) self.testparam.append(tparm) else: self.tinputs.append(aninput) tparm = gxtp.TestParam(newname, value="%s_sample" % newname) self.testparam.append(tparm) for p in self.addpar: newname = p["name"] newval = p["value"] newlabel = p["label"] newhelp = p["help"] newtype = p["type"] newcl = p["CL"] oldcl = p["origCL"] reps = p["repeat"] == "1" if not len(newlabel) > 0: newlabel = newname ndash = self.getNdash(newname) if newtype == "text": aparm = gxtp.TextParam( newname, label=newlabel, help=newhelp, value=newval, num_dashes=ndash, ) elif newtype == "integer": aparm = gxtp.IntegerParam( newname, label=newlabel, help=newhelp, value=newval, num_dashes=ndash, ) elif newtype == "float": aparm = gxtp.FloatParam( newname, label=newlabel, help=newhelp, value=newval, num_dashes=ndash, ) elif newtype == "boolean": aparm = gxtp.BooleanParam( newname, label=newlabel, help=newhelp, value=newval, num_dashes=ndash, ) else: raise ValueError('Unrecognised parameter type "%s" for\ additional parameter %s in makeXML' % (newtype, newname)) aparm.positional = self.is_positional if self.is_positional: aparm.positional = int(oldcl) if reps: repe = gxtp.Repeat(name=f"R_{newname}", title=f"Add as many {newlabel} as needed") repe.append(aparm) self.tinputs.append(repe) tparm = gxtp.TestRepeat(name=f"R_{newname}") tparm2 = gxtp.TestParam(newname, value=newval) tparm.append(tparm2) self.testparam.append(tparm) else: self.tinputs.append(aparm) tparm = gxtp.TestParam(newname, value=newval) self.testparam.append(tparm) for p in self.selpar: newname = p["name"] newval = p["value"] newlabel = p["label"] newhelp = p["help"] newtype = p["type"] newcl = p["CL"] if not len(newlabel) > 0: newlabel = newname ndash = self.getNdash(newname) if newtype == "selecttext": newtext = p["texts"] aparm = gxtp.SelectParam( newname, label=newlabel, help=newhelp, num_dashes=ndash, ) for i in range(len(newval)): anopt = gxtp.SelectOption( value=newval[i], text=newtext[i], ) aparm.append(anopt) aparm.positional = self.is_positional if self.is_positional: aparm.positional = int(newcl) self.tinputs.append(aparm) tparm = gxtp.TestParam(newname, value=newval) self.testparam.append(tparm) else: raise ValueError('Unrecognised parameter type "%s" for\ selecttext parameter %s in makeXML' % (newtype, newname)) for p in self.collections: newkind = p["kind"] newname = p["name"] newlabel = p["label"] newdisc = p["discover"] collect = gxtp.OutputCollection(newname, label=newlabel, type=newkind) disc = gxtp.DiscoverDatasets(pattern=newdisc, directory=f"{newname}", visible="false") collect.append(disc) self.toutputs.append(collect) try: tparm = gxtp.TestOutputCollection( newname) # broken until PR merged. self.testparam.append(tparm) except Exception: print( "#### WARNING: Galaxyxml version does not have the PR merged yet - tests for collections must be over-ridden until then!" )
def doXMLparam(self): """flake8 made me do this...""" for p in self.outfiles: newname = p["name"] newfmt = p["format"] newcl = p["CL"] test = p["test"] oldcl = p["origCL"] test = test.strip() ndash = self.getNdash(newcl) aparm = gxtp.OutputData(name=newname, format=newfmt, num_dashes=ndash, label=newname) aparm.positional = self.is_positional if self.is_positional: if oldcl.upper() == "STDOUT": aparm.positional = 9999999 aparm.command_line_override = "> $%s" % newname else: aparm.positional = int(oldcl) aparm.command_line_override = "$%s" % newname self.toutputs.append(aparm) ld = None if test.strip() > "": if test.startswith("diff"): c = "diff" ld = 0 if test.split(":")[1].isdigit: ld = int(test.split(":")[1]) tp = gxtp.TestOutput( name=newname, value="%s_sample" % newname, compare=c, lines_diff=ld, ) elif test.startswith("sim_size"): c = "sim_size" tn = test.split(":")[1].strip() if tn > "": if "." in tn: delta = None delta_frac = min(1.0, float(tn)) else: delta = int(tn) delta_frac = None tp = gxtp.TestOutput( name=newname, value="%s_sample" % newname, compare=c, delta=delta, delta_frac=delta_frac, ) else: c = test tp = gxtp.TestOutput( name=newname, value="%s_sample" % newname, compare=c, ) self.testparam.append(tp) for p in self.infiles: newname = p["infilename"] newfmt = p["format"] ndash = self.getNdash(newname) if not len(p["label"]) > 0: alab = p["CL"] else: alab = p["label"] aninput = gxtp.DataParam( newname, optional=False, label=alab, help=p["help"], format=newfmt, multiple=False, num_dashes=ndash, ) aninput.positional = self.is_positional if self.is_positional: if p["origCL"].upper() == "STDIN": aparm.positional = 9999998 aparm.command_line_override = "> $%s" % newname else: aparm.positional = int(p["origCL"]) aparm.command_line_override = "$%s" % newname self.tinputs.append(aninput) tparm = gxtp.TestParam(name=newname, value="%s_sample" % newname) self.testparam.append(tparm) for p in self.addpar: newname = p["name"] newval = p["value"] newlabel = p["label"] newhelp = p["help"] newtype = p["type"] newcl = p["CL"] oldcl = p["origCL"] if not len(newlabel) > 0: newlabel = newname ndash = self.getNdash(newname) if newtype == "text": aparm = gxtp.TextParam( newname, label=newlabel, help=newhelp, value=newval, num_dashes=ndash, ) elif newtype == "integer": aparm = gxtp.IntegerParam( newname, label=newname, help=newhelp, value=newval, num_dashes=ndash, ) elif newtype == "float": aparm = gxtp.FloatParam( newname, label=newname, help=newhelp, value=newval, num_dashes=ndash, ) elif newtype == "boolean": aparm = gxtp.BooleanParam( newname, label=newname, help=newhelp, value=newval, num_dashes=ndash, ) else: raise ValueError('Unrecognised parameter type "%s" for\ additional parameter %s in makeXML' % (newtype, newname)) aparm.positional = self.is_positional if self.is_positional: aparm.positional = int(oldcl) self.tinputs.append(aparm) tparm = gxtp.TestParam(newname, value=newval) self.testparam.append(tparm) for p in self.selpar: newname = p["name"] newval = p["value"] newlabel = p["label"] newhelp = p["help"] newtype = p["type"] newcl = p["CL"] if not len(newlabel) > 0: newlabel = newname ndash = self.getNdash(newname) if newtype == "selecttext": newtext = p["texts"] aparm = gxtp.SelectParam( newname, label=newlabel, help=newhelp, num_dashes=ndash, ) for i in range(len(newval)): anopt = gxtp.SelectOption( value=newval[i], text=newtext[i], ) aparm.append(anopt) aparm.positional = self.is_positional if self.is_positional: aparm.positional = int(newcl) self.tinputs.append(aparm) tparm = gxtp.TestParam(newname, value=newval) self.testparam.append(tparm) else: raise ValueError('Unrecognised parameter type "%s" for\ selecttext parameter %s in makeXML' % (newtype, newname)) for p in self.collections: newkind = p["kind"] newname = p["name"] newlabel = p["label"] newdisc = p["discover"] collect = gxtp.OutputCollection(newname, label=newlabel, type=newkind) disc = gxtp.DiscoverDatasets(pattern=newdisc, directory=f"{newname}", visible="false") collect.append(disc) self.toutputs.append(collect) tparm = gxtp.TestOutput(newname, ftype="pdf") self.testparam.append(tparm)