Repository 'tool_factory_2'
hg clone https://toolshed.g2.bx.psu.edu/repos/fubar/tool_factory_2

Changeset 23:ba407b5edf01 (2015-03-02)
Previous changeset 22:4e3aa95ed3ac (2015-03-02) Next changeset 24:1a4d3923aa9f (2015-03-02)
Commit message:
Deleted selected files
removed:
rgToolFactory.py
rgToolFactory.xml
b
diff -r 4e3aa95ed3ac -r ba407b5edf01 rgToolFactory.py
--- a/rgToolFactory.py Mon Mar 02 05:14:05 2015 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
b'@@ -1,738 +0,0 @@\n-# rgToolFactory.py\n-# see https://bitbucket.org/fubar/galaxytoolfactory/wiki/Home\n-# \n-# copyright ross lazarus (ross stop lazarus at gmail stop com) May 2012\n-# \n-# all rights reserved\n-# Licensed under the LGPL\n-# suggestions for improvement and bug fixes welcome at https://bitbucket.org/fubar/galaxytoolfactory/wiki/Home\n-#\n-# August 2014 \n-# merged John Chilton\'s citation addition and ideas from Marius van den Beek to enable arbitrary\n-# data types for input and output - thanks!\n-#\n-# march 2014\n-# had to remove dependencies because cross toolshed dependencies are not possible - can\'t pre-specify a toolshed url for graphicsmagick and ghostscript\n-# grrrrr - night before a demo\n-# added dependencies to a tool_dependencies.xml if html page generated so generated tool is properly portable\n-#\n-# added ghostscript and graphicsmagick as dependencies \n-# fixed a wierd problem where gs was trying to use the new_files_path from universe (database/tmp) as ./database/tmp\n-# errors ensued\n-#\n-# august 2013\n-# found a problem with GS if $TMP or $TEMP missing - now inject /tmp and warn\n-#\n-# july 2013\n-# added ability to combine images and individual log files into html output\n-# just make sure there\'s a log file foo.log and it will be output\n-# together with all images named like "foo_*.pdf\n-# otherwise old format for html\n-#\n-# January 2013\n-# problem pointed out by Carlos Borroto\n-# added escaping for <>$ - thought I did that ages ago...\n-#\n-# August 11 2012 \n-# changed to use shell=False and cl as a sequence\n-\n-# This is a Galaxy tool factory for simple scripts in python, R or whatever ails ye.\n-# It also serves as the wrapper for the new tool.\n-# \n-# you paste and run your script\n-# Only works for simple scripts that read one input from the history.\n-# Optionally can write one new history dataset,\n-# and optionally collect any number of outputs into links on an autogenerated HTML page.\n-\n-# DO NOT install on a public or important site - please.\n-\n-# installed generated tools are fine if the script is safe.\n-# They just run normally and their user cannot do anything unusually insecure\n-# but please, practice safe toolshed.\n-# Read the fucking code before you install any tool \n-# especially this one\n-\n-# After you get the script working on some test data, you can\n-# optionally generate a toolshed compatible gzip file\n-# containing your script safely wrapped as an ordinary Galaxy script in your local toolshed for\n-# safe and largely automated installation in a production Galaxy.\n-\n-# If you opt for an HTML output, you get all the script outputs arranged\n-# as a single Html history item - all output files are linked, thumbnails for all the pdfs.\n-# Ugly but really inexpensive.\n-# \n-# Patches appreciated please. \n-#\n-#\n-# long route to June 2012 product\n-# Behold the awesome power of Galaxy and the toolshed with the tool factory to bind them\n-# derived from an integrated script model  \n-# called rgBaseScriptWrapper.py\n-# Note to the unwary:\n-#   This tool allows arbitrary scripting on your Galaxy as the Galaxy user\n-#   There is nothing stopping a malicious user doing whatever they choose\n-#   Extremely dangerous!!\n-#   Totally insecure. So, trusted users only\n-#\n-# preferred model is a developer using their throw away workstation instance - ie a private site.\n-# no real risk. The universe_wsgi.ini admin_users string is checked - only admin users are permitted to run this tool.\n-#\n-\n-import sys \n-import shutil \n-import subprocess \n-import os \n-import time \n-import tempfile \n-import optparse\n-import tarfile\n-import re\n-import shutil\n-import math\n-\n-progname = os.path.split(sys.argv[0])[1] \n-myversion = \'V001.1 March 2014\' \n-verbose = False \n-debug = False\n-toolFactoryURL = \'https://bitbucket.org/fubar/galaxytoolfactory\'\n-\n-# if we do html we need these dependencies specified in a tool_dependencies.xml file and referred to in the generated\n-# tool xml\n-toolhtmldepskel = """<?xml version="1.0"?>\n-<tool_dependency>\n-    <'..b'.interpreter)\n-        html.append(galhtmlpostfix)\n-        htmlf = file(self.opts.output_html,\'w\')\n-        htmlf.write(\'\\n\'.join(html))\n-        htmlf.write(\'\\n\')\n-        htmlf.close()\n-        self.html = html\n-\n-\n-    def run(self):\n-        """\n-        scripts must be small enough not to fill the pipe!\n-        """\n-        if self.treatbashSpecial and self.opts.interpreter in [\'bash\',\'sh\']:\n-          retval = self.runBash()\n-        else:\n-            if self.opts.output_dir:\n-                ste = open(self.elog,\'a\')\n-                sto = open(self.tlog,\'a\')\n-                sto.write(\'## Toolfactory generated command line = %s\\n\' % \' \'.join(self.cl))\n-                sto.flush()\n-                p = subprocess.Popen(self.cl,shell=False,stdout=sto,stderr=ste,stdin=subprocess.PIPE,cwd=self.opts.output_dir)\n-            else:\n-                p = subprocess.Popen(self.cl,shell=False,stdin=subprocess.PIPE)\n-            p.stdin.write(self.script)\n-            p.stdin.close()\n-            retval = p.wait()\n-            if self.opts.output_dir:\n-                sto.close()\n-                ste.close()\n-                err = open(self.elog,\'r\').readlines()\n-                if retval <> 0 and err: # problem\n-                    print >> sys.stderr,err\n-            if self.opts.make_HTML:\n-                self.makeHtml()\n-        return retval\n-\n-    def runBash(self):\n-        """\n-        cannot use - for bash so use self.sfile\n-        """\n-        if self.opts.output_dir:\n-            s = \'## Toolfactory generated command line = %s\\n\' % \' \'.join(self.cl)\n-            sto = open(self.tlog,\'w\')\n-            sto.write(s)\n-            sto.flush()\n-            p = subprocess.Popen(self.cl,shell=False,stdout=sto,stderr=sto,cwd=self.opts.output_dir)\n-        else:\n-            p = subprocess.Popen(self.cl,shell=False)            \n-        retval = p.wait()\n-        if self.opts.output_dir:\n-            sto.close()\n-        if self.opts.make_HTML:\n-            self.makeHtml()\n-        return retval\n-  \n-\n-def main():\n-    u = """\n-    This is a Galaxy wrapper. It expects to be called by a special purpose tool.xml as:\n-    <command interpreter="python">rgBaseScriptWrapper.py --script_path "$scriptPath" --tool_name "foo" --interpreter "Rscript"\n-    </command>\n-    """\n-    op = optparse.OptionParser()\n-    a = op.add_option\n-    a(\'--script_path\',default=None)\n-    a(\'--tool_name\',default=None)\n-    a(\'--interpreter\',default=None)\n-    a(\'--output_dir\',default=\'./\')\n-    a(\'--output_html\',default=None)\n-    a(\'--input_tab\',default="None")\n-    a(\'--input_formats\',default="tabular,text")\n-    a(\'--output_tab\',default="None")\n-    a(\'--output_format\',default="tabular")\n-    a(\'--user_email\',default=\'Unknown\')\n-    a(\'--bad_user\',default=None)\n-    a(\'--make_Tool\',default=None)\n-    a(\'--make_HTML\',default=None)\n-    a(\'--help_text\',default=None)\n-    a(\'--citations\',default=None)\n-    a(\'--tool_desc\',default=None)\n-    a(\'--new_tool\',default=None)\n-    a(\'--tool_version\',default=None)\n-    a(\'--include_dependencies\',default=None)    \n-    opts, args = op.parse_args()\n-    assert not opts.bad_user,\'UNAUTHORISED: %s is NOT authorized to use this tool until Galaxy admin adds %s to admin_users in universe_wsgi.ini\' % (opts.bad_user,opts.bad_user)\n-    assert opts.tool_name,\'## Tool Factory expects a tool name - eg --tool_name=DESeq\'\n-    assert opts.interpreter,\'## Tool Factory wrapper expects an interpreter - eg --interpreter=Rscript\'\n-    assert os.path.isfile(opts.script_path),\'## Tool Factory wrapper expects a script path - eg --script_path=foo.R\'\n-    if opts.output_dir:\n-        try:\n-            os.makedirs(opts.output_dir)\n-        except:\n-            pass\n-    r = ScriptRunner(opts)\n-    if opts.make_Tool:\n-        retcode = r.makeTooltar()\n-    else:\n-        retcode = r.run()\n-    os.unlink(r.sfile)\n-    if retcode:\n-        sys.exit(retcode) # indicate failure to job runner\n-\n-\n-if __name__ == "__main__":\n-    main()\n-\n-\n'
b
diff -r 4e3aa95ed3ac -r ba407b5edf01 rgToolFactory.xml
--- a/rgToolFactory.xml Mon Mar 02 05:14:05 2015 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
b'@@ -1,360 +0,0 @@\n-<tool id="rgTF" name="Tool Factory" version="1.12">\n-  <description>Makes scripts into tools</description>\n-   <requirements>\n-      <requirement type="package" version="9.10">ghostscript</requirement>\n-      <requirement type="package" version="1.3.20">graphicsmagick</requirement>\n-  </requirements>\n-  <command interpreter="python">\n-#if ( $__user_email__ not in $__admin_users__ ):\n-     rgToolFactory.py --bad_user $__user_email__\n-#else:\n-    rgToolFactory.py --script_path "$runme" --interpreter "$interpreter" \n-     --tool_name "$tool_name"  --user_email "$__user_email__"\n-    #if str($make_TAB)=="yes":\n-       --output_tab "$tab_file"\n-       --output_format "$output_format"\n-    #end if\n-    #if str($makeMode.make_Tool) == "yes":\n-      --make_Tool "yes"\n-      --tool_desc "$makeMode.tool_desc"\n-      --tool_version "$makeMode.tool_version"\n-      --new_tool "$new_tool"\n-      --help_text "$helpme"\n-      --citations "$citeme"\n-      --include_dependencies "yes"\n-    #end if\n-\n-    #if str($make_HTML)=="yes":\n-        --output_dir "$html_file.files_path" --output_html "$html_file" --make_HTML "yes"\n-    #else:\n-       --output_dir "."\n-    #end if\n-    #if str($input1) != \'None\':\n-       --input_tab "$input1"\n-       --input_formats "$input_formats"\n-    #end if\n-#end if \n-  </command>\n-  <inputs>\n-    <param name="input1"  type="data"  label="Select an input file from your history" optional="true" size="120"\n-       help="Most scripts will need an input - your script MUST be ready for whatever format you choose"/>\n-    <param name="input_formats" type="select" multiple="true" label="Select the datatype(s) that your tool/script accepts as input"\n-    help="If your datatype is not listed here, it has to be added in galaxy\'s datatypes_conf.xml">\n-     <options from_parameter="tool.app.datatypes_registry.upload_file_formats">\n-        <column name="value" index="0"/>\n-     </options>\n-    </param>\n-    <param name="tool_name" type="text" value="My dynamic script"   label="New tool ID and title for outputs" size="60"\n-         help="This will become the toolshed repository name so please choose thoughtfully to avoid namespace clashes with other tool writers">\n-        <sanitizer invalid_char="">\n-            <valid initial="string.letters,string.digits"/>\n-        </sanitizer>\n-    </param>\n-    <conditional name="makeMode">\n-        <param name="make_Tool" type="select" label="Create a tar.gz file ready for local toolshed entry" help="Ready to deploy securely!" size="60">\n-        <option value="yes">Generate a Galaxy ToolShed compatible toolshed.gz</option>\n-        <option value="" selected="true">No. Just run the script please</option>\n-        </param>\n-        <when value = "yes">\n-            <param name="tool_version" label="Tool Version - bump this to warn users trying to redo old analyses" type="text" value="0.01"\n-            help="If you change your script and regenerate the \'same\' tool, you should inform Galaxy (and users) by changing (bumping is traditional) this number"/>\n-            <param name="tool_desc" label="Tool Description" type="text" value="" size="40" \n-             help="Supply a brief tool description for the Galaxy tool menu entry (optional - appears after the tool name)" />\n-            <param name="help_text" label="Tool form documentation and help text for users" type="text" area="true" \n-             size="8x120" value="**What it Does**" \n-             help="Supply the brief user documentation to appear on the new tool form as reStructured text - http://docutils.sourceforge.net/docs/ref/rst/restructuredtext.html" >           \n-                <sanitizer>\n-                    <valid initial="string.printable"/>\n-                    <mapping initial="none"/>\n-                </sanitizer>\n-            </param>\n-            <param name="include_deps" type="select" label="Include ghostscript and graphicsmagick dependencies in generated tool" size="60"\n-            help="If an H'..b'input to be specified in the code for the\n-given input file type(s) specified when the tool is generated ::\n-\n- # use p.adjust - assumes a HEADER row and column 1 - please fix for any real use\n- column = 1 # adjust if necessary for some other kind of input\n- ourargs = commandArgs(TRUE)\n- inf = ourargs[1]\n- outf = ourargs[2]\n- inp = read.table(inf,head=T,row.names=NULL,sep=\'\\t\')\n- p = inp[,column]\n- q = p.adjust(p,method=\'BH\')\n- outp = cbind(inp,\'BH Adjusted p-value\'=q)\n- write.table(outp,outf, quote=FALSE, sep="\\t",row.names=F,col.names=T) \n-\n-\n-A demonstration Rscript example takes no input file but generates some random data based pdf images\n-You must make sure the option to create an HTML output file is\n-turned on for this to work. Images (pdf) are linked via thumbnails and\n-all files have a link on the resulting HTML page::\n-\n- # note this script takes NO input or output because it generates random data\n- for (i in 1:10) {\n-    foo = runif(100)\n-    bar = rnorm(100)\n-    bar = foo + 0.05*bar\n-    pdf(paste(\'yet\',i,"anotherplot.pdf",sep=\'_\'))\n-    plot(foo,bar,main=paste("Foo by Bar plot #",i),col="maroon", pch=3,cex=0.6)\n-    dev.off()\n-    foo = data.frame(a=runif(100),b=runif(100),c=runif(100),d=runif(100),e=runif(100),f=runif(100))\n-    bar = as.matrix(foo)\n-    pdf(paste(\'yet\',i,"anotherheatmap.pdf",sep=\'_\'))\n-    heatmap(bar,main=\'Random Heatmap\')\n-    dev.off()\n- }\n-\n-A slight variation taking an input tabular file from which we read the first number as nreps::\n-\n- # note this script takes a single parameter\n- # number of replicates\n- ourargs = commandArgs(TRUE)\n- infname = ourargs[1]\n- nreps = read.table(infname,head=F)\n- nreps = unlist(nreps)[1]\n- nreps = max(c(1,nreps))\n- nreps = min(c(20,nreps))\n- print(paste("Using nreps=",nreps))\n- for (i in 1:nreps) {\n-   foo = runif(100)\n-   bar = rnorm(100)\n-   bar = foo + 0.2*bar\n-   pdf(paste("yet",i,"anotherplot.pdf",sep="_"))\n-   plot(foo,bar,main=paste("Foo by Bar plot ",i),col="maroon", pch=3,cex=0.6)\n-   dev.off()\n-   foo = data.frame(a=runif(100),b=runif(100),c=runif(100),d=runif(100),e=runif(100),f=runif(100))\n-   bar = as.matrix(foo)\n-   pdf(paste("yet",i,"anotherheatmap.pdf",sep="_"))\n-   heatmap(bar,main="Random Heatmap")\n-   dev.off()\n- }\n-\n-A Python example that reverses each row of a tabular file (you\'ll need to remove the leading spaces \n-for this to work if cut and pasted into the script box)::\n-\n- # reverse order of columns in a tabular file\n- import sys\n- inp = sys.argv[1]\n- outp = sys.argv[2]\n- i = open(inp,\'r\')\n- o = open(outp,\'w\')\n- for row in i:\n-     rs = row.rstrip().split(\'\\t\')\n-     rs.reverse()\n-     o.write(\'\\t\'.join(rs))\n-     o.write(\'\\n\')\n- i.close()\n- o.close()\n- \n-A trivial shell script example to show that it works::\n-\n- #!/bin/bash\n- INF=$1\n- OUTF=$2\n- cut -c2,4,6,8,10,12 $INF > $OUTF \n-\n-A trivial perl script example to show that even perl works::\n-\n- #\n- # change all occurances of a string in a file to another string\n- #\n- $oldfile = $ARGV[0];\n- $newfile = $ARGV[1];\n- $old = "gene";\n- $new = "foo";\n- open(OF, $oldfile);\n- open(NF, ">$newfile");\n- # read in each line of the file\n- while ($line = <OF>) {\n-    $line =~ s/$old/$new/;\n-    print NF $line;\n- }\n- close(OF);\n- close(NF);\n-\n-]]>\n-\n-\n-**Citation**\n-\n-\n-Paper_ :\n-\n-Creating re-usable tools from scripts: The Galaxy Tool Factory\n-Ross Lazarus; Antony Kaspi; Mark Ziemann; The Galaxy Team\n-Bioinformatics 2012; doi: 10.1093/bioinformatics/bts573\n-\n-\n-**Licensing** \n-\n-Copyright Ross Lazarus (ross period lazarus at gmail period com) May 2012\n-All rights reserved.\n-Licensed under the LGPL_\n-\n-.. _LGPL: http://www.gnu.org/copyleft/lesser.html\n-.. _GTF:  https://bitbucket.org/fubar/galaxytoolfactory\n-.. _GTFI:  https://bitbucket.org/fubar/galaxytoolfactory/issues\n-.. _Paper: http://bioinformatics.oxfordjournals.org/cgi/reprint/bts573?ijkey=lczQh1sWrMwdYWJ&amp;keytype=ref\n-\n-\n-</help>\n-<citations>\n-    <citation type="doi">10.1093/bioinformatics/bts573</citation>\n-</citations>\n-</tool>\n-\n-\n'