annotate rgToolFactory.py @ 20:3f58115c6c5b

Getting ready to implement the test generator. Brainfuck is easier.
author ross lazarus ross.lazarus@gmail.com
date Tue, 05 Jun 2012 22:15:31 +1000
parents a87a262220a4
children 0ee2b06ea304
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
20
3f58115c6c5b Getting ready to implement the test generator.
ross lazarus ross.lazarus@gmail.com
parents: 19
diff changeset
118 self.test1Input = 'test1_input.xls'
3f58115c6c5b Getting ready to implement the test generator.
ross lazarus ross.lazarus@gmail.com
parents: 19
diff changeset
119 self.test1Output = 'test1_output.xls'
3f58115c6c5b Getting ready to implement the test generator.
ross lazarus ross.lazarus@gmail.com
parents: 19
diff changeset
120 self.test1HTML = 'test1_output.html'
8
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 def makeXML(self):
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
123 """
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
124 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
125 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
126
7725e4ab27e1 Adding tests - problem to find the script - needs a fixed string somewhere.
ross lazarus ross.lazarus@gmail.com
parents: 12
diff changeset
127 <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
128 <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
129 <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
130 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
131 --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
132 </command>
7725e4ab27e1 Adding tests - problem to find the script - needs a fixed string somewhere.
ross lazarus ross.lazarus@gmail.com
parents: 12
diff changeset
133 <inputs>
7725e4ab27e1 Adding tests - problem to find the script - needs a fixed string somewhere.
ross lazarus ross.lazarus@gmail.com
parents: 12
diff changeset
134 <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
135
7725e4ab27e1 Adding tests - problem to find the script - needs a fixed string somewhere.
ross lazarus ross.lazarus@gmail.com
parents: 12
diff changeset
136 </inputs>
7725e4ab27e1 Adding tests - problem to find the script - needs a fixed string somewhere.
ross lazarus ross.lazarus@gmail.com
parents: 12
diff changeset
137 <outputs>
7725e4ab27e1 Adding tests - problem to find the script - needs a fixed string somewhere.
ross lazarus ross.lazarus@gmail.com
parents: 12
diff changeset
138 <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
139
7725e4ab27e1 Adding tests - problem to find the script - needs a fixed string somewhere.
ross lazarus ross.lazarus@gmail.com
parents: 12
diff changeset
140 </outputs>
7725e4ab27e1 Adding tests - problem to find the script - needs a fixed string somewhere.
ross lazarus ross.lazarus@gmail.com
parents: 12
diff changeset
141 <help>
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 **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
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 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
146
7725e4ab27e1 Adding tests - problem to find the script - needs a fixed string somewhere.
ross lazarus ross.lazarus@gmail.com
parents: 12
diff changeset
147 </help>
7725e4ab27e1 Adding tests - problem to find the script - needs a fixed string somewhere.
ross lazarus ross.lazarus@gmail.com
parents: 12
diff changeset
148 <configfiles>
7725e4ab27e1 Adding tests - problem to find the script - needs a fixed string somewhere.
ross lazarus ross.lazarus@gmail.com
parents: 12
diff changeset
149 <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
150
7725e4ab27e1 Adding tests - problem to find the script - needs a fixed string somewhere.
ross lazarus ross.lazarus@gmail.com
parents: 12
diff changeset
151 # 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
152 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
153 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
154 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
155 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
156 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
157 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
158 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
159 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
160 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
161 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
162 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
163 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
164
7725e4ab27e1 Adding tests - problem to find the script - needs a fixed string somewhere.
ross lazarus ross.lazarus@gmail.com
parents: 12
diff changeset
165
7725e4ab27e1 Adding tests - problem to find the script - needs a fixed string somewhere.
ross lazarus ross.lazarus@gmail.com
parents: 12
diff changeset
166 </configfile>
7725e4ab27e1 Adding tests - problem to find the script - needs a fixed string somewhere.
ross lazarus ross.lazarus@gmail.com
parents: 12
diff changeset
167 </configfiles>
7725e4ab27e1 Adding tests - problem to find the script - needs a fixed string somewhere.
ross lazarus ross.lazarus@gmail.com
parents: 12
diff changeset
168 </tool>
7725e4ab27e1 Adding tests - problem to find the script - needs a fixed string somewhere.
ross lazarus ross.lazarus@gmail.com
parents: 12
diff changeset
169
8
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
170 """
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
171 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
172 %(tooldesc)s
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
173 %(command)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 %(inputs)s
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
176 </inputs>
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 %(outputs)s
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
179 </outputs>
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 %(help)s
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
182 </help>
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
183 <configfiles>
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
184 <configfile name="runMe">
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
185 %(script)s
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
186 </configfile>
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
187 </configfiles>
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
188 </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
189
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
190 newCommand="""<command interpreter="python">
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
191 %(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
192 --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
193 </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
194 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
195 <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
196 <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
197 <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
198 </test><tests>"""
8
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
199 xdict = {}
9
e09c76551bed Can run without input or output or either..
ross lazarus ross.lazarus@gmail.com
parents: 8
diff changeset
200 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
201 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
202 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
203 else:
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
204 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
205 if self.opts.tool_desc:
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
206 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
207 else:
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
208 xdict['tooldesc'] = ''
9
e09c76551bed Can run without input or output or either..
ross lazarus ross.lazarus@gmail.com
parents: 8
diff changeset
209 xdict['command_outputs'] = ''
e09c76551bed Can run without input or output or either..
ross lazarus ross.lazarus@gmail.com
parents: 8
diff changeset
210 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
211 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
212 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
213 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
214 else:
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
215 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
216 xdict['inputs'] = ''
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
217 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
218 xdict['toolname'] = self.toolname
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
219 xdict['toolid'] = self.toolid
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
220 xdict['interpreter'] = self.opts.interpreter
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
221 xdict['scriptname'] = self.sfile
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
222 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
223 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
224 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
225 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
226 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
227 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
228 xdict['command'] = newCommand % xdict
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
229 xmls = newXML % xdict
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
230 xf = open(self.xmlfile,'w')
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
231 xf.write(xmls)
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
232 xf.write('\n')
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
233 xf.close()
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
234 # ready for the tarball
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
235
7
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 def makeTooltar(self):
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
238 """
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
239 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
240 /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
241 """
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
242 retval = self.run()
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
243 if retval:
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
244 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
245 sys.exit(1)
8
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
246 self.makeXML()
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
247 tdir = self.toolname
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
248 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
249 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
250 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
251 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
252 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
253 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
254 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
255 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
256 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
257 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
258 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
259 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
260 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
261 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
262 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
263 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
264 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
265 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
266 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
267 shutil.rmtree(tdir)
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
268 ## 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
269 return retval
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
270
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
271 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
272 """need absolute path to pdf
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
273 """
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
274 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
275 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
276 sto = open(hlog,'w')
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
277 outpdf = '%s_compressed' % inpdf
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
278 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
279 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
280 retval1 = x.wait()
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
281 if retval1 == 0:
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
282 os.unlink(inpdf)
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
283 shutil.move(outpdf,inpdf)
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
284 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
285 cl2 = ['convert', inpdf, outpng]
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
286 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
287 retval2 = x.wait()
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
288 sto.close()
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
289 retval = retval1 or retval2
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
290 return retval
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
291
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 def getfSize(self,fpath,outpath):
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 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
296 """
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
297 size = ''
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
298 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
299 if os.path.isfile(fp):
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
300 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
301 if n > 2**20:
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
302 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
303 elif n > 2**10:
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
304 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
305 elif n > 0:
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
306 size = ' (%d B)' % (int(n))
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
307 return size
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
308
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
309 def makeHtml(self):
8
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
310 """ 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
311 """
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
312
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
313 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
314 <!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
315 <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
316 <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
317 <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
318 <title></title>
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
319 <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
320 </head>
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
321 <body>
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
322 <div class="document">
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
323 """
19
a87a262220a4 Adding proof of concept for optional output formats.
ross lazarus ross.lazarus@gmail.com
parents: 15
diff changeset
324 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
325 galhtmlpostfix = """</div></body></html>\n"""
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
326
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
327 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
328 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
329 flist.sort()
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
330 html = [galhtmlprefix % progname,]
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
331 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
332 fhtml = []
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
333 if len(flist) > 0:
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
334 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
335 for fname in flist:
7
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
336 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
337 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
338 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
339 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
340 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
341 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
342 if retval == 0:
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
343 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
344 html.append(s)
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))
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
346 else:
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
347 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
348 html.append('</table>\n')
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
349 if len(fhtml) > 0:
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
350 fhtml.insert(0,'<ul>')
9
e09c76551bed Can run without input or output or either..
ross lazarus ross.lazarus@gmail.com
parents: 8
diff changeset
351 fhtml.append('</ul><br/>')
8
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
352 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
353 else:
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
354 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
355 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
356 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
357 html += rlog
9
e09c76551bed Can run without input or output or either..
ross lazarus ross.lazarus@gmail.com
parents: 8
diff changeset
358 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
359 html.append('</pre>\n')
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
360 html.append(galhtmlattr % (progname,timenow()))
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
361 html.append(galhtmlpostfix)
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
362 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
363 htmlf.write('\n'.join(html))
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
364 htmlf.write('\n')
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
365 htmlf.close()
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
366 self.html = html
7
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
367
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 def run(self):
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
370 """
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
371 """
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
372 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
373 sto = open(self.tlog,'w')
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,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
375 else:
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
376 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
377 p.stdin.write(self.script)
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
378 p.stdin.close()
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
379 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
380 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
381 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
382 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
383 self.makeHtml()
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
384 return retval
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
385
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
386
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
387 def main():
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
388 u = """
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
389 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
390 <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
391 </command>
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
392 """
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
393 op = optparse.OptionParser()
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
394 a = op.add_option
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
395 a('--script_path',default=None)
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
396 a('--tool_name',default=None)
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
397 a('--interpreter',default=None)
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
398 a('--output_dir',default=None)
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
399 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
400 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
401 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
402 a('--user_email',default=None)
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
403 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
404 a('--make_Tool',default=None)
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
405 a('--make_HTML',default=None)
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
406 a('--help_text',default=None)
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
407 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
408 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
409 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
410 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
411 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
412 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
413 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
414 if opts.output_dir:
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
415 try:
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
416 os.makedirs(opts.output_dir)
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
417 except:
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
418 pass
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
419 r = ScriptRunner(opts)
8
220885b2d7ee End to end test works. Add tests next
ross lazarus ross.lazarus@gmail.com
parents: 7
diff changeset
420 if opts.make_Tool:
7
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
421 retcode = r.makeTooltar()
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
422 else:
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
423 retcode = r.run()
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
424 if retcode:
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
425 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
426
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
427
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
428 if __name__ == "__main__":
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
429 main()
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
430
7221619caefa Updated name and added crude gzip generator for toolshed
ross lazarus ross.lazarus@gmail.com
parents:
diff changeset
431