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&keytype=ref\n-\n-\n-</help>\n-<citations>\n- <citation type="doi">10.1093/bioinformatics/bts573</citation>\n-</citations>\n-</tool>\n-\n-\n' |