Ejemplo n.º 1
0
 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)
Ejemplo n.º 2
0
    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()
Ejemplo n.º 3
0
    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()
Ejemplo n.º 4
0
    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)
Ejemplo n.º 5
0
 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!"
             )
Ejemplo n.º 6
0
 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)