annotate rgToolFactory.py @ 19:a87a262220a4

Adding proof of concept for optional output formats. Updated readme again
author ross lazarus ross.lazarus@gmail.com
date Tue, 05 Jun 2012 21:54:58 +1000
parents 8594478e8d2c
children 3f58115c6c5b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10
71f2ac0eee95 Updated tarball with some test material - still need code generated...
ross lazarus ross.lazarus@gmail.com
parents: 9
diff changeset
1 # rgToolFactory.py
19
a87a262220a4 Adding proof of concept for optional output formats.
ross lazarus ross.lazarus@gmail.com
parents: 15
diff changeset
2 # https://bitbucket.org/fubar/galaxytoolfactory/wiki/Home
a87a262220a4 Adding proof of concept for optional output formats.
ross lazarus ross.lazarus@gmail.com
parents: 15
diff changeset
3
a87a262220a4 Adding proof of concept for optional output formats.
ross lazarus ross.lazarus@gmail.com
parents: 15
diff changeset
4 # this is a tool factory for simple scripts in python, R or whatever ails ye.
a87a262220a4 Adding proof of concept for optional output formats.
ross lazarus ross.lazarus@gmail.com
parents: 15
diff changeset
5 # you paste and run your script
a87a262220a4 Adding proof of concept for optional output formats.
ross lazarus ross.lazarus@gmail.com
parents: 15
diff changeset
6 # Only works for simple scripts that read one input from the history.
a87a262220a4 Adding proof of concept for optional output formats.
ross lazarus ross.lazarus@gmail.com
parents: 15
diff changeset
7 # Optionally can write one new history dataset,
a87a262220a4 Adding proof of concept for optional output formats.
ross lazarus ross.lazarus@gmail.com
parents: 15
diff changeset
8 # and optionally collect any number of outputs into links on an autogenerated HTML page.
a87a262220a4 Adding proof of concept for optional output formats.
ross lazarus ross.lazarus@gmail.com
parents: 15
diff changeset
9
a87a262220a4 Adding proof of concept for optional output formats.
ross lazarus ross.lazarus@gmail.com
parents: 15
diff changeset
10 # DO NOT install on a public or important site - please.
a87a262220a4 Adding proof of concept for optional output formats.
ross lazarus ross.lazarus@gmail.com
parents: 15
diff changeset
11
a87a262220a4 Adding proof of concept for optional output formats.
ross lazarus ross.lazarus@gmail.com
parents: 15
diff changeset
12 # installed generated tools are fine if the script is safe.
a87a262220a4 Adding proof of concept for optional output formats.
ross lazarus ross.lazarus@gmail.com
parents: 15
diff changeset
13 # They just run normally and their user cannot do anything unusually insecure
a87a262220a4 Adding proof of concept for optional output formats.
ross lazarus ross.lazarus@gmail.com
parents: 15
diff changeset
14 # but please, practice safe toolshed.
a87a262220a4 Adding proof of concept for optional output formats.
ross lazarus ross.lazarus@gmail.com
parents: 15
diff changeset
15 # Read the fucking code before you install any tool
a87a262220a4 Adding proof of concept for optional output formats.
ross lazarus ross.lazarus@gmail.com
parents: 15
diff changeset
16 # especially this one
a87a262220a4 Adding proof of concept for optional output formats.
ross lazarus ross.lazarus@gmail.com
parents: 15
diff changeset
17
a87a262220a4 Adding proof of concept for optional output formats.
ross lazarus ross.lazarus@gmail.com
parents: 15
diff changeset
18 # After you get the script working on some test data, you can
a87a262220a4 Adding proof of concept for optional output formats.
ross lazarus ross.lazarus@gmail.com
parents: 15
diff changeset
19 # optionally generate a toolshed compatible gzip file
a87a262220a4 Adding proof of concept for optional output formats.
ross lazarus ross.lazarus@gmail.com
parents: 15
diff changeset
20 # containing your script safely wrapped as an ordinary Galaxy script in your local toolshed for
a87a262220a4 Adding proof of concept for optional output formats.
ross lazarus ross.lazarus@gmail.com
parents: 15
diff changeset
21 # safe and largely automated installation in a production Galaxy.
a87a262220a4 Adding proof of concept for optional output formats.
ross lazarus ross.lazarus@gmail.com
parents: 15
diff changeset
22
a87a262220a4 Adding proof of concept for optional output formats.
ross lazarus ross.lazarus@gmail.com
parents: 15
diff changeset
23 # If you opt for an HTML output, you get all the script outputs arranged
a87a262220a4 Adding proof of concept for optional output formats.
ross lazarus ross.lazarus@gmail.com
parents: 15
diff changeset
24 # as a single Html history item - all output files are linked, thumbnails for all the pdfs.
a87a262220a4 Adding proof of concept for optional output formats.
ross lazarus ross.lazarus@gmail.com
parents: 15
diff changeset
25 # Ugly but really inexpensive.
a87a262220a4 Adding proof of concept for optional output formats.
ross lazarus ross.lazarus@gmail.com
parents: 15
diff changeset
26 #
a87a262220a4 Adding proof of concept for optional output formats.
ross lazarus ross.lazarus@gmail.com
parents: 15
diff changeset
27 # Patches appreciated please.
10
71f2ac0eee95 Updated tarball with some test material - still need code generated...
ross lazarus ross.lazarus@gmail.com
parents: 9
diff changeset
28 #
19
a87a262220a4 Adding proof of concept for optional output formats.
ross lazarus ross.lazarus@gmail.com
parents: 15
diff changeset
29 #
a87a262220a4 Adding proof of concept for optional output formats.
ross lazarus ross.lazarus@gmail.com
parents: 15
diff changeset
30 # long route to June 2012 product
a87a262220a4 Adding proof of concept for optional output formats.
ross lazarus ross.lazarus@gmail.com
parents: 15
diff changeset
31 # Behold the awesome power of Galaxy and the toolshed with the tool factory binds to bind them
a87a262220a4 Adding proof of concept for optional output formats.
ross lazarus ross.lazarus@gmail.com
parents: 15
diff changeset
32 # derived from an integrated script model
a87a262220a4 Adding proof of concept for optional output formats.
ross lazarus ross.lazarus@gmail.com
parents: 15
diff changeset
33 # called rgBaseScriptWrapper.py
a87a262220a4 Adding proof of concept for optional output formats.
ross lazarus ross.lazarus@gmail.com
parents: 15
diff changeset
34 # Note to the unwary:
a87a262220a4 Adding proof of concept for optional output formats.
ross lazarus ross.lazarus@gmail.com
parents: 15
diff changeset
35 # This tool allows arbitrary scripting on your Galaxy as the Galaxy user
a87a262220a4 Adding proof of concept for optional output formats.
ross lazarus ross.lazarus@gmail.com
parents: 15
diff changeset
36 # There is nothing stopping a malicious user doing whatever they choose
a87a262220a4 Adding proof of concept for optional output formats.
ross lazarus ross.lazarus@gmail.com
parents: 15
diff changeset
37 # Extremely dangerous!!
a87a262220a4 Adding proof of concept for optional output formats.
ross lazarus ross.lazarus@gmail.com
parents: 15
diff changeset
38 # Totally insecure. So, trusted users only
a87a262220a4 Adding proof of concept for optional output formats.
ross lazarus ross.lazarus@gmail.com
parents: 15
diff changeset
39 #
a87a262220a4 Adding proof of concept for optional output formats.
ross lazarus ross.lazarus@gmail.com
parents: 15
diff changeset
40 # preferred model is a developer using their throw away workstation instance - ie a private site.
a87a262220a4 Adding proof of concept for optional output formats.
ross lazarus ross.lazarus@gmail.com
parents: 15
diff changeset
41 # no real risk.
a87a262220a4 Adding proof of concept for optional output formats.
ross lazarus ross.lazarus@gmail.com
parents: 15
diff changeset
42 # a list in the xml source file is searched for users permitted to run this tool.
a87a262220a4 Adding proof of concept for optional output formats.
ross lazarus ross.lazarus@gmail.com
parents: 15
diff changeset
43 # PUT some IDs in the list in the XML before you restart Galaxy to load this new tool please
a87a262220a4 Adding proof of concept for optional output formats.
ross lazarus ross.lazarus@gmail.com
parents: 15
diff changeset
44 # otherwise, the tool won't run for anybody.
a87a262220a4 Adding proof of concept for optional output formats.
ross lazarus ross.lazarus@gmail.com
parents: 15
diff changeset
45 #
a87a262220a4 Adding proof of concept for optional output formats.
ross lazarus ross.lazarus@gmail.com
parents: 15
diff changeset
46
a87a262220a4 Adding proof of concept for optional output formats.
ross lazarus ross.lazarus@gmail.com
parents: 15
diff changeset
47 #
a87a262220a4 Adding proof of concept for optional output formats.
ross lazarus ross.lazarus@gmail.com
parents: 15
diff changeset
48 # copyright ross lazarus (ross stop lazarus at gmail stop com) May 2012
7
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
49 #
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
50 # all rights reserved
19
a87a262220a4 Adding proof of concept for optional output formats.
ross lazarus ross.lazarus@gmail.com
parents: 15
diff changeset
51 # Licensed under the LGPL if you want to improve it, feel free https://bitbucket.org/fubar/galaxytoolfactory/wiki/Home
7
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
52
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
53 import sys
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
54 import shutil
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
55 import subprocess
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
56 import os
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
57 import time
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
58 import tempfile
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
59 import optparse
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
60 import tarfile
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
61 import re
8
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
62 import shutil
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
63
7
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
64 progname = os.path.split(sys.argv[0])[1]
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
65 myversion = 'V000.1 May 2012'
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
66 verbose = False
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
67 debug = False
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
68
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
69
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
70 def timenow():
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
71 """return current time as a string
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
72 """
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
73 return time.strftime('%d/%m/%Y %H:%M:%S', time.localtime(time.time()))
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
74 # characters that are allowed but need to be escaped
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
75
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
76 class ScriptRunner:
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
77 """class is a wrapper for an arbitrary script
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
78 """
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
79
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
80 def __init__(self,opts=None):
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
81 """
19
a87a262220a4 Adding proof of concept for optional output formats.
ross lazarus ross.lazarus@gmail.com
parents: 15
diff changeset
82 cleanup inputs, setup some outputs
9
e09c76551bed Can run without input or output or either..
ross lazarus ross.lazarus@gmail.com
parents: 8
diff changeset
83
7
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
84 """
8
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
85 if opts.output_dir: # simplify for the tool tarball
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
86 os.chdir(opts.output_dir)
7
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
87 self.thumbformat = 'jpg'
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
88 self.opts = opts
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
89 self.toolname = re.sub('[^a-zA-Z0-9_]+', '', opts.tool_name)
8
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
90 self.toolid = self.toolname
7
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
91 s = open(self.opts.script_path,'r').read()
9
e09c76551bed Can run without input or output or either..
ross lazarus ross.lazarus@gmail.com
parents: 8
diff changeset
92 self.script = s
8
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
93 self.myname = sys.argv[0] # get our name because we write ourselves out as a tool later
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
94 self.pyfile = self.myname # crude but efficient - the cruft won't hurt much
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
95 self.xmlfile = '%s.xml' % self.toolname
7
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
96 self.sfile = '%s.%s' % (self.toolname,opts.interpreter)
12
d12728e33c3d Changed to deliver a gz file - requires a new datatypes_conf.xml entry:
ross lazarus ross.lazarus@gmail.com
parents: 10
diff changeset
97 if opts.output_dir: # may not want these complexities
7
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
98 self.tlog = os.path.join(opts.output_dir,"%s_runner.log" % self.toolname)
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
99 artifactpath = os.path.join(opts.output_dir,'%s_run.script' % self.toolname)
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
100 artifact = open(artifactpath,'w')
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
101 artifact.write(self.script)
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
102 artifact.write('\n')
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
103 artifact.close()
12
d12728e33c3d Changed to deliver a gz file - requires a new datatypes_conf.xml entry:
ross lazarus ross.lazarus@gmail.com
parents: 10
diff changeset
104 if opts.make_Tool: # need this code and the user script for the tarball
9
e09c76551bed Can run without input or output or either..
ross lazarus ross.lazarus@gmail.com
parents: 8
diff changeset
105 localscript = open(self.sfile,'w')
e09c76551bed Can run without input or output or either..
ross lazarus ross.lazarus@gmail.com
parents: 8
diff changeset
106 localscript.write(self.script)
e09c76551bed Can run without input or output or either..
ross lazarus ross.lazarus@gmail.com
parents: 8
diff changeset
107 localscript.close()
e09c76551bed Can run without input or output or either..
ross lazarus ross.lazarus@gmail.com
parents: 8
diff changeset
108 shutil.copyfile(self.myname,'%s.py' % self.toolname) # for tool and for user
7
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
109 self.cl = []
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
110 self.html = []
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
111 a = self.cl.append
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
112 a(opts.interpreter)
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
113 a('-') # use stdin
12
d12728e33c3d Changed to deliver a gz file - requires a new datatypes_conf.xml entry:
ross lazarus ross.lazarus@gmail.com
parents: 10
diff changeset
114 a(opts.input_tab)
d12728e33c3d Changed to deliver a gz file - requires a new datatypes_conf.xml entry:
ross lazarus ross.lazarus@gmail.com
parents: 10
diff changeset
115 a(opts.output_tab)
8
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
116 self.outFormats = 'tabular' # TODO make this an option at tool generation time
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
117 self.inputFormats = 'tabular' # TODO make this an option at tool generation time
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
118
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
119
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
120 def makeXML(self):
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
121 """
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
122 Create a Galaxy xml tool wrapper for the new script as a string to write out
19
a87a262220a4 Adding proof of concept for optional output formats.
ross lazarus ross.lazarus@gmail.com
parents: 15
diff changeset
123 fixme - use templating or something less fugly than this example of what we produce
13
7725e4ab27e1 Adding tests - problem to find the script - needs a fixed string somewhere.
ross lazarus ross.lazarus@gmail.com
parents: 12
diff changeset
124
7725e4ab27e1 Adding tests - problem to find the script - needs a fixed string somewhere.
ross lazarus ross.lazarus@gmail.com
parents: 12
diff changeset
125 <tool id="reverse" name="reverse" version="0.01">
7725e4ab27e1 Adding tests - problem to find the script - needs a fixed string somewhere.
ross lazarus ross.lazarus@gmail.com
parents: 12
diff changeset
126 <description>a tabular file</description>
7725e4ab27e1 Adding tests - problem to find the script - needs a fixed string somewhere.
ross lazarus ross.lazarus@gmail.com
parents: 12
diff changeset
127 <command interpreter="python">
7725e4ab27e1 Adding tests - problem to find the script - needs a fixed string somewhere.
ross lazarus ross.lazarus@gmail.com
parents: 12
diff changeset
128 reverse.py --script_path "$runMe" --interpreter "python"
7725e4ab27e1 Adding tests - problem to find the script - needs a fixed string somewhere.
ross lazarus ross.lazarus@gmail.com
parents: 12
diff changeset
129 --tool_name "reverse" --input_tab "$input1" --output_tab "$tab_file"
7725e4ab27e1 Adding tests - problem to find the script - needs a fixed string somewhere.
ross lazarus ross.lazarus@gmail.com
parents: 12
diff changeset
130 </command>
7725e4ab27e1 Adding tests - problem to find the script - needs a fixed string somewhere.
ross lazarus ross.lazarus@gmail.com
parents: 12
diff changeset
131 <inputs>
7725e4ab27e1 Adding tests - problem to find the script - needs a fixed string somewhere.
ross lazarus ross.lazarus@gmail.com
parents: 12
diff changeset
132 <param name="input1" type="data" format="tabular" label="Select a suitable input file from your history"/><param name="job_name" type="text" label="Supply a name for the outputs to remind you what they contain" value="reverse"/>
7725e4ab27e1 Adding tests - problem to find the script - needs a fixed string somewhere.
ross lazarus ross.lazarus@gmail.com
parents: 12
diff changeset
133
7725e4ab27e1 Adding tests - problem to find the script - needs a fixed string somewhere.
ross lazarus ross.lazarus@gmail.com
parents: 12
diff changeset
134 </inputs>
7725e4ab27e1 Adding tests - problem to find the script - needs a fixed string somewhere.
ross lazarus ross.lazarus@gmail.com
parents: 12
diff changeset
135 <outputs>
7725e4ab27e1 Adding tests - problem to find the script - needs a fixed string somewhere.
ross lazarus ross.lazarus@gmail.com
parents: 12
diff changeset
136 <data format="tabular" name="tab_file" label="${job_name}"/>
7725e4ab27e1 Adding tests - problem to find the script - needs a fixed string somewhere.
ross lazarus ross.lazarus@gmail.com
parents: 12
diff changeset
137
7725e4ab27e1 Adding tests - problem to find the script - needs a fixed string somewhere.
ross lazarus ross.lazarus@gmail.com
parents: 12
diff changeset
138 </outputs>
7725e4ab27e1 Adding tests - problem to find the script - needs a fixed string somewhere.
ross lazarus ross.lazarus@gmail.com
parents: 12
diff changeset
139 <help>
7725e4ab27e1 Adding tests - problem to find the script - needs a fixed string somewhere.
ross lazarus ross.lazarus@gmail.com
parents: 12
diff changeset
140
7725e4ab27e1 Adding tests - problem to find the script - needs a fixed string somewhere.
ross lazarus ross.lazarus@gmail.com
parents: 12
diff changeset
141 **What it Does**
7725e4ab27e1 Adding tests - problem to find the script - needs a fixed string somewhere.
ross lazarus ross.lazarus@gmail.com
parents: 12
diff changeset
142
7725e4ab27e1 Adding tests - problem to find the script - needs a fixed string somewhere.
ross lazarus ross.lazarus@gmail.com
parents: 12
diff changeset
143 Reverse the columns in a tabular file
7725e4ab27e1 Adding tests - problem to find the script - needs a fixed string somewhere.
ross lazarus ross.lazarus@gmail.com
parents: 12
diff changeset
144
7725e4ab27e1 Adding tests - problem to find the script - needs a fixed string somewhere.
ross lazarus ross.lazarus@gmail.com
parents: 12
diff changeset
145 </help>
7725e4ab27e1 Adding tests - problem to find the script - needs a fixed string somewhere.
ross lazarus ross.lazarus@gmail.com
parents: 12
diff changeset
146 <configfiles>
7725e4ab27e1 Adding tests - problem to find the script - needs a fixed string somewhere.
ross lazarus ross.lazarus@gmail.com
parents: 12
diff changeset
147 <configfile name="runMe">
7725e4ab27e1 Adding tests - problem to find the script - needs a fixed string somewhere.
ross lazarus ross.lazarus@gmail.com
parents: 12
diff changeset
148
7725e4ab27e1 Adding tests - problem to find the script - needs a fixed string somewhere.
ross lazarus ross.lazarus@gmail.com
parents: 12
diff changeset
149 # reverse order of columns in a tabular file
7725e4ab27e1 Adding tests - problem to find the script - needs a fixed string somewhere.
ross lazarus ross.lazarus@gmail.com
parents: 12
diff changeset
150 import sys
7725e4ab27e1 Adding tests - problem to find the script - needs a fixed string somewhere.
ross lazarus ross.lazarus@gmail.com
parents: 12
diff changeset
151 inp = sys.argv[1]
7725e4ab27e1 Adding tests - problem to find the script - needs a fixed string somewhere.
ross lazarus ross.lazarus@gmail.com
parents: 12
diff changeset
152 outp = sys.argv[2]
7725e4ab27e1 Adding tests - problem to find the script - needs a fixed string somewhere.
ross lazarus ross.lazarus@gmail.com
parents: 12
diff changeset
153 i = open(inp,'r')
7725e4ab27e1 Adding tests - problem to find the script - needs a fixed string somewhere.
ross lazarus ross.lazarus@gmail.com
parents: 12
diff changeset
154 o = open(outp,'w')
7725e4ab27e1 Adding tests - problem to find the script - needs a fixed string somewhere.
ross lazarus ross.lazarus@gmail.com
parents: 12
diff changeset
155 for row in i:
7725e4ab27e1 Adding tests - problem to find the script - needs a fixed string somewhere.
ross lazarus ross.lazarus@gmail.com
parents: 12
diff changeset
156 rs = row.rstrip().split('\t')
7725e4ab27e1 Adding tests - problem to find the script - needs a fixed string somewhere.
ross lazarus ross.lazarus@gmail.com
parents: 12
diff changeset
157 rs.reverse()
7725e4ab27e1 Adding tests - problem to find the script - needs a fixed string somewhere.
ross lazarus ross.lazarus@gmail.com
parents: 12
diff changeset
158 o.write('\t'.join(rs))
7725e4ab27e1 Adding tests - problem to find the script - needs a fixed string somewhere.
ross lazarus ross.lazarus@gmail.com
parents: 12
diff changeset
159 o.write('\n')
7725e4ab27e1 Adding tests - problem to find the script - needs a fixed string somewhere.
ross lazarus ross.lazarus@gmail.com
parents: 12
diff changeset
160 i.close()
7725e4ab27e1 Adding tests - problem to find the script - needs a fixed string somewhere.
ross lazarus ross.lazarus@gmail.com
parents: 12
diff changeset
161 o.close()
7725e4ab27e1 Adding tests - problem to find the script - needs a fixed string somewhere.
ross lazarus ross.lazarus@gmail.com
parents: 12
diff changeset
162
7725e4ab27e1 Adding tests - problem to find the script - needs a fixed string somewhere.
ross lazarus ross.lazarus@gmail.com
parents: 12
diff changeset
163
7725e4ab27e1 Adding tests - problem to find the script - needs a fixed string somewhere.
ross lazarus ross.lazarus@gmail.com
parents: 12
diff changeset
164 </configfile>
7725e4ab27e1 Adding tests - problem to find the script - needs a fixed string somewhere.
ross lazarus ross.lazarus@gmail.com
parents: 12
diff changeset
165 </configfiles>
7725e4ab27e1 Adding tests - problem to find the script - needs a fixed string somewhere.
ross lazarus ross.lazarus@gmail.com
parents: 12
diff changeset
166 </tool>
7725e4ab27e1 Adding tests - problem to find the script - needs a fixed string somewhere.
ross lazarus ross.lazarus@gmail.com
parents: 12
diff changeset
167
8
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
168 """
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
169 newXML="""<tool id="%(toolid)s" name="%(toolname)s" version="0.01">
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
170 %(tooldesc)s
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
171 %(command)s
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
172 <inputs>
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
173 %(inputs)s
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
174 </inputs>
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
175 <outputs>
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
176 %(outputs)s
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
177 </outputs>
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
178 <help>
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
179 %(help)s
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
180 </help>
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
181 <configfiles>
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
182 <configfile name="runMe">
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
183 %(script)s
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
184 </configfile>
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
185 </configfiles>
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
186 </tool>""" # needs a dict with toolname, toolid, interpreter, scriptname, command, inputs as a multi line string ready to write, outputs ditto, help ditto
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
187
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
188 newCommand="""<command interpreter="python">
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
189 %(toolname)s.py --script_path "$runMe" --interpreter "%(interpreter)s"
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
190 --tool_name "%(toolname)s" %(command_inputs)s %(command_outputs)s
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
191 </command>""" # may NOT be an input or htmlout
13
7725e4ab27e1 Adding tests - problem to find the script - needs a fixed string somewhere.
ross lazarus ross.lazarus@gmail.com
parents: 12
diff changeset
192 tooltests = """<tests><test>
7725e4ab27e1 Adding tests - problem to find the script - needs a fixed string somewhere.
ross lazarus ross.lazarus@gmail.com
parents: 12
diff changeset
193 <param name="input1" value="%s" ftype="%s"/>
7725e4ab27e1 Adding tests - problem to find the script - needs a fixed string somewhere.
ross lazarus ross.lazarus@gmail.com
parents: 12
diff changeset
194 <param name="job_name" value="test1"/>
7725e4ab27e1 Adding tests - problem to find the script - needs a fixed string somewhere.
ross lazarus ross.lazarus@gmail.com
parents: 12
diff changeset
195 <param name="runMe" value="$runMe"/>
7725e4ab27e1 Adding tests - problem to find the script - needs a fixed string somewhere.
ross lazarus ross.lazarus@gmail.com
parents: 12
diff changeset
196 </test><tests>"""
8
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
197 xdict = {}
9
e09c76551bed Can run without input or output or either..
ross lazarus ross.lazarus@gmail.com
parents: 8
diff changeset
198 xdict['script'] = self.script # configfile is least painful way to embed script to avoid external dependencies
8
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
199 if self.opts.help_text:
9
e09c76551bed Can run without input or output or either..
ross lazarus ross.lazarus@gmail.com
parents: 8
diff changeset
200 xdict['help'] = open(self.opts.help_text,'r').read()
8
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
201 else:
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
202 xdict['help'] = 'Please ask the tool author for help as none was supplied at tool generation'
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
203 if self.opts.tool_desc:
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
204 xdict['tooldesc'] = '<description>%s</description>' % self.opts.tool_desc
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
205 else:
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
206 xdict['tooldesc'] = ''
9
e09c76551bed Can run without input or output or either..
ross lazarus ross.lazarus@gmail.com
parents: 8
diff changeset
207 xdict['command_outputs'] = ''
e09c76551bed Can run without input or output or either..
ross lazarus ross.lazarus@gmail.com
parents: 8
diff changeset
208 xdict['outputs'] = ''
12
d12728e33c3d Changed to deliver a gz file - requires a new datatypes_conf.xml entry:
ross lazarus ross.lazarus@gmail.com
parents: 10
diff changeset
209 if self.opts.input_tab <> 'None':
8
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
210 xdict['command_inputs'] = '--input_tab "$input1"'
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
211 xdict['inputs'] = '<param name="input1" type="data" format="%s" label="Select a suitable input file from your history"/>' % self.inputFormats
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
212 else:
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
213 xdict['command_inputs'] = '' # assume no input - eg a random data generator
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
214 xdict['inputs'] = ''
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
215 xdict['inputs'] += '<param name="job_name" type="text" label="Supply a name for the outputs to remind you what they contain" value="%s"/>\n' % self.toolname
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
216 xdict['toolname'] = self.toolname
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
217 xdict['toolid'] = self.toolid
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
218 xdict['interpreter'] = self.opts.interpreter
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
219 xdict['scriptname'] = self.sfile
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
220 if self.opts.make_HTML:
9
e09c76551bed Can run without input or output or either..
ross lazarus ross.lazarus@gmail.com
parents: 8
diff changeset
221 xdict['command_outputs'] += '--output_dir "$html_file.files_path" --output_html "$html_file" --make_HTML "yes"'
8
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
222 xdict['outputs'] += '<data format="html" name="html_file" label="${job_name}.html"/>\n'
12
d12728e33c3d Changed to deliver a gz file - requires a new datatypes_conf.xml entry:
ross lazarus ross.lazarus@gmail.com
parents: 10
diff changeset
223 if self.opts.output_tab <> 'None':
8
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
224 xdict['command_outputs'] += '--output_tab "$tab_file"'
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
225 xdict['outputs'] += '<data format="%s" name="tab_file" label="${job_name}"/>\n' % self.outFormats
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
226 xdict['command'] = newCommand % xdict
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
227 xmls = newXML % xdict
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
228 xf = open(self.xmlfile,'w')
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
229 xf.write(xmls)
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
230 xf.write('\n')
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
231 xf.close()
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
232 # ready for the tarball
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
233
7
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
234
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
235 def makeTooltar(self):
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
236 """
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
237 a tool is a gz tarball with eg
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
238 /toolname/tool.xml /toolname/tool.py /toolname/test-data/test1_in.foo ...
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
239 """
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
240 retval = self.run()
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
241 if retval:
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
242 print >> sys.stderr,'## Run failed. Cannot build yet. Please fix and retry'
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
243 sys.exit(1)
8
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
244 self.makeXML()
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
245 tdir = self.toolname
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
246 os.mkdir(tdir)
12
d12728e33c3d Changed to deliver a gz file - requires a new datatypes_conf.xml entry:
ross lazarus ross.lazarus@gmail.com
parents: 10
diff changeset
247 if self.opts.input_tab <> 'None': # we may have test data?
10
71f2ac0eee95 Updated tarball with some test material - still need code generated...
ross lazarus ross.lazarus@gmail.com
parents: 9
diff changeset
248 testdir = os.path.join(tdir,'test-data')
71f2ac0eee95 Updated tarball with some test material - still need code generated...
ross lazarus ross.lazarus@gmail.com
parents: 9
diff changeset
249 os.mkdir(testdir) # make tests directory
71f2ac0eee95 Updated tarball with some test material - still need code generated...
ross lazarus ross.lazarus@gmail.com
parents: 9
diff changeset
250 shutil.copyfile(self.opts.input_tab,os.path.join(testdir,'test1_in.tab'))
12
d12728e33c3d Changed to deliver a gz file - requires a new datatypes_conf.xml entry:
ross lazarus ross.lazarus@gmail.com
parents: 10
diff changeset
251 if self.opts.output_tab <> 'None':
10
71f2ac0eee95 Updated tarball with some test material - still need code generated...
ross lazarus ross.lazarus@gmail.com
parents: 9
diff changeset
252 shutil.copyfile(self.opts.output_tab,os.path.join(testdir,'test1_out.tab'))
71f2ac0eee95 Updated tarball with some test material - still need code generated...
ross lazarus ross.lazarus@gmail.com
parents: 9
diff changeset
253 if self.opts.make_HTML:
71f2ac0eee95 Updated tarball with some test material - still need code generated...
ross lazarus ross.lazarus@gmail.com
parents: 9
diff changeset
254 shutil.copyfile(self.opts.output_html,os.path.join(testdir,'test1_out.html'))
12
d12728e33c3d Changed to deliver a gz file - requires a new datatypes_conf.xml entry:
ross lazarus ross.lazarus@gmail.com
parents: 10
diff changeset
255 if self.opts.output_dir:
d12728e33c3d Changed to deliver a gz file - requires a new datatypes_conf.xml entry:
ross lazarus ross.lazarus@gmail.com
parents: 10
diff changeset
256 shutil.copyfile(self.tlog,os.path.join(testdir,'test1_out.log'))
8
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
257 shutil.copyfile(self.xmlfile,os.path.join(tdir,self.xmlfile))
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
258 shutil.copyfile(self.pyfile,os.path.join(tdir,'%s.py' % self.toolname))
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
259 shutil.copyfile(self.sfile,os.path.join(tdir,self.sfile))
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
260 tarpath = "%s.gz" % self.toolname
7
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
261 tar = tarfile.open(tarpath, "w:gz")
8
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
262 tar.add(tdir,arcname=self.toolname)
7
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
263 tar.close()
12
d12728e33c3d Changed to deliver a gz file - requires a new datatypes_conf.xml entry:
ross lazarus ross.lazarus@gmail.com
parents: 10
diff changeset
264 shutil.copy(tarpath,self.opts.new_tool)
8
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
265 shutil.rmtree(tdir)
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
266 ## TODO: replace with optional direct upload to local toolshed?
7
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
267 return retval
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
268
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
269 def compressPDF(self,inpdf=None,thumbformat='png'):
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
270 """need absolute path to pdf
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
271 """
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
272 assert os.path.isfile(inpdf), "## Input %s supplied to %s compressPDF not found" % (inpdf,self.myName)
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
273 hf,hlog = tempfile.mkstemp(suffix="%s.log" % self.toolname)
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
274 sto = open(hlog,'w')
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
275 outpdf = '%s_compressed' % inpdf
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
276 cl = ["gs", "-sDEVICE=pdfwrite", "-dNOPAUSE", "-dBATCH", "-sOutputFile=%s" % outpdf,inpdf]
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
277 x = subprocess.Popen(cl,stdout=sto,stderr=sto,cwd=self.opts.output_dir)
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
278 retval1 = x.wait()
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
279 if retval1 == 0:
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
280 os.unlink(inpdf)
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
281 shutil.move(outpdf,inpdf)
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
282 outpng = '%s.%s' % (os.path.splitext(inpdf)[0],thumbformat)
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
283 cl2 = ['convert', inpdf, outpng]
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
284 x = subprocess.Popen(cl2,stdout=sto,stderr=sto,cwd=self.opts.output_dir)
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
285 retval2 = x.wait()
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
286 sto.close()
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
287 retval = retval1 or retval2
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
288 return retval
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
289
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
290
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
291 def getfSize(self,fpath,outpath):
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
292 """
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
293 format a nice file size string
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
294 """
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
295 size = ''
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
296 fp = os.path.join(outpath,fpath)
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
297 if os.path.isfile(fp):
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
298 n = float(os.path.getsize(fp))
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
299 if n > 2**20:
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
300 size = ' (%1.1f MB)' % (n/2**20)
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
301 elif n > 2**10:
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
302 size = ' (%1.1f KB)' % (n/2**10)
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
303 elif n > 0:
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
304 size = ' (%d B)' % (int(n))
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
305 return size
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
306
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
307 def makeHtml(self):
8
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
308 """ Create an HTML file content to list all the artefacts found in the output_dir
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
309 """
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
310
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
311 galhtmlprefix = """<?xml version="1.0" encoding="utf-8" ?>
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
312 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
313 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
314 <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
315 <meta name="generator" content="Galaxy %s tool output - see http://g2.trac.bx.psu.edu/" />
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
316 <title></title>
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
317 <link rel="stylesheet" href="/static/style/base.css" type="text/css" />
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
318 </head>
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
319 <body>
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
320 <div class="document">
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
321 """
19
a87a262220a4 Adding proof of concept for optional output formats.
ross lazarus ross.lazarus@gmail.com
parents: 15
diff changeset
322 galhtmlattr = """<hr/><b><a href="https://bitbucket.org/fubar/galaxytoolfactory/overview">Galaxy Tool Factory Script Wrapper</a> tool output %s run at %s</b><br/>"""
8
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
323 galhtmlpostfix = """</div></body></html>\n"""
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
324
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
325 flist = os.listdir(self.opts.output_dir)
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
326 flist = [x for x in flist if x <> 'Rplots.pdf']
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
327 flist.sort()
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
328 html = [galhtmlprefix % progname,]
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
329 html.append('<h2>Galaxy %s outputs run at %s</h2><br/>\n' % (self.toolname,timenow()))
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
330 fhtml = []
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
331 if len(flist) > 0:
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
332 html.append('<table cellpadding="3" cellspacing="3">\n')
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
333 for fname in flist:
7
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
334 dname,e = os.path.splitext(fname)
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
335 sfsize = self.getfSize(fname,self.opts.output_dir)
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
336 if e.lower() == '.pdf' : # compress and make a thumbnail
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
337 thumb = '%s.%s' % (dname,self.thumbformat)
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
338 pdff = os.path.join(self.opts.output_dir,fname)
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
339 retval = self.compressPDF(inpdf=pdff,thumbformat=self.thumbformat)
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
340 if retval == 0:
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
341 s= '<tr><td><a href="%s"><img src="%s" title="Click to download a PDF of %s" hspace="10" width="600"></a></td></tr>\n' % (fname,thumb,fname)
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
342 html.append(s)
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
343 fhtml.append('<li><a href="%s">%s %s</a></li>' % (fname,fname,sfsize))
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
344 else:
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
345 fhtml.append('<li><a href="%s">%s %s</a></li>' % (fname,fname,sfsize))
8
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
346 html.append('</table>\n')
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
347 if len(fhtml) > 0:
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
348 fhtml.insert(0,'<ul>')
9
e09c76551bed Can run without input or output or either..
ross lazarus ross.lazarus@gmail.com
parents: 8
diff changeset
349 fhtml.append('</ul><br/>')
8
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
350 html += fhtml # add all non-pdf files to the end of the display
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
351 else:
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
352 html.append('<h2>### Error - %s returned no files - please confirm that parameters are sane</h1>' % self.opts.interpreter)
9
e09c76551bed Can run without input or output or either..
ross lazarus ross.lazarus@gmail.com
parents: 8
diff changeset
353 html.append('<h3>%s log follows below</h3><hr/><pre><br/>\n' % self.opts.interpreter)
8
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
354 rlog = open(self.tlog,'r').readlines()
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
355 html += rlog
9
e09c76551bed Can run without input or output or either..
ross lazarus ross.lazarus@gmail.com
parents: 8
diff changeset
356 html.append('<br/>%s CL = %s<br/>\n' % (self.toolname,' '.join(sys.argv)))
8
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
357 html.append('</pre>\n')
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
358 html.append(galhtmlattr % (progname,timenow()))
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
359 html.append(galhtmlpostfix)
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
360 htmlf = file(self.opts.output_html,'w')
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
361 htmlf.write('\n'.join(html))
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
362 htmlf.write('\n')
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
363 htmlf.close()
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
364 self.html = html
7
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
365
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
366
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
367 def run(self):
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
368 """
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
369 """
12
d12728e33c3d Changed to deliver a gz file - requires a new datatypes_conf.xml entry:
ross lazarus ross.lazarus@gmail.com
parents: 10
diff changeset
370 if self.opts.output_dir:
7
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
371 sto = open(self.tlog,'w')
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
372 p = subprocess.Popen(' '.join(self.cl),shell=True,stdout=sto,stderr=sto,stdin=subprocess.PIPE,cwd=self.opts.output_dir)
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
373 else:
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
374 p = subprocess.Popen(' '.join(self.cl),shell=True,stdin=subprocess.PIPE)
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
375 p.stdin.write(self.script)
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
376 p.stdin.close()
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
377 retval = p.wait()
12
d12728e33c3d Changed to deliver a gz file - requires a new datatypes_conf.xml entry:
ross lazarus ross.lazarus@gmail.com
parents: 10
diff changeset
378 if self.opts.output_dir:
7
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
379 sto.close()
12
d12728e33c3d Changed to deliver a gz file - requires a new datatypes_conf.xml entry:
ross lazarus ross.lazarus@gmail.com
parents: 10
diff changeset
380 if self.opts.make_HTML:
7
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
381 self.makeHtml()
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
382 return retval
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
383
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
384
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
385 def main():
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
386 u = """
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
387 This is a Galaxy wrapper. It expects to be called by a special purpose tool.xml as:
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
388 <command interpreter="python">rgBaseScriptWrapper.py --script_path "$scriptPath" --tool_name "foo" --interpreter "Rscript"
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
389 </command>
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
390 """
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
391 op = optparse.OptionParser()
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
392 a = op.add_option
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
393 a('--script_path',default=None)
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
394 a('--tool_name',default=None)
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
395 a('--interpreter',default=None)
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
396 a('--output_dir',default=None)
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
397 a('--output_html',default=None)
12
d12728e33c3d Changed to deliver a gz file - requires a new datatypes_conf.xml entry:
ross lazarus ross.lazarus@gmail.com
parents: 10
diff changeset
398 a('--input_tab',default="None")
d12728e33c3d Changed to deliver a gz file - requires a new datatypes_conf.xml entry:
ross lazarus ross.lazarus@gmail.com
parents: 10
diff changeset
399 a('--output_tab',default="None")
7
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
400 a('--user_email',default=None)
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
401 a('--bad_user',default=None)
8
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
402 a('--make_Tool',default=None)
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
403 a('--make_HTML',default=None)
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
404 a('--help_text',default=None)
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
405 a('--tool_desc',default=None)
12
d12728e33c3d Changed to deliver a gz file - requires a new datatypes_conf.xml entry:
ross lazarus ross.lazarus@gmail.com
parents: 10
diff changeset
406 a('--new_tool',default=None)
7
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
407 opts, args = op.parse_args()
19
a87a262220a4 Adding proof of concept for optional output formats.
ross lazarus ross.lazarus@gmail.com
parents: 15
diff changeset
408 assert not opts.bad_user,'%s is NOT authorized to use this tool. Please ask your friendly admin to add their ID to %s.xml' % (opts.bad_user,os.path.splitext(self.myname)[0])
7
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
409 assert opts.tool_name,'## Tool Factory expects a tool name - eg --tool_name=DESeq'
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
410 assert opts.interpreter,'## Tool Factory wrapper expects an interpreter - eg --interpreter=Rscript'
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
411 assert os.path.isfile(opts.script_path),'## Tool Factory wrapper expects a script path - eg --script_path=foo.R'
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
412 if opts.output_dir:
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
413 try:
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
414 os.makedirs(opts.output_dir)
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
415 except:
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
416 pass
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
417 r = ScriptRunner(opts)
8
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
418 if opts.make_Tool:
7
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
419 retcode = r.makeTooltar()
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
420 else:
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
421 retcode = r.run()
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
422 if retcode:
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
423 sys.exit(retcode) # indicate failure to job runner
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
424
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
425
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
426 if __name__ == "__main__":
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
427 main()
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
428
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
429