diff toolfactory/toolfactory.xml @ 1:0183cad9d13b draft

planemo upload
author fubar
date Thu, 22 Feb 2024 10:48:01 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolfactory/toolfactory.xml	Thu Feb 22 10:48:01 2024 +0000
@@ -0,0 +1,655 @@
+<tool id="toolfactory" name="toolfactory" version="3.0" profile="22.05" >
+  <description>Scripts into tools v3.0</description>
+  <macros>
+      <xml name="dataColumn">
+            <param name="param_dataref" type="text" value="" label="Input data name to use as source of data column names"/>
+            <param name="param_multiple" type="boolean" truevalue="1" falsevalue="" value = ""
+                label="Allow user to make multiple selections" help="default is single selection"/>
+            <param name="param_value" type="text" value="" label="Default column value">
+          </param>
+      </xml>
+      <xml name="singleText">
+            <param name="param_value" type="text" value="" label="Default text value">
+              <sanitizer invalid_char="_">
+                <valid initial="string.printable" >
+                </valid>
+              </sanitizer>
+           </param>
+      </xml>
+      <xml name="singleInt">
+            <param name="param_value" type="integer" value="" label="Default integer value" >
+          </param>
+      </xml>
+      <xml name="singleFloat">
+            <param name="param_value" type="float" value="" label="Default value">
+          </param>
+      </xml>
+     <xml name="singleBoolean">
+            <param name="param_value" type="boolean" value="" label="Default value" />
+            <param name="truevalue" type="text" value="True" label="Command line value when True" />
+            <param name="falsevalue" type="boolean" value="True" label="Command line value when False" />
+      </xml>
+      <xml name="selectText">
+          <repeat name="selectTexts" title="Add each option to be presented" min="2" default="2"
+             help="Each text added here will also have  a value to be emitted on the command line when the text is chosen">
+            <param name="select_text" type="text" value="" label="Explanatory text the user will see for this choice" >
+              <sanitizer invalid_char="_">
+                <valid initial="string.printable" >
+                </valid>
+              </sanitizer>
+          </param>
+          <param name="select_value" type="text" value="" label="Value for the command line when the user selects this option">
+              <sanitizer invalid_char="_">
+                <valid initial="string.printable" >
+                </valid>
+              </sanitizer>
+          </param>
+          </repeat>
+      </xml>
+      <xml name="selectFlag">
+          <repeat name="selectFlags" title="Add mutually exclusive flag selection" min="2" default="2"
+             help="Supply the corresponding mutually exclusive flag as it should appear on the command line if each option is selected">
+            <param name="select_text" type="text" value="" label="Explanatory text the user will see for this choice" >
+          </param>
+          <param name="select_value" type="text" value="" label="Value for the command line when the user selects this option"
+             help="Supply the corresponding mutually exclusive flag as it should appear on the command line if each option is selected">
+          </param>
+          </repeat>
+      </xml>
+     <xml name="tool_metadata">
+        <param name="tool_version" label="Tool Version - bump this to warn users trying to redo old analyses" type="text"
+            help="If you change your script and regenerate the 'same' tool, you should inform Galaxy (and users) by changing (bumping is traditional) this number"/>
+        <param name="tool_desc" label="Tool Synopsis" type="text" value=""
+            help="Supply a brief tool description for the Galaxy tool menu entry">
+         </param>
+         <param name="help_text" label="Tool form documentation and help text for users" type="text" area="true"
+            value="**What it Does**"
+             help="Supply user documentation to appear on the new tool form as reStructured text - http://docutils.sourceforge.net/docs/ref/rst/restructuredtext.html" >
+              <sanitizer>
+                <valid initial="string.printable" >
+                </valid>
+              </sanitizer>
+        </param>
+        <repeat name="citations" title="Citation">
+                <conditional name="citation_type">
+                    <param name="type" type="select" display="radio" label="Citation Type">
+                        <option value="doi">DOI</option>
+                        <option value="bibtex">BibTeX</option>
+                    </param>
+                    <when value="doi">
+                        <param name="doi" label="DOI" type="text"
+                            help="Supply a DOI (e.g. doi: 10.1111/j.1740-9713.2007.00258.x) to be cited when this tool is used in published research." >
+                           <sanitizer>
+                                <valid initial="string.printable" >
+                                </valid>
+                           </sanitizer>
+                        </param>
+                    </when>
+                    <when value="bibtex">
+                        <param name="bibtex" label="BibTex" type="text" area="true"
+                            help="Supply a BibTex entry that should be cited when this tool is used in published research." value="" >
+                            <sanitizer>
+                                <valid initial="string.printable" >
+                                </valid>
+                           </sanitizer>
+                        </param>
+                    </when>
+                </conditional>
+        </repeat>
+     </xml>
+     <xml name="io">
+     <section name="io" title="Input and output files" expanded="true">
+        <repeat name="history_inputs" title="Inputs" min="0"
+             help="Input data files to pass on the command line to the executable. USE SMALL SAMPLES for the new tool's test.
+             Prompts will form a history item selector as input for users of this new tool">
+            <param name="input_files" type="data" format="data" label="Select an input file from your history" multiple="true"
+               help="Note that multiple inputs can be selected if this input parameter will allow multiple selections"/>
+            <param name="input_formats" type="select" multiple="true" label="Select the datatype(s) that your tool/script accepts as input"
+              help="If your datatype is not listed here, it has to be added in galaxy's datatypes_conf.xml" value="tabular">
+               <options from_parameter="tool.app.datatypes_registry.upload_file_formats">
+                <column name="value" index="0"/>
+               </options>
+            </param>
+            <param name="input_label" type="text" value="" label="This will become the user prompt for the form so please make it informative" >
+            </param>
+            <param name="input_help" type="text" value="" label="This will become help text on the form." >
+            </param>
+            <param name="input_CL" type="text" label="Positional: ordinal integer. Argparse: argument name. STDIN if the executable/script expects it"
+              help="If you will pass positional parameters, enter the integer ordinal for this parameter. If Argparse style, '--' will be prepended or '-' if
+              single character">
+            </param>
+            <param name="input_required" type="select" label="Input mode - optional, required, repeated optional or 1 or more repeated required.">
+                <option value="required" selected="true">Required single input</option>
+                <option value="optional">Optional single input</option>
+                <option value="required1">Required. 1 or more repeats</option>
+                <option value="optional1">Optional. 1 or more repeats</option>
+            </param>
+        </repeat>
+        <repeat name="history_outputs" min="0" title="Outputs"
+             help="New history items output by the executable to appear in the user history after the tool runs. The name will become a history item for
+             users of the new tool you are making containing one of it's outputs">
+            <param name="history_name" type="text" label="Output Name" optional="false"
+              help="Name used for this output in history. No spaces. Digits and letters only please. Argparse should look for this name on the command line.">
+              <sanitizer invalid_char="_">
+                <valid initial="string.ascii_letters,string.digits" >
+                    <add value="_" />
+                </valid>
+              </sanitizer>
+            </param>
+            <param name="history_label" type="text" label="Output label. Allows template substitution"  value=""
+                help="Label used for this output - for example 'Plotlytabular $title on $input_tab.element_identifier' where variable templates are informative." >
+              <sanitizer>
+                <valid initial="string.printable" >
+                </valid>
+              </sanitizer>
+            </param>
+            <param name="history_format" type="select" multiple="false" label="Select the datatype for this output"
+              help="If your datatype is not listed here, it has to be added in galaxy's datatypes_conf.xml" value="tabular">
+               <options from_parameter="tool.app.datatypes_registry.upload_file_formats">
+                <column name="value" index="0"/>
+               </options>
+            </param>
+            <param name="history_CL" type="text"  label="Position"
+              help="Positional: ordinal integer or 'STDOUT' if '>' required. Ignored if argparse because output name is used.
+              If positional parameters, enter the integer ordinal expected for this parameter. If argparse, ignore unless STDOUT needed" value=""/>
+            <param name="history_test" type="text"  label="Output test criteria"
+              help="Pass/fail decision criterion for this output compared to test generation. Accepted variants include diff:100, sim_size:100 and sim_size:0.1"
+              value="diff:0"/>
+            <repeat name="history_whens" title="Optional change_format on this data" min="0" help="ADVANCED option only!! Easy to get wrong!">
+              <param name="history_when" type="text"  label="Add a 'when' expression for this output so format can depend on another parameter"
+              help="Supply the three key=value pairs needed as shown - no quotes: input=image_format value=small_png format=png" value="">
+              </param>
+            </repeat>
+        </repeat>
+        <repeat name="collection_outputs" title="Output Collections" min="0"
+             help="New history collections to appear in the user history after the tool runs. Hides outputs not needed for downstream tools such as
+              images and intermediate reports." default="0">
+            <param name="name" type="text" label="Name"
+              help="for new collection with all outputs not individually passed to history outputs. No spaces! Script MUST create and fill a directory
+              with the same name and the tool test MUST be overwritten - see the plotter example for hints">
+            </param>
+            <param name="kind" type="select" multiple="false" label="Select the kind of collection for this output"
+              help="">
+                <option value="list" selected="true">List</option>
+                <option value="paired">Paired</option>
+                <option value="list:paired">List of paired</option>
+            </param>
+            <param name="label"  type="text" label="Collection label. Allows template substitution"  value=""
+                help="Label used for this output - for example 'Plotlytabular $title on $input_tab.element_identifier' where variable templates are informative." >
+              <sanitizer>
+                <valid initial="string.printable" >
+                </valid>
+              </sanitizer>
+            </param>
+            <param name="discover" type="text"  label="Discover datasets expression" help="__name_and_ext__ should catch all filenames with extensions"
+            value="__name_and_ext__"/>
+        </repeat>
+
+        </section>
+     </xml>
+     <xml name="additparam">
+     <section name="addparam" title="Arguments" help="Executable or script settings passed on the command line other than I/O files" expanded="true">
+        <param name="edit_params" type="select" display="radio" label="Make these settings on the generated tool form user editable?"
+             help="If no, users will NOT be able to alter any additional parameters. If yes, these will appear on the tool form as text fields with no validation or sanitizing">
+            <option value="yes" selected="true">Yes, allow user to edit all additional parameters on the generated tool form</option>
+            <option value="no">No - use the fixed values for all additional parameters - no user editing</option>
+        </param>
+        <repeat name="additional_parameters" title="Command Line Parameters" min="0"
+             help="Command line settings for the user to pass to the executable. See examples below to see how these can be parsed by scripts in the various languages">
+          <param name="param_name" type="text" value="" label="Name for this parameter. Underscore, letters and digits only. No spaces allowed">
+            <sanitizer invalid_char="_">
+                <valid initial="string.ascii_letters,string.digits">
+                    <add value="_"/>
+                </valid>
+            </sanitizer>
+          </param>
+          <conditional name="ap_type">
+          <param name="param_type" type="select" label="Type for this parameter">
+            <option value="text" selected="true">Text string</option>
+            <option value="integer">Integer</option>
+            <option value="float">Float</option>
+            <option value="boolean">Boolean</option>
+            <option value="selecttext">Select text string</option>
+            <option value="selectflag">Select from a mutually exclusive list of command line flags to pass</option>
+            <option value="clflag">Flag - user can set. Only used for argparse parameter passing style</option>
+            <option value="datacolumn">Data column - user selects from an input tabular file column name/header values</option>
+          </param>
+          <when value = "text">
+              <expand macro="singleText" />
+          </when>
+          <when value = "integer">
+              <expand macro="singleInt" />
+          </when>
+          <when value = "float">
+              <expand macro="singleFloat" />
+          </when>
+          <when value = "boolean">
+              <expand macro="singleBoolean" />
+          </when>
+          <when value = "selecttext">
+              <expand macro="selectText" />
+          </when>
+          <when value = "selectflag">
+              <expand macro="selectFlag" />
+          </when>
+          <when value = "clflag">
+             <param name="param_value" type="select" value="notset">
+                    <option value='notset'>DO NOT set this flag</option>
+                    <option value='set'>SET this flag</option>
+             </param>
+          </when>
+          <when value = "datacolumn">
+              <expand macro="dataColumn" />
+          </when>
+          </conditional>
+          <param name="param_label" type="text" value="" label="Label for the form">
+              <sanitizer>
+                <valid initial="string.printable" >
+                </valid>
+              </sanitizer>
+          </param>
+          <param name="param_help" type="text" value="" label="Help for this parameter">
+              <sanitizer>
+                <valid initial="string.printable" >
+                </valid>
+              </sanitizer>
+          </param>
+          <param name="param_CL" type="text" label="Positional ordinal | argparse argument name"
+              help="Using positional parameters, enter the integer ordinal for this parameter on the command line. Using Argparse style,
+              '--' will be prepended on the CL" value="" />
+          <param name="param_CLprefixed" type="text" label="Override the generated default argparse name prefix if not empty - eg ----foo if needed"
+              help="Some targets like Planemo expect an unadorned action like 'test' before --galaxy_root." value="">
+              <sanitizer invalid_char="_">
+                <valid initial="string.printable" >
+                    <remove value="'" />
+                </valid>
+              </sanitizer>
+          </param>
+          <param name="param_repeat" type="boolean" checked="False" truevalue="1"  falsevalue="0"
+          label="Allow user to repeat this as many times as needed." />
+        </repeat>
+        </section>
+     </xml>
+  </macros>
+<requirements>
+     <requirement type="package" version="3.10.12">python</requirement>
+     <requirement type="package" version="0.5.3">galaxyxml</requirement>
+     <requirement type="package" version="1.2.0">bioblend</requirement>
+     <requirement type="package" version="0.75.20">planemo</requirement>
+     <requirement type="package" version="0.10.10">ephemeris</requirement>
+</requirements>
+
+<command detect_errors="exit_code"><![CDATA[
+#import os
+#set dev_env = os.environ.get('GALAXY_DEVELOPMENT_ENVIRONMENT', '0') == '1'
+#if not $__user_email__
+  #set useremail = 'admin@galaxy.this'
+#else
+  #set useremail = $__user_email__
+#end if
+#if not $dev_env and ( $__user_email__ not in $__admin_users__ )
+   python3 $__tool_directory__/toolfactory.py --bad_user $__user_email__
+#else
+      python3 $__tool_directory__/toolfactory.py
+    #if len(str($cl_options.cl_suffix)) > 0
+--cl_suffix "$clsuffix"
+    #end if
+    #if len(str($cl_options.cl_prefix)) > 0
+--cl_prefix "$clprefix"
+    #end if
+    #if len(str($cl_options.cl_override)) > 0
+--cl_override "$commandoverride"
+    #end if
+    #if len(str($cl_options.test_override)) > 0
+--test_override "$testoverride"
+    #end if
+    #if $deps.packages > "":
+        --packages "$deps.packages"
+    #end if
+    #if $deps.usescript.choosescript == "yes"
+--script_path "$runscript"
+--sysexe "$deps.usescript.scriptrunner"
+    #end if
+--tool_name "$tool_name"  --user_email "$useremail" --citations "$citeme"  --parampass "$io_param.ppass.parampass"
+--tool_desc "$tool_desc"
+--tool_version "$tool_version"
+--help_text "$helpme"
+    #if $io_param.ppass.parampass != '0'
+       #if str($io_param.ppass.addparam.edit_params) == "yes"
+--edit_additional_parameters
+       #end if
+       #for $apar in $io_param.ppass.addparam.additional_parameters
+          #if $apar.ap_type.param_type=="selecttext"
+--selecttext_parameters '{"name":"$apar.param_name", "label":"$apar.param_label", "help":"$apar.param_help",
+"type":"$apar.ap_type.param_type","CL":"$apar.param_CL","override":"$apar.param_CLprefixed","value": [
+         #for $i,$st in enumerate($apar.ap_type.selectTexts):
+           "$st.select_value"
+           #if ($i < (len($apar.ap_type.selectTexts)-1)):
+           ,
+           #end if
+         #end for
+         ], "texts": [
+         #for $i,$st in enumerate($apar.ap_type.selectTexts):
+         "$st.select_text"
+          #if ($i < (len($apar.ap_type.selectTexts)-1)):
+           ,
+           #end if
+
+         #end for
+         ]
+         }'
+        #else if $apar.ap_type.param_type=="selectflag"
+--selectflag_parameters '{"name":"$apar.param_name", "label":"$apar.param_label", "help":"$apar.param_help",
+"type":"$apar.ap_type.param_type","CL":"$apar.param_CL","override":"$apar.param_CLprefixed","value": [
+         #for $i,$st in enumerate($apar.ap_type.selectFlags):
+           "$st.select_value"
+           #if ($i < (len($apar.ap_type.selectFlags)-1)):
+           ,
+           #end if
+         #end for
+         ], "texts": [
+         #for $i,$st in enumerate($apar.ap_type.selectFlags):
+         "$st.select_text"
+          #if ($i < (len($apar.ap_type.selectFlags)-1)):
+           ,
+           #end if
+
+         #end for
+         ]
+         }'
+         #else if $apar.ap_type.param_type=="datacolumn"
+--additional_parameters '{"name": "$apar.param_name", "value": "$apar.ap_type.param_value", "label": "$apar.param_label", "help": "$apar.param_help",
+"type": "$apar.ap_type.param_type","CL": "$apar.param_CL","override": "$apar.param_CLprefixed", "repeat": "$apar.param_repeat", "multiple": "$apar.ap_type.param_multiple",
+ "dataref": "$apar.ap_type.param_dataref"}'
+         #else:
+--additional_parameters '{"name": "$apar.param_name", "value": "$apar.ap_type.param_value", "label": "$apar.param_label", "help": "$apar.param_help",
+"type": "$apar.ap_type.param_type","CL": "$apar.param_CL","override": "$apar.param_CLprefixed", "repeat": "$apar.param_repeat"}'
+         #end if
+       #end for
+    #end if
+    #for $intab in $io_param.ppass.io.history_inputs
+--input_files '{"name": "$intab.input_files", "CL": "$intab.input_CL", "format": "$intab.input_formats", "label": "$intab.input_label",
+"help": "$intab.input_help", "required": "$intab.input_required"}'
+    #end for
+    #for $otab in $io_param.ppass.io.history_outputs
+         #if str($otab.history_label) > ""
+    --output_files '{"name": "$otab.history_name", "format": "$otab.history_format", "CL": "$otab.history_CL", "test": "$otab.history_test", "label": "$otab.history_label"
+         #else
+    --output_files '{"name": "$otab.history_name", "format": "$otab.history_format", "CL": "$otab.history_CL", "test": "$otab.history_test"
+         #end if
+         #if $otab.history_whens
+         , "when": [
+            #for $i, $hw in enumerate($otab.history_whens)
+              "$hw.history_when"
+              #if ($i < (len($otab.history_whens)-1))
+           ,
+              #end if
+            #end for
+          ]
+          #end if
+     }'
+    #end for
+    #for $collect in $io_param.ppass.io.collection_outputs
+--collection '{"name": "$collect.name", "kind": "$collect.kind", "discover": "$collect.discover", "label": "$collect.label"}'
+    #end for
+--tfcollection 'toolgen'
+--tested_tool_out "$untested_tool"
+--nftest
+--galaxy_root "$__root_dir__"
+--toolfactory_dir "$__tool_directory__"
+    #if $cl_options.xtracond.needxtra == "yes"
+       #for $x in $cl_options.xtracond.xtra_files
+--xtra_file '{"fpath":"$x", "fname":"$x.element_identifier"}'
+      #end for
+    #end if
+#end if
+]]>
+</command>
+ <configfiles>
+  <configfile name="runscript">
+${deps.usescript.dynScript}
+ </configfile>
+ <configfile name="commandoverride">
+#if len(str($cl_options.cl_override).strip()) > 1:
+${cl_options.cl_override}
+#end if
+ </configfile>
+ <configfile name="testoverride">
+#if len(str($cl_options.test_override).strip()) > 1:
+${cl_options.test_override}
+#end if
+ </configfile>
+<configfile name="clprefix">
+#if len(str($cl_options.cl_prefix).strip()) > 1:
+${cl_options.cl_prefix}
+#end if
+ </configfile>
+ <configfile name="clsuffix">
+#if len(str($cl_options.cl_suffix).strip()) > 1:
+${cl_options.cl_suffix}
+#end if
+ </configfile>
+ <configfile name="helpme">
+${help_text}
+ </configfile>
+ <configfile name="citeme">
+
+#for $citation in $citations:
+    #if $citation.citation_type.type == "bibtex":
+        **ENTRY**bibtex
+        ${citation.citation_type.bibtex}
+    #else
+        **ENTRY**doi
+        ${citation.citation_type.doi}
+    #end if
+#end for
+
+ </configfile>
+  </configfiles>
+  <inputs>
+   <param name="tool_name" type="text" value="my_tool"   label="New tool ID and title for outputs"
+         help="Toolshed repository name so lower case, digits and underscores only. Choose thoughtfully to avoid namespace clashes with other tool writers.">
+        <sanitizer invalid_char="_">
+            <valid initial="string.ascii_lowercase,string.digits">
+                <add value="_"/>
+            </valid>
+        </sanitizer>
+    </param>
+
+    <section name="deps" title="Dependencies, optional script and script interpreter" expanded="true">
+
+    <param name="packages" type="text" value="" label="Conda dependencies as package name[:version, name:version...].
+    These will always be available when this tool executes" help="Use =[ver] or :[ver] for specific version - 'bwa=0.17.0'.
+    Default is latest. Will be used every time the tool is (re)run. Only Conda is currently supported"  />
+
+    <conditional name="usescript">
+        <param name="choosescript" type="select" display="radio" label="Supply a script for a dependency (e.g. python/R/bash) or a system executable such as Bash"
+        help = "For script interpreters like Python or bash, parameters and i/o specified below must match script's expectations - i
+        f you pass parameters, the script must deal with them">
+            <option value="no">No script required for this tool - just pass parameters on the command line to the first dependency listed above</option>
+            <option value="yes" selected="true">Yes, a script is ready to be pasted below</option>
+        </param>
+        <when value="no">
+            <param name="dynScript" type="hidden"  value="" />
+            <param name="scriptrunner" type="hidden"  value="" />
+        </when>
+        <when value="yes">
+            <param name="scriptrunner" type="text" value=""   label="Interpreter for the script - eg bash or python. Can be one of the dependencies named
+            above or a system executable" help="Scripts are interpreted by the executable named here. For conda r-base, 'Rscript --vanilla' or for
+            conda planemo, 'planemo test' for example">
+            </param>
+            <param name="dynScript" type="text" area="True" value="" label="Script for executable above to interpret. It can be one of the Conda dependency names"
+             help="Script must handle all i/o and parameters as specified below using the parameters and passing method chosen below">
+              <sanitizer>
+                 <valid initial="string.printable"/>
+              </sanitizer>
+             </param>
+        </when>
+    </conditional>
+    </section>
+    <section name="io_param" title="Data file input, output and settings forming the executable or script command line" expanded="true">
+    <conditional name="ppass">
+        <param name="parampass"  type="select" display="radio" label="Command line parameter passing method to use">
+            <option value="argparse" selected="true">Argparse: passed in the form of --clname value</option>
+            <option value="embed">Script has Cheetah templates for parameters embedded into the code</option>
+            <option value="embednfmod">Specialised embed with nf-core module pixie dust</option>
+            <option value="positional">Positional: Passed in the order of positional ordinals ...foo.bam bar.idx zot.xls</option>
+            <option value="0">Tool reads selected input file from STDIN and writes STDOUT with no parameters</option>
+        </param>
+        <when value="argparse">
+            <expand macro="io" />
+            <expand macro="additparam" />
+        </when>
+                <when value="embed">
+            <expand macro="io" />
+            <expand macro="additparam" />
+        </when>
+        <when value="embednfmod">
+            <expand macro="io" />
+            <expand macro="additparam" />
+        </when>
+        <when value="positional">
+            <expand macro="io" />
+            <expand macro="additparam" />
+        </when>
+        <when value="0">
+             <expand macro="io"/>
+        </when>
+    </conditional>
+    </section>
+    <section name="cl_options" title="ADVANCED DIY MANUAL REPLACEMENT OPTIONS: Test or command line prefix, suffix or DIY command line" expanded="false" >
+    <param name="cl_prefix" type="text"  area="True" value="" label="Prefix for generated command line. Useful for bash pre processing.
+    Use override below to replace completely"
+            help="';' separated bash commands can be used here for pre processing like renaming or copying datasets for the script -
+            added at start of autogenerated command line">
+            <sanitizer>
+                 <valid initial="string.printable" />
+            </sanitizer>
+    </param>
+    <param name="cl_suffix" type="text" area="True" value="" label="Suffix for generated command line. Useful for bash post processing.
+    Use override below to replace completely"
+            help="';' separated bash commands can be used here for post processing - added at end of autogenerated command line" >
+            <sanitizer>
+                 <valid initial="string.printable" />
+            </sanitizer>
+    </param>
+    <param name="cl_override" type="text" area="True" label="Optional. Human wrought command element override XML/template - e.g. for bwa"
+     help="For arbitrary and artfull command lines. All i/o and parameters must be passed. Leave blank unless needed. Not for the faint of heart" value="">
+      <sanitizer>
+         <valid initial="string.printable"/>
+      </sanitizer>
+     </param>
+    <param name="test_override" type="text" area="True" label="Optional. Human wrought test element override XML/template - e.g. for bwa"
+     help="For arbitrary and artfull scripts. Leave blank unless needed. Not for the faint of heart" value="">
+      <sanitizer>
+         <valid initial="string.printable" />
+      </sanitizer>
+    </param>
+    <conditional name="xtracond">
+        <param name="needxtra" type="select" display="radio" label="Specific files from the history must be available in the tool directory"
+        help = "If you need a java .jar file or special data file for your script to be able to access, upload it to the history and select it here">
+            <option value="no" selected="true">No special files need to be available in the tool directory for the script to use</option>
+            <option value="yes">Yes - some special files must be copied into the tool directory</option>
+        </param>
+        <when value="no">
+                <param name="xtra_files" type="hidden" value="" />
+        </when>
+        <when value="yes">
+            <param name="xtra_files" type="data" format="data" label="Select all files from your history to add to tool directory for the script to use" multiple="true"
+               help="If your script needs access to a .jar or other specific permanent resource, upload it before building, so you can select it here.
+               All those selected history items will be added to the tool directory. That path is available at execution as $__tool_directory__, for use in the command section.
+               These need to be expanded and used as parameters for the script where needed: $__tool_directory__/BlastTools.jar for example"/>
+        </when>
+    </conditional>
+    </section>
+    <expand macro="tool_metadata" />
+    <param name="useremail"  type="hidden" value="" />
+    <param name="script_path"  type="hidden" value="" />
+  </inputs>
+  <outputs>
+     <collection name="toolgen" type="list" label="${tool_name} generated components">
+      <discover_datasets pattern="__name_and_ext__" directory="toolgen" visible="false"/>
+    </collection>
+      <data name="untested_tool" format="tgz" label = "${tool_name}_toolshed_archive"/>
+  </outputs>
+  <tests>
+        <test>
+            <param name="useremail" value="admin.galaxy.here" />
+            <param name="input_files" value="input1_sample" />
+            <param name="input_CL" value="1" />
+            <param name="input_formats" value="txt" />
+            <param name="input_label" value="input" />
+            <param name="input_help" value="help" />
+            <param name="tool_name" value="pyrevpos" />
+            <param name="parampass" value="positional" />
+            <param name="tool_version" value="0.01" />
+            <param name="tool_desc" value="positional reverse" />
+            <param name="help_text" value="help text goes here" />
+            <param name="packages" value="python" />
+            <param name="history_name" value="output2" />
+            <param name="history_format" value="txt" />
+            <param name="history_CL" value="2" />
+            <param name="dynScript" value="import sys; inp = sys.argv[1]; outp = sys.argv[2]; inlist = open(inp,'r').readlines();
+            o = open(outp,'w'); rs = [''.join(list(reversed(x.rstrip()))) for x in inlist]; o.write('\n'.join(rs)); o.close()" />
+            <param name="choosescript" value="yes" />
+            <param name="script_path" value="$runscript" />
+            <output name="untested_tool" file="pyrevpos_not_tested.toolshed_sample"  ftype="tgz" compare="sim_size" delta_frac="0.1" />
+        </test>
+  </tests>
+  <help>
+
+**Details and attribution**
+(see GTF_)
+
+**Local Admins ONLY**
+Only users with emails in the local admin_user configuration setting in config/galaxy.yml can run this tool.
+
+**If you find a bug**
+Please raise an issue, or even better, submit a pull request fixing it, on the github repository GTF_
+
+**What it does**
+This tool contains an automated code generator, and creates normal, workflow compatible Galaxy tools as Toolshed ready archives. The
+new tool is immediately installed and available for use - a page refresh will be needed to see the new tool in the "Local" tool section.
+
+Generated tools can use existing Conda packages. These become requirements for optional scripts pasted into this tool form.
+Pasted scripts *cannot be adjusted* by the downstream user.
+
+Any number of parameters can be built into the new tool form for passing in to the script or executable at runtime.
+These can be editable by the downstream user or baked in.
+
+A new tarball compatible with any Galaxy toolshed is created in your history, including a test based on the supplied default parameter
+values and input history datasets.
+
+.. class:: warningmark
+
+**Note to system administrators**
+This tool offers *NO* built in protection against malicious scripts. It should only be installed on private/personnal Galaxy instances.
+Admin_users will have the power to do anything they want as the Galaxy user if you install this tool.
+
+.. class:: warningmark
+
+**Use on public servers**  is STRONGLY discouraged for obvious reasons
+
+The tools generated by this tool will run just as securely as any other normal installed Galaxy tool but like any other new tools,
+should always be checked carefully before installation. We recommend that you follow the good code hygiene practices associated with safe toolshed practices.
+
+
+Paper_
+
+*Licensing*
+
+Copyright Ross Lazarus May 2012
+Licensed under the MIT_ licence.
+
+.. _MIT: https://mit-license.org/
+.. _GTF:  https://github.com/fubar2/galaxy_tf_overlay
+.. _Paper: https://academic.oup.com/bioinformatics/article/28/23/3139/192853
+
+
+  </help>
+  <citations>
+    <citation type="doi">10.1093/bioinformatics/bts573</citation>
+  </citations>
+</tool>
+
+