annotate rgToolFactory2.py @ 8:9d58cc32a12d draft

Uploaded
author fubar
date Mon, 12 Jan 2015 05:27:52 -0500
parents 61381bad936d
children ce5ec1d989fd
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
1 # rgToolFactoryMultIn.py
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
2 # see https://bitbucket.org/fubar/galaxytoolfactory/wiki/Home
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
3 #
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
4 # copyright ross lazarus (ross stop lazarus at gmail stop com) May 2012
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
5 #
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
6 # all rights reserved
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
7 # Licensed under the LGPL
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
8 # suggestions for improvement and bug fixes welcome at https://bitbucket.org/fubar/galaxytoolfactory/wiki/Home
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
9 #
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
10 # sept 2014 added additional params from
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
11 # https://bitbucket.org/mvdbeek/dockertoolfactory/src/d4863bcf7b521532c7e8c61b6333840ba5393f73/DockerToolFactory.py?at=default
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
12 # passing them is complex
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
13 # and they are restricted to NOT contain commas or double quotes to ensure that they can be safely passed together on
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
14 # the toolfactory command line as a comma delimited double quoted string for parsing and passing to the script
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
15 # see examples on this tool form
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
16
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
17 # august 2014
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
18
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
19 # Allows arbitrary number of input files
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
20 # NOTE positional parameters are now passed to script
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
21 # and output (may be "None") is *before* arbitrary number of inputs
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
22 #
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
23 # march 2014
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
24 # had to remove dependencies because cross toolshed dependencies are not possible - can't pre-specify a toolshed url for graphicsmagick and ghostscript
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
25 # grrrrr - night before a demo
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
26 # added dependencies to a tool_dependencies.xml if html page generated so generated tool is properly portable
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
27 #
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
28 # added ghostscript and graphicsmagick as dependencies
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
29 # fixed a wierd problem where gs was trying to use the new_files_path from universe (database/tmp) as ./database/tmp
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
30 # errors ensued
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
31 #
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
32 # august 2013
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
33 # found a problem with GS if $TMP or $TEMP missing - now inject /tmp and warn
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
34 #
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
35 # july 2013
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
36 # added ability to combine images and individual log files into html output
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
37 # just make sure there's a log file foo.log and it will be output
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
38 # together with all images named like "foo_*.pdf
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
39 # otherwise old format for html
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
40 #
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
41 # January 2013
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
42 # problem pointed out by Carlos Borroto
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
43 # added escaping for <>$ - thought I did that ages ago...
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
44 #
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
45 # August 11 2012
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
46 # changed to use shell=False and cl as a sequence
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
47
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
48 # This is a Galaxy tool factory for simple scripts in python, R or whatever ails ye.
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
49 # It also serves as the wrapper for the new tool.
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
50 #
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
51 # you paste and run your script
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
52 # Only works for simple scripts that read one input from the history.
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
53 # Optionally can write one new history dataset,
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
54 # and optionally collect any number of outputs into links on an autogenerated HTML page.
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
55
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
56 # DO NOT install on a public or important site - please.
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
57
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
58 # installed generated tools are fine if the script is safe.
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
59 # They just run normally and their user cannot do anything unusually insecure
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
60 # but please, practice safe toolshed.
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
61 # Read the fucking code before you install any tool
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
62 # especially this one
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
63
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
64 # After you get the script working on some test data, you can
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
65 # optionally generate a toolshed compatible gzip file
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
66 # containing your script safely wrapped as an ordinary Galaxy script in your local toolshed for
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
67 # safe and largely automated installation in a production Galaxy.
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
68
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
69 # If you opt for an HTML output, you get all the script outputs arranged
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
70 # as a single Html history item - all output files are linked, thumbnails for all the pdfs.
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
71 # Ugly but really inexpensive.
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
72 #
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
73 # Patches appreciated please.
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
74 #
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
75 #
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
76 # long route to June 2012 product
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
77 # Behold the awesome power of Galaxy and the toolshed with the tool factory to bind them
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
78 # derived from an integrated script model
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
79 # called rgBaseScriptWrapper.py
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
80 # Note to the unwary:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
81 # This tool allows arbitrary scripting on your Galaxy as the Galaxy user
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
82 # There is nothing stopping a malicious user doing whatever they choose
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
83 # Extremely dangerous!!
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
84 # Totally insecure. So, trusted users only
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
85 #
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
86 # preferred model is a developer using their throw away workstation instance - ie a private site.
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
87 # no real risk. The universe_wsgi.ini admin_users string is checked - only admin users are permitted to run this tool.
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
88 #
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
89
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
90 import sys
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
91 import shutil
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
92 import subprocess
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
93 import os
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
94 import time
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
95 import tempfile
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
96 import optparse
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
97 import tarfile
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
98 import re
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
99 import shutil
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
100 import math
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
101
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
102 progname = os.path.split(sys.argv[0])[1]
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
103 myversion = 'V001.1 March 2014'
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
104 verbose = False
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
105 debug = False
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
106 toolFactoryURL = 'https://bitbucket.org/fubar/galaxytoolfactory'
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
107
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
108 # if we do html we need these dependencies specified in a tool_dependencies.xml file and referred to in the generated
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
109 # tool xml
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
110 toolhtmldepskel = """<?xml version="1.0"?>
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
111 <tool_dependency>
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
112 <package name="ghostscript" version="9.10">
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
113 <repository name="package_ghostscript_9_10" owner="devteam" prior_installation_required="True" />
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
114 </package>
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
115 <package name="graphicsmagick" version="1.3.18">
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
116 <repository name="package_graphicsmagick_1_3" owner="iuc" prior_installation_required="True" />
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
117 </package>
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
118 <readme>
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
119 %s
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
120 </readme>
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
121 </tool_dependency>
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
122 """
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
123
2
6a3c292412fa Uploaded
fubar
parents: 0
diff changeset
124 emptytoolhtmldepskel = """<?xml version="1.0"?>
0
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
125 <tool_dependency>
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
126 <readme>
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
127 %s
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
128 </readme>
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
129 </tool_dependency>
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
130 """
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
131
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
132 protorequirements = """<requirements>
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
133 <requirement type="package" version="9.10">ghostscript</requirement>
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
134 <requirement type="package" version="1.3.18">graphicsmagick</requirement>
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
135 </requirements>"""
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
136
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
137 def timenow():
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
138 """return current time as a string
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
139 """
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
140 return time.strftime('%d/%m/%Y %H:%M:%S', time.localtime(time.time()))
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
141
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
142 html_escape_table = {
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
143 "&": "&amp;",
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
144 ">": "&gt;",
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
145 "<": "&lt;",
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
146 "$": "\$"
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
147 }
8
9d58cc32a12d Uploaded
fubar
parents: 7
diff changeset
148
0
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
149 def html_escape(text):
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
150 """Produce entities within text."""
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
151 return "".join(html_escape_table.get(c,c) for c in text)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
152
7
61381bad936d Uploaded
fubar
parents: 6
diff changeset
153
61381bad936d Uploaded
fubar
parents: 6
diff changeset
154 def html_unescape(text):
61381bad936d Uploaded
fubar
parents: 6
diff changeset
155 """Revert entities within text."""
8
9d58cc32a12d Uploaded
fubar
parents: 7
diff changeset
156 t = text.replace('&amp;','&').replace('&gt;','>').replace('&lt;','<').replace('\$','$')
9d58cc32a12d Uploaded
fubar
parents: 7
diff changeset
157 return t
7
61381bad936d Uploaded
fubar
parents: 6
diff changeset
158
0
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
159 def cmd_exists(cmd):
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
160 return subprocess.call("type " + cmd, shell=True,
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
161 stdout=subprocess.PIPE, stderr=subprocess.PIPE) == 0
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
162
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
163 def parse_citations(citations_text):
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
164 """
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
165 """
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
166 citations = [c for c in citations_text.split("**ENTRY**") if c.strip()]
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
167 citation_tuples = []
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
168 for citation in citations:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
169 if citation.startswith("doi"):
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
170 citation_tuples.append( ("doi", citation[len("doi"):].strip() ) )
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
171 else:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
172 citation_tuples.append( ("bibtex", citation[len("bibtex"):].strip() ) )
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
173 return citation_tuples
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
174
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
175
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
176 class ScriptRunner:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
177 """class is a wrapper for an arbitrary script
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
178 """
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
179
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
180 def __init__(self,opts=None,treatbashSpecial=True):
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
181 """
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
182 cleanup inputs, setup some outputs
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
183
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
184 """
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
185 self.useGM = cmd_exists('gm')
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
186 self.useIM = cmd_exists('convert')
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
187 self.useGS = cmd_exists('gs')
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
188 self.temp_warned = False # we want only one warning if $TMP not set
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
189 self.treatbashSpecial = treatbashSpecial
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
190 if opts.output_dir: # simplify for the tool tarball
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
191 os.chdir(opts.output_dir)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
192 self.thumbformat = 'png'
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
193 self.opts = opts
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
194 self.toolname = re.sub('[^a-zA-Z0-9_]+', '', opts.tool_name) # a sanitizer now does this but..
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
195 self.toolid = self.toolname
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
196 self.myname = sys.argv[0] # get our name because we write ourselves out as a tool later
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
197 self.pyfile = self.myname # crude but efficient - the cruft won't hurt much
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
198 self.xmlfile = '%s.xml' % self.toolname
4
b85a3b92e9f7 Uploaded
fubar
parents: 3
diff changeset
199 rx = open(self.opts.script_path,'r').readlines()
b85a3b92e9f7 Uploaded
fubar
parents: 3
diff changeset
200 rx = [x.rstrip() for x in rx] # remove pesky dos line endings if needed
b85a3b92e9f7 Uploaded
fubar
parents: 3
diff changeset
201 self.script = '\n'.join(rx)
0
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
202 fhandle,self.sfile = tempfile.mkstemp(prefix=self.toolname,suffix=".%s" % (opts.interpreter))
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
203 tscript = open(self.sfile,'w') # use self.sfile as script source for Popen
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
204 tscript.write(self.script)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
205 tscript.close()
6
81198714ac8e Uploaded
fubar
parents: 5
diff changeset
206 self.indentedScript = " %s" % '\n'.join([' %s' % html_escape(x) for x in rx]) # for restructured text in help
81198714ac8e Uploaded
fubar
parents: 5
diff changeset
207 self.escapedScript = "%s" % '\n'.join([' %s' % html_escape(x) for x in rx])
0
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
208 self.elog = os.path.join(self.opts.output_dir,"%s_error.log" % self.toolname)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
209 if opts.output_dir: # may not want these complexities
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
210 self.tlog = os.path.join(self.opts.output_dir,"%s_runner.log" % self.toolname)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
211 art = '%s.%s' % (self.toolname,opts.interpreter)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
212 artpath = os.path.join(self.opts.output_dir,art) # need full path
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
213 artifact = open(artpath,'w') # use self.sfile as script source for Popen
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
214 artifact.write(self.script)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
215 artifact.close()
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
216 self.cl = []
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
217 self.html = []
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
218 self.test1Inputs = [] # now a list
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
219 a = self.cl.append
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
220 a(opts.interpreter)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
221 if self.treatbashSpecial and opts.interpreter in ['bash','sh']:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
222 a(self.sfile)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
223 else:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
224 a('-') # stdin
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
225 # if multiple inputs - positional or need to distinguish them with cl params
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
226 if opts.input_tab:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
227 tests = []
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
228 for i,intab in enumerate(opts.input_tab): # if multiple, make tests
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
229 if intab.find(',') <> -1:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
230 (gpath,uname) = intab.split(',')
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
231 else:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
232 gpath = uname = intab
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
233 tests.append(os.path.basename(gpath))
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
234 self.test1Inputs = '<param name="input_tab" value="%s" />' % (','.join(tests))
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
235 else:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
236 self.test1Inputs = ''
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
237 # we always pass path,name pairs in using python optparse append
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
238 # but the command line has to be different
2
6a3c292412fa Uploaded
fubar
parents: 0
diff changeset
239 self.infile_paths = ''
6a3c292412fa Uploaded
fubar
parents: 0
diff changeset
240 self.infile_names = ''
6a3c292412fa Uploaded
fubar
parents: 0
diff changeset
241 if self.opts.input_tab:
6a3c292412fa Uploaded
fubar
parents: 0
diff changeset
242 self.infile_paths = ','.join([x.split(',')[0].strip() for x in self.opts.input_tab])
6a3c292412fa Uploaded
fubar
parents: 0
diff changeset
243 self.infile_names = ','.join([x.split(',')[1].strip() for x in self.opts.input_tab])
0
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
244 if self.opts.interpreter == 'python':
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
245 # yes, this is how additional parameters are always passed in python - to the TF itself and to
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
246 # scripts to avoid having unknown parameter names (yes, they can be parsed but...) on the command line
2
6a3c292412fa Uploaded
fubar
parents: 0
diff changeset
247 if self.opts.input_tab:
6a3c292412fa Uploaded
fubar
parents: 0
diff changeset
248 a('--INPATHS "%s"' % (self.infile_paths))
6a3c292412fa Uploaded
fubar
parents: 0
diff changeset
249 a('--INNAMES "%s"' % (self.infile_names))
0
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
250 if self.opts.output_tab:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
251 a('--OUTPATH "%s"' % self.opts.output_tab)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
252 for p in opts.additional_parameters:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
253 p = p.replace('"','')
7
61381bad936d Uploaded
fubar
parents: 6
diff changeset
254 psplit = p.split(',')
61381bad936d Uploaded
fubar
parents: 6
diff changeset
255 param = html_unescape(psplit[0])
61381bad936d Uploaded
fubar
parents: 6
diff changeset
256 value = html_unescape(psplit[1])
61381bad936d Uploaded
fubar
parents: 6
diff changeset
257 a('%s="%s"' % (param,value))
0
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
258 if (self.opts.interpreter == 'Rscript'):
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
259 # pass params on command line
2
6a3c292412fa Uploaded
fubar
parents: 0
diff changeset
260 if self.opts.input_tab:
6a3c292412fa Uploaded
fubar
parents: 0
diff changeset
261 a('INPATHS="%s"' % self.infile_paths)
6a3c292412fa Uploaded
fubar
parents: 0
diff changeset
262 a('INNAMES="%s"' % self.infile_names)
0
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
263 if self.opts.output_tab:
2
6a3c292412fa Uploaded
fubar
parents: 0
diff changeset
264 a('OUTPATH="%s"' % self.opts.output_tab)
6a3c292412fa Uploaded
fubar
parents: 0
diff changeset
265 for p in opts.additional_parameters:
6a3c292412fa Uploaded
fubar
parents: 0
diff changeset
266 p = p.replace('"','')
7
61381bad936d Uploaded
fubar
parents: 6
diff changeset
267 psplit = p.split(',')
61381bad936d Uploaded
fubar
parents: 6
diff changeset
268 param = html_unescape(psplit[0])
61381bad936d Uploaded
fubar
parents: 6
diff changeset
269 value = html_unescape(psplit[1])
61381bad936d Uploaded
fubar
parents: 6
diff changeset
270 a('%s="%s"' % (param,value))
0
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
271 if (self.opts.interpreter == 'perl'):
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
272 # pass params on command line
2
6a3c292412fa Uploaded
fubar
parents: 0
diff changeset
273 if self.opts.input_tab:
6a3c292412fa Uploaded
fubar
parents: 0
diff changeset
274 a('%s' % self.infile_paths)
6a3c292412fa Uploaded
fubar
parents: 0
diff changeset
275 a('%s' % self.infile_names)
0
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
276 if self.opts.output_tab:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
277 a('%s' % self.opts.output_tab)
2
6a3c292412fa Uploaded
fubar
parents: 0
diff changeset
278 for p in opts.additional_parameters:
6a3c292412fa Uploaded
fubar
parents: 0
diff changeset
279 p = p.replace('"','')
7
61381bad936d Uploaded
fubar
parents: 6
diff changeset
280 psplit = p.split(',')
61381bad936d Uploaded
fubar
parents: 6
diff changeset
281 param = html_unescape(psplit[0])
61381bad936d Uploaded
fubar
parents: 6
diff changeset
282 value = html_unescape(psplit[1])
0
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
283 if (value.find(' ') <> -1):
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
284 a('%s="%s"' % (param,value))
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
285 else:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
286 a('%s=%s' % (param,value))
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
287 if self.opts.interpreter == 'sh' or self.opts.interpreter == 'bash':
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
288 # more is better - now move all params into environment AND drop on to command line.
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
289 self.cl.insert(0,'env')
2
6a3c292412fa Uploaded
fubar
parents: 0
diff changeset
290 if self.opts.input_tab:
6a3c292412fa Uploaded
fubar
parents: 0
diff changeset
291 self.cl.insert(1,'INPATHS=%s' % (self.infile_paths))
6a3c292412fa Uploaded
fubar
parents: 0
diff changeset
292 self.cl.insert(2,'INNAMES=%s' % (self.infile_names))
0
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
293 if self.opts.output_tab:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
294 self.cl.insert(3,'OUTPATH=%s' % (self.opts.output_tab))
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
295 a('OUTPATH=%s' % (self.opts.output_tab))
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
296 # sets those environment variables for the script
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
297 # additional params appear in CL - yes, it's confusing
7
61381bad936d Uploaded
fubar
parents: 6
diff changeset
298 for i,p in enumerate(opts.additional_parameters):
61381bad936d Uploaded
fubar
parents: 6
diff changeset
299 psplit = p.split(',')
61381bad936d Uploaded
fubar
parents: 6
diff changeset
300 param = html_unescape(psplit[0])
61381bad936d Uploaded
fubar
parents: 6
diff changeset
301 value = html_unescape(psplit[1])
61381bad936d Uploaded
fubar
parents: 6
diff changeset
302 if (value.find(' ') <> -1):
61381bad936d Uploaded
fubar
parents: 6
diff changeset
303 a('%s="%s"' % (param,value))
61381bad936d Uploaded
fubar
parents: 6
diff changeset
304 self.cl.insert(4+i,'%s="%s"' % (param,value))
0
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
305 else:
7
61381bad936d Uploaded
fubar
parents: 6
diff changeset
306 a('%s=%s' % (param,value))
61381bad936d Uploaded
fubar
parents: 6
diff changeset
307 self.cl.insert(4+i,'%s=%s' % (param,value))
0
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
308
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
309
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
310 self.outFormats = opts.output_format
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
311 self.inputFormats = opts.input_formats
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
312 self.test1Output = '%s_test1_output.xls' % self.toolname
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
313 self.test1HTML = '%s_test1_output.html' % self.toolname
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
314
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
315 def makeXML(self):
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
316 """
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
317 Create a Galaxy xml tool wrapper for the new script as a string to write out
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
318 fixme - use templating or something less fugly than this example of what we produce
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
319
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
320 <tool id="reverse" name="reverse" version="0.01">
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
321 <description>a tabular file</description>
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
322 <command interpreter="python">
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
323 reverse.py --script_path "$runMe" --interpreter "python"
3
d75fd880fce2 Uploaded
fubar
parents: 2
diff changeset
324 --tool_name "reverse" --input_tab "$input1" --output_tab "$output1"
0
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
325 </command>
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
326 <inputs>
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
327 <param name="input1" type="data" format="tabular" label="Select one or more input files from your history"/>
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
328 <param name="job_name" type="text" label="Supply a name for the outputs to remind you what they contain" value="reverse"/>
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
329 </inputs>
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
330 <outputs>
3
d75fd880fce2 Uploaded
fubar
parents: 2
diff changeset
331 <data format="tabular" name="output1q" label="${job_name}"/>
0
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
332
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
333 </outputs>
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
334 <help>
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
335
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
336 **What it Does**
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
337
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
338 Reverse the columns in a tabular file
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
339
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
340 </help>
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
341 <configfiles>
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
342 <configfile name="runMe">
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
343
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
344 # reverse order of columns in a tabular file
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
345 import sys
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
346 inp = sys.argv[1]
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
347 outp = sys.argv[2]
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
348 i = open(inp,'r')
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
349 o = open(outp,'w')
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
350 for row in i:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
351 rs = row.rstrip().split('\t')
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
352 rs.reverse()
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
353 o.write('\t'.join(rs))
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
354 o.write('\n')
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
355 i.close()
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
356 o.close()
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
357
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
358
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
359 </configfile>
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
360 </configfiles>
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
361 </tool>
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
362
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
363 """
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
364 newXML="""<tool id="%(toolid)s" name="%(toolname)s" version="%(tool_version)s">
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
365 %(tooldesc)s
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
366 %(requirements)s
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
367 <command interpreter="python">
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
368 %(command)s
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
369 </command>
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
370 <inputs>
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
371 %(inputs)s
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
372 %(additionalInputs)s
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
373 </inputs>
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
374 <outputs>
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
375 %(outputs)s
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
376 </outputs>
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
377 <configfiles>
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
378 <configfile name="runMe">
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
379 %(script)s
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
380 </configfile>
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
381 </configfiles>
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
382 <tests>
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
383 %(tooltests)s
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
384 </tests>
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
385 <help>
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
386
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
387 %(help)s
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
388
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
389 </help>
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
390 <citations>
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
391 %(citations)s
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
392 <citation type="doi">10.1093/bioinformatics/bts573</citation>
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
393 </citations>
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
394 </tool>""" # needs a dict with toolname, toolid, interpreter, scriptname, command, inputs as a multi line string ready to write, outputs ditto, help ditto
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
395
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
396 newCommand="""
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
397 %(toolname)s.py --script_path "$runMe" --interpreter "%(interpreter)s"
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
398 --tool_name "%(toolname)s"
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
399 %(command_inputs)s
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
400 %(command_outputs)s
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
401 """
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
402 # may NOT be an input or htmlout - appended later
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
403 tooltestsTabOnly = """
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
404 <test>
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
405 %(test1Inputs)s
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
406 <param name="job_name" value="test1"/>
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
407 <param name="runMe" value="$runMe"/>
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
408 <output name="output1="%(test1Output)s" ftype="tabular"/>
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
409 %(additionalParams)s
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
410 </test>
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
411 """
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
412 tooltestsHTMLOnly = """
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
413 <test>
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
414 %(test1Inputs)s
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
415 <param name="job_name" value="test1"/>
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
416 <param name="runMe" value="$runMe"/>
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
417 %(additionalParams)s
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
418 <output name="html_file" file="%(test1HTML)s" ftype="html" lines_diff="5"/>
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
419 </test>
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
420 """
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
421 tooltestsBoth = """
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
422 <test>
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
423 %(test1Inputs)s
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
424 <param name="job_name" value="test1"/>
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
425 <param name="runMe" value="$runMe"/>
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
426 %(additionalParams)s
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
427 <output name="output1" file="%(test1Output)s" ftype="tabular" />
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
428 <output name="html_file" file="%(test1HTML)s" ftype="html" lines_diff="10"/>
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
429 </test>
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
430 """
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
431 xdict = {}
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
432 xdict['additionalParams'] = ''
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
433 xdict['additionalInputs'] = ''
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
434 if self.opts.additional_parameters:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
435 if self.opts.edit_additional_parameters: # add to new tool form with default value set to original value
2
6a3c292412fa Uploaded
fubar
parents: 0
diff changeset
436 xdict['additionalInputs'] = '\n'.join(['<param name="%s" value="%s" label="%s" help="%s" type="%s"/>' % (x.split(',')[0],html_escape(x.split(',')[1]),html_escape(x.split(',')[2]),
6a3c292412fa Uploaded
fubar
parents: 0
diff changeset
437 html_escape(x.split(',')[3]), x.split(',')[4]) for x in self.opts.additional_parameters])
6a3c292412fa Uploaded
fubar
parents: 0
diff changeset
438 xdict['additionalParams'] = '\n'.join(['<param name="%s" value="%s" />' % (x.split(',')[0],html_escape(x.split(',')[1])) for x in self.opts.additional_parameters])
0
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
439 xdict['requirements'] = ''
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
440 if self.opts.make_HTML:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
441 if self.opts.include_dependencies == "yes":
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
442 xdict['requirements'] = protorequirements
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
443 xdict['tool_version'] = self.opts.tool_version
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
444 xdict['test1HTML'] = self.test1HTML
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
445 xdict['test1Output'] = self.test1Output
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
446 xdict['test1Inputs'] = self.test1Inputs
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
447 if self.opts.make_HTML and self.opts.output_tab:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
448 xdict['tooltests'] = tooltestsBoth % xdict
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
449 elif self.opts.make_HTML:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
450 xdict['tooltests'] = tooltestsHTMLOnly % xdict
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
451 else:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
452 xdict['tooltests'] = tooltestsTabOnly % xdict
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
453 xdict['script'] = self.escapedScript
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
454 # configfile is least painful way to embed script to avoid external dependencies
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
455 # but requires escaping of <, > and $ to avoid Mako parsing
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
456 if self.opts.help_text:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
457 helptext = open(self.opts.help_text,'r').readlines()
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
458 helptext = [html_escape(x) for x in helptext] # must html escape here too - thanks to Marius van den Beek
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
459 xdict['help'] = ''.join([x for x in helptext])
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
460 else:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
461 xdict['help'] = 'Please ask the tool author (%s) for help as none was supplied at tool generation\n' % (self.opts.user_email)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
462 coda = ['**Script**','Pressing execute will run the following code over your input file and generate some outputs in your history::']
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
463 coda.append('\n')
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
464 coda.append(self.indentedScript)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
465 coda.append('\n**Attribution**\nThis Galaxy tool was created by %s at %s\nusing the Galaxy Tool Factory.\n' % (self.opts.user_email,timenow()))
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
466 coda.append('See %s for details of that project' % (toolFactoryURL))
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
467 coda.append('Please cite: Creating re-usable tools from scripts: The Galaxy Tool Factory. Ross Lazarus; Antony Kaspi; Mark Ziemann; The Galaxy Team. ')
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
468 coda.append('Bioinformatics 2012; doi: 10.1093/bioinformatics/bts573\n')
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
469 xdict['help'] = '%s\n%s' % (xdict['help'],'\n'.join(coda))
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
470 if self.opts.tool_desc:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
471 xdict['tooldesc'] = '<description>%s</description>' % self.opts.tool_desc
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
472 else:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
473 xdict['tooldesc'] = ''
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
474 xdict['command_outputs'] = ''
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
475 xdict['outputs'] = ''
2
6a3c292412fa Uploaded
fubar
parents: 0
diff changeset
476 if self.opts.input_tab:
0
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
477 cins = ['\n',]
2
6a3c292412fa Uploaded
fubar
parents: 0
diff changeset
478 cins.append('--input_formats %s' % self.opts.input_formats)
0
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
479 cins.append('#for intab in $input1:')
2
6a3c292412fa Uploaded
fubar
parents: 0
diff changeset
480 cins.append('--input_tab "${intab},${intab.name}"')
0
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
481 cins.append('#end for\n')
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
482 xdict['command_inputs'] = '\n'.join(cins)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
483 xdict['inputs'] = '''<param name="input_tab" multiple="true" type="data" format="%s" label="Select one or more %s input files from your history"
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
484 help="Multiple inputs may be selected assuming the script can deal with them..."/> \n''' % (self.inputFormats,self.inputFormats)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
485 else:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
486 xdict['command_inputs'] = '' # assume no input - eg a random data generator
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
487 xdict['inputs'] = ''
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
488 if (len(self.opts.additional_parameters) > 0):
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
489 cins = ['\n',]
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
490 for params in self.opts.additional_parameters:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
491 psplit = params.split(',') # name,value...
2
6a3c292412fa Uploaded
fubar
parents: 0
diff changeset
492 psplit[3] = html_escape(psplit[3])
6a3c292412fa Uploaded
fubar
parents: 0
diff changeset
493 if self.opts.edit_additional_parameters:
6a3c292412fa Uploaded
fubar
parents: 0
diff changeset
494 psplit[1] = '$%s' % psplit[0] # replace with form value
6a3c292412fa Uploaded
fubar
parents: 0
diff changeset
495 else:
6a3c292412fa Uploaded
fubar
parents: 0
diff changeset
496 psplit[1] = html_escape(psplit[1]) # leave prespecified value
6a3c292412fa Uploaded
fubar
parents: 0
diff changeset
497 cins.append('--additional_parameters """%s"""' % ','.join(psplit))
0
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
498 xdict['command_inputs'] = '%s\n%s' % (xdict['command_inputs'],'\n'.join(cins))
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
499 xdict['inputs'] += '<param name="job_name" type="text" size="60" label="Supply a name for the outputs to remind you what they contain" value="%s"/> \n' % self.toolname
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
500 xdict['toolname'] = self.toolname
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
501 xdict['toolid'] = self.toolid
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
502 xdict['interpreter'] = self.opts.interpreter
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
503 xdict['scriptname'] = self.sfile
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
504 if self.opts.make_HTML:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
505 xdict['command_outputs'] += ' --output_dir "$html_file.files_path" --output_html "$html_file" --make_HTML "yes"'
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
506 xdict['outputs'] += ' <data format="html" name="html_file" label="${job_name}.html"/>\n'
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
507 else:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
508 xdict['command_outputs'] += ' --output_dir "./"'
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
509 if self.opts.output_tab:
3
d75fd880fce2 Uploaded
fubar
parents: 2
diff changeset
510 xdict['command_outputs'] += ' --output_tab "$output1"'
0
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
511 xdict['outputs'] += ' <data format="%s" name="output1" label="${job_name}"/>\n' % self.outFormats
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
512 xdict['command'] = newCommand % xdict
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
513 if self.opts.citations:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
514 citationstext = open(self.opts.citations,'r').read()
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
515 citation_tuples = parse_citations(citationstext)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
516 citations_xml = ""
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
517 for citation_type, citation_content in citation_tuples:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
518 citation_xml = """<citation type="%s">%s</citation>""" % (citation_type, html_escape(citation_content))
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
519 citations_xml += citation_xml
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
520 xdict['citations'] = citations_xml
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
521 else:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
522 xdict['citations'] = ""
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
523 xmls = newXML % xdict
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
524 xf = open(self.xmlfile,'w')
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
525 xf.write(xmls)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
526 xf.write('\n')
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
527 xf.close()
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
528 # ready for the tarball
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
529
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
530
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
531 def makeTooltar(self):
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
532 """
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
533 a tool is a gz tarball with eg
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
534 /toolname/tool.xml /toolname/tool.py /toolname/test-data/test1_in.foo ...
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
535 """
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
536 retval = self.run()
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
537 if retval:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
538 print >> sys.stderr,'## Run failed. Cannot build yet. Please fix and retry'
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
539 sys.exit(1)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
540 tdir = self.toolname
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
541 os.mkdir(tdir)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
542 self.makeXML()
2
6a3c292412fa Uploaded
fubar
parents: 0
diff changeset
543 if self.opts.help_text:
6a3c292412fa Uploaded
fubar
parents: 0
diff changeset
544 hlp = open(self.opts.help_text,'r').read()
6a3c292412fa Uploaded
fubar
parents: 0
diff changeset
545 else:
6a3c292412fa Uploaded
fubar
parents: 0
diff changeset
546 hlp = 'Please ask the tool author for help as none was supplied at tool generation\n'
6a3c292412fa Uploaded
fubar
parents: 0
diff changeset
547 if self.opts.include_dependencies == "yes":
6a3c292412fa Uploaded
fubar
parents: 0
diff changeset
548 tooldepcontent = toolhtmldepskel % hlp
6a3c292412fa Uploaded
fubar
parents: 0
diff changeset
549 else:
6a3c292412fa Uploaded
fubar
parents: 0
diff changeset
550 tooldepcontent = emptytoolhtmldepskel % hlp
6a3c292412fa Uploaded
fubar
parents: 0
diff changeset
551 depf = open(os.path.join(tdir,'tool_dependencies.xml'),'w')
6a3c292412fa Uploaded
fubar
parents: 0
diff changeset
552 depf.write(tooldepcontent)
6a3c292412fa Uploaded
fubar
parents: 0
diff changeset
553 depf.write('\n')
6a3c292412fa Uploaded
fubar
parents: 0
diff changeset
554 depf.close()
6a3c292412fa Uploaded
fubar
parents: 0
diff changeset
555 if self.opts.input_tab: # no reproducible test otherwise? TODO: maybe..
0
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
556 testdir = os.path.join(tdir,'test-data')
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
557 os.mkdir(testdir) # make tests directory
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
558 for i,intab in enumerate(self.opts.input_tab):
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
559 si = self.opts.input_tab[i]
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
560 if si.find(',') <> -1:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
561 s = si.split(',')[0]
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
562 si = s
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
563 dest = os.path.join(testdir,os.path.basename(si))
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
564 if si <> dest:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
565 shutil.copyfile(si,dest)
2
6a3c292412fa Uploaded
fubar
parents: 0
diff changeset
566 if self.opts.output_tab:
0
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
567 shutil.copyfile(self.opts.output_tab,os.path.join(testdir,self.test1Output))
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
568 if self.opts.make_HTML:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
569 shutil.copyfile(self.opts.output_html,os.path.join(testdir,self.test1HTML))
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
570 if self.opts.output_dir:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
571 shutil.copyfile(self.tlog,os.path.join(testdir,'test1_out.log'))
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
572 outpif = '%s.py' % self.toolname # new name
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
573 outpiname = os.path.join(tdir,outpif) # path for the tool tarball
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
574 pyin = os.path.basename(self.pyfile) # our name - we rewrite ourselves (TM)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
575 notes = ['# %s - a self annotated version of %s generated by running %s\n' % (outpiname,pyin,pyin),]
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
576 notes.append('# to make a new Galaxy tool called %s\n' % self.toolname)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
577 notes.append('# User %s at %s\n' % (self.opts.user_email,timenow()))
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
578 pi = open(self.pyfile,'r').readlines() # our code becomes new tool wrapper (!) - first Galaxy worm
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
579 notes += pi
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
580 outpi = open(outpiname,'w')
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
581 outpi.write(''.join(notes))
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
582 outpi.write('\n')
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
583 outpi.close()
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
584 stname = os.path.join(tdir,self.sfile)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
585 if not os.path.exists(stname):
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
586 shutil.copyfile(self.sfile, stname)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
587 xtname = os.path.join(tdir,self.xmlfile)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
588 if not os.path.exists(xtname):
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
589 shutil.copyfile(self.xmlfile,xtname)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
590 tarpath = "%s.tar.gz" % self.toolname
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
591 tar = tarfile.open(tarpath, "w:gz")
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
592 tar.add(tdir,arcname='%s' % self.toolname)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
593 tar.close()
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
594 shutil.copyfile(tarpath,self.opts.new_tool)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
595 shutil.rmtree(tdir)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
596 ## TODO: replace with optional direct upload to local toolshed?
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
597 return retval
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
598
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
599
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
600 def compressPDF(self,inpdf=None,thumbformat='png'):
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
601 """need absolute path to pdf
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
602 note that GS gets confoozled if no $TMP or $TEMP
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
603 so we set it
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
604 """
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
605 assert os.path.isfile(inpdf), "## Input %s supplied to %s compressPDF not found" % (inpdf,self.myName)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
606 hlog = os.path.join(self.opts.output_dir,"compress_%s.txt" % os.path.basename(inpdf))
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
607 sto = open(hlog,'a')
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
608 our_env = os.environ.copy()
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
609 our_tmp = our_env.get('TMP',None)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
610 if not our_tmp:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
611 our_tmp = our_env.get('TEMP',None)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
612 if not (our_tmp and os.path.exists(our_tmp)):
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
613 newtmp = os.path.join(self.opts.output_dir,'tmp')
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
614 try:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
615 os.mkdir(newtmp)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
616 except:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
617 sto.write('## WARNING - cannot make %s - it may exist or permissions need fixing\n' % newtmp)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
618 our_env['TEMP'] = newtmp
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
619 if not self.temp_warned:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
620 sto.write('## WARNING - no $TMP or $TEMP!!! Please fix - using %s temporarily\n' % newtmp)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
621 self.temp_warned = True
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
622 outpdf = '%s_compressed' % inpdf
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
623 cl = ["gs", "-sDEVICE=pdfwrite", "-dNOPAUSE", "-dUseCIEColor", "-dBATCH","-dPDFSETTINGS=/printer", "-sOutputFile=%s" % outpdf,inpdf]
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
624 x = subprocess.Popen(cl,stdout=sto,stderr=sto,cwd=self.opts.output_dir,env=our_env)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
625 retval1 = x.wait()
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
626 sto.close()
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
627 if retval1 == 0:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
628 os.unlink(inpdf)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
629 shutil.move(outpdf,inpdf)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
630 os.unlink(hlog)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
631 hlog = os.path.join(self.opts.output_dir,"thumbnail_%s.txt" % os.path.basename(inpdf))
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
632 sto = open(hlog,'w')
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
633 outpng = '%s.%s' % (os.path.splitext(inpdf)[0],thumbformat)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
634 if self.useGM:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
635 cl2 = ['gm', 'convert', inpdf, outpng]
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
636 else: # assume imagemagick
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
637 cl2 = ['convert', inpdf, outpng]
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
638 x = subprocess.Popen(cl2,stdout=sto,stderr=sto,cwd=self.opts.output_dir,env=our_env)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
639 retval2 = x.wait()
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
640 sto.close()
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
641 if retval2 == 0:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
642 os.unlink(hlog)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
643 retval = retval1 or retval2
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
644 return retval
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
645
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
646
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
647 def getfSize(self,fpath,outpath):
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
648 """
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
649 format a nice file size string
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
650 """
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
651 size = ''
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
652 fp = os.path.join(outpath,fpath)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
653 if os.path.isfile(fp):
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
654 size = '0 B'
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
655 n = float(os.path.getsize(fp))
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
656 if n > 2**20:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
657 size = '%1.1f MB' % (n/2**20)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
658 elif n > 2**10:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
659 size = '%1.1f KB' % (n/2**10)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
660 elif n > 0:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
661 size = '%d B' % (int(n))
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
662 return size
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
663
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
664 def makeHtml(self):
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
665 """ Create an HTML file content to list all the artifacts found in the output_dir
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
666 """
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
667
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
668 galhtmlprefix = """<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
669 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
670 <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
671 <meta name="generator" content="Galaxy %s tool output - see http://g2.trac.bx.psu.edu/" />
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
672 <title></title>
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
673 <link rel="stylesheet" href="/static/style/base.css" type="text/css" />
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
674 </head>
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
675 <body>
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
676 <div class="toolFormBody">
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
677 """
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
678 galhtmlattr = """<hr/><div class="infomessage">This tool (%s) was generated by the <a href="https://bitbucket.org/fubar/galaxytoolfactory/overview">Galaxy Tool Factory</a></div><br/>"""
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
679 galhtmlpostfix = """</div></body></html>\n"""
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
680
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
681 flist = os.listdir(self.opts.output_dir)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
682 flist = [x for x in flist if x <> 'Rplots.pdf']
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
683 flist.sort()
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
684 html = []
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
685 html.append(galhtmlprefix % progname)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
686 html.append('<div class="infomessage">Galaxy Tool "%s" run at %s</div><br/>' % (self.toolname,timenow()))
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
687 fhtml = []
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
688 if len(flist) > 0:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
689 logfiles = [x for x in flist if x.lower().endswith('.log')] # log file names determine sections
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
690 logfiles.sort()
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
691 logfiles = [x for x in logfiles if os.path.abspath(x) <> os.path.abspath(self.tlog)]
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
692 logfiles.append(os.path.abspath(self.tlog)) # make it the last one
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
693 pdflist = []
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
694 npdf = len([x for x in flist if os.path.splitext(x)[-1].lower() == '.pdf'])
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
695 for rownum,fname in enumerate(flist):
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
696 dname,e = os.path.splitext(fname)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
697 sfsize = self.getfSize(fname,self.opts.output_dir)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
698 if e.lower() == '.pdf' : # compress and make a thumbnail
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
699 thumb = '%s.%s' % (dname,self.thumbformat)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
700 pdff = os.path.join(self.opts.output_dir,fname)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
701 retval = self.compressPDF(inpdf=pdff,thumbformat=self.thumbformat)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
702 if retval == 0:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
703 pdflist.append((fname,thumb))
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
704 else:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
705 pdflist.append((fname,fname))
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
706 if (rownum+1) % 2 == 0:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
707 fhtml.append('<tr class="odd_row"><td><a href="%s">%s</a></td><td>%s</td></tr>' % (fname,fname,sfsize))
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
708 else:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
709 fhtml.append('<tr><td><a href="%s">%s</a></td><td>%s</td></tr>' % (fname,fname,sfsize))
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
710 for logfname in logfiles: # expect at least tlog - if more
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
711 if os.path.abspath(logfname) == os.path.abspath(self.tlog): # handled later
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
712 sectionname = 'All tool run'
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
713 if (len(logfiles) > 1):
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
714 sectionname = 'Other'
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
715 ourpdfs = pdflist
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
716 else:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
717 realname = os.path.basename(logfname)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
718 sectionname = os.path.splitext(realname)[0].split('_')[0] # break in case _ added to log
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
719 ourpdfs = [x for x in pdflist if os.path.basename(x[0]).split('_')[0] == sectionname]
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
720 pdflist = [x for x in pdflist if os.path.basename(x[0]).split('_')[0] <> sectionname] # remove
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
721 nacross = 1
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
722 npdf = len(ourpdfs)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
723
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
724 if npdf > 0:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
725 nacross = math.sqrt(npdf) ## int(round(math.log(npdf,2)))
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
726 if int(nacross)**2 != npdf:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
727 nacross += 1
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
728 nacross = int(nacross)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
729 width = min(400,int(1200/nacross))
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
730 html.append('<div class="toolFormTitle">%s images and outputs</div>' % sectionname)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
731 html.append('(Click on a thumbnail image to download the corresponding original PDF image)<br/>')
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
732 ntogo = nacross # counter for table row padding with empty cells
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
733 html.append('<div><table class="simple" cellpadding="2" cellspacing="2">\n<tr>')
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
734 for i,paths in enumerate(ourpdfs):
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
735 fname,thumb = paths
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
736 s= """<td><a href="%s"><img src="%s" title="Click to download a PDF of %s" hspace="5" width="%d"
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
737 alt="Image called %s"/></a></td>\n""" % (fname,thumb,fname,width,fname)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
738 if ((i+1) % nacross == 0):
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
739 s += '</tr>\n'
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
740 ntogo = 0
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
741 if i < (npdf - 1): # more to come
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
742 s += '<tr>'
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
743 ntogo = nacross
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
744 else:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
745 ntogo -= 1
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
746 html.append(s)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
747 if html[-1].strip().endswith('</tr>'):
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
748 html.append('</table></div>\n')
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
749 else:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
750 if ntogo > 0: # pad
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
751 html.append('<td>&nbsp;</td>'*ntogo)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
752 html.append('</tr></table></div>\n')
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
753 logt = open(logfname,'r').readlines()
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
754 logtext = [x for x in logt if x.strip() > '']
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
755 html.append('<div class="toolFormTitle">%s log output</div>' % sectionname)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
756 if len(logtext) > 1:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
757 html.append('\n<pre>\n')
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
758 html += logtext
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
759 html.append('\n</pre>\n')
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
760 else:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
761 html.append('%s is empty<br/>' % logfname)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
762 if len(fhtml) > 0:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
763 fhtml.insert(0,'<div><table class="colored" cellpadding="3" cellspacing="3"><tr><th>Output File Name (click to view)</th><th>Size</th></tr>\n')
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
764 fhtml.append('</table></div><br/>')
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
765 html.append('<div class="toolFormTitle">All output files available for downloading</div>\n')
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
766 html += fhtml # add all non-pdf files to the end of the display
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
767 else:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
768 html.append('<div class="warningmessagelarge">### Error - %s returned no files - please confirm that parameters are sane</div>' % self.opts.interpreter)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
769 html.append(galhtmlpostfix)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
770 htmlf = file(self.opts.output_html,'w')
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
771 htmlf.write('\n'.join(html))
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
772 htmlf.write('\n')
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
773 htmlf.close()
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
774 self.html = html
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
775
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
776
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
777 def run(self):
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
778 """
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
779 scripts must be small enough not to fill the pipe!
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
780 """
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
781 if self.treatbashSpecial and self.opts.interpreter in ['bash','sh']:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
782 retval = self.runBash()
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
783 else:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
784 if self.opts.output_dir:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
785 ste = open(self.elog,'w')
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
786 sto = open(self.tlog,'w')
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
787 sto.write('## Toolfactory generated command line = %s\n' % ' '.join(self.cl))
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
788 sto.flush()
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
789 p = subprocess.Popen(self.cl,shell=False,stdout=sto,stderr=ste,stdin=subprocess.PIPE,cwd=self.opts.output_dir)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
790 else:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
791 p = subprocess.Popen(self.cl,shell=False,stdin=subprocess.PIPE)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
792 p.stdin.write(self.script)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
793 p.stdin.close()
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
794 retval = p.wait()
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
795 if self.opts.output_dir:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
796 sto.close()
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
797 ste.close()
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
798 err = open(self.elog,'r').readlines()
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
799 if retval <> 0 and err: # problem
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
800 print >> sys.stderr,err
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
801 if self.opts.make_HTML:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
802 self.makeHtml()
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
803 return retval
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
804
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
805 def runBash(self):
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
806 """
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
807 cannot use - for bash so use self.sfile
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
808 """
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
809 if self.opts.output_dir:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
810 s = '## Toolfactory generated command line = %s\n' % ' '.join(self.cl)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
811 sto = open(self.tlog,'w')
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
812 sto.write(s)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
813 sto.flush()
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
814 p = subprocess.Popen(self.cl,shell=False,stdout=sto,stderr=sto,cwd=self.opts.output_dir)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
815 else:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
816 p = subprocess.Popen(self.cl,shell=False)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
817 retval = p.wait()
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
818 if self.opts.output_dir:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
819 sto.close()
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
820 if self.opts.make_HTML:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
821 self.makeHtml()
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
822 return retval
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
823
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
824
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
825 def main():
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
826 u = """
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
827 This is a Galaxy wrapper. It expects to be called by a special purpose tool.xml as:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
828 <command interpreter="python">rgBaseScriptWrapper.py --script_path "$scriptPath" --tool_name "foo" --interpreter "Rscript"
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
829 </command>
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
830 """
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
831 op = optparse.OptionParser()
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
832 a = op.add_option
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
833 a('--script_path',default=None)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
834 a('--tool_name',default=None)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
835 a('--interpreter',default=None)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
836 a('--output_dir',default='./')
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
837 a('--output_html',default=None)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
838 a('--input_tab',default=[], action="append") # these are "galaxypath,metadataname" pairs
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
839 a("--input_formats",default="tabular")
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
840 a('--output_tab',default=None)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
841 a('--output_format',default='tabular')
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
842 a('--user_email',default='Unknown')
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
843 a('--bad_user',default=None)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
844 a('--make_Tool',default=None)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
845 a('--make_HTML',default=None)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
846 a('--help_text',default=None)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
847 a('--tool_desc',default=None)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
848 a('--new_tool',default=None)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
849 a('--tool_version',default=None)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
850 a('--include_dependencies',default="yes")
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
851 a('--citations',default=None)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
852 a('--additional_parameters', dest='additional_parameters', action='append', default=[])
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
853 a('--edit_additional_parameters', action="store_true", default=False)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
854 opts, args = op.parse_args()
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
855 assert not opts.bad_user,'UNAUTHORISED: %s is NOT authorized to use this tool until Galaxy admin adds %s to admin_users in universe_wsgi.ini' % (opts.bad_user,opts.bad_user)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
856 assert opts.tool_name,'## Tool Factory expects a tool name - eg --tool_name=DESeq'
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
857 assert opts.interpreter,'## Tool Factory wrapper expects an interpreter - eg --interpreter=Rscript'
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
858 assert os.path.isfile(opts.script_path),'## Tool Factory wrapper expects a script path - eg --script_path=foo.R'
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
859 if opts.output_dir:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
860 try:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
861 os.makedirs(opts.output_dir)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
862 except:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
863 pass
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
864 opts.input_tab = [x.replace('"','').replace("'",'') for x in opts.input_tab]
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
865 for i,x in enumerate(opts.additional_parameters): # remove quotes we need to deal with spaces in CL params
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
866 opts.additional_parameters[i] = opts.additional_parameters[i].replace('"','')
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
867 r = ScriptRunner(opts)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
868 if opts.make_Tool:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
869 retcode = r.makeTooltar()
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
870 else:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
871 retcode = r.run()
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
872 os.unlink(r.sfile)
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
873 if retcode:
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
874 sys.exit(retcode) # indicate failure to job runner
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
875
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
876
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
877 if __name__ == "__main__":
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
878 main()
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
879
c34063ab3735 Initial commit of code in iuc github repository
fubar
parents:
diff changeset
880