Mercurial > repos > fubar > tool_factory_2
changeset 9:ce5ec1d989fd draft
Uploaded
author | fubar |
---|---|
date | Wed, 14 Jan 2015 19:17:11 -0500 |
parents | 9d58cc32a12d |
children | 8de2b7571d98 |
files | getlocalrpackages.py rgToolFactory2.py rgToolFactory2.xml test-data/tf2_test.html test-data/tf2_test.toolshed.gz |
diffstat | 5 files changed, 80 insertions(+), 19 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/getlocalrpackages.py Wed Jan 14 19:17:11 2015 -0500 @@ -0,0 +1,31 @@ +import os +import subprocess + +def find_packages(prefix="package_r_"): + """ + """ + #locate env.sh | grep -i package_r_ + #/data/extended/galaxyJune14_2014/tool_dependency/readline/6.2/devteam/package_r_2_15_0/8ab0d08a3da1/env.sh + #/data/home/rlazarus/galaxy/tool_dependency_dir/R_3_1_1/3.1.1/fubar/package_r_3_1_1/5f1b8d22140a/env.sh + #/data/home/rlazarus/galaxy/tool_dependency_dir/R_3_1_1/3.1.1/fubar/package_r_3_1_1/d9964efbfbe3/env.sh + #/data/home/rlazarus/galtest/tool_dependency_dir/R_3_1_1/3.1.1/fubar/package_r_3_1_1/63cdb9b2234c/env.sh + eprefix = prefix + if prefix.find('/') <> -1: + eprefix = prefix.replace('/','\/') # for grep + cl = ['locate env.sh | grep -i %s' % eprefix,] + p = subprocess.Popen(cl, stdout=subprocess.PIPE, stderr=subprocess.PIPE,shell=True) + out, err = p.communicate() + fpaths = out.split('\n') + fpaths = [x for x in fpaths if len(x) > 1] + fver = [x.split(os.path.sep)[-4:-1] for x in fpaths] + # >>> foo.split(os.path.sep)[-4:-1] + # ['fubar', 'package_r_3_1_1', '63cdb9b2234c'] + res = [['%s rev %s owner %s' % (x[1],x[2],x[0]),fpaths[i],False] for i,x in enumerate(fver)] + res.insert(0,['Use default (system) interpreter','system',False]) + if len(res) > 1: + res[1][2] = True # selected if more than one + # return a triplet - user_sees,value,selected - all unselected if False + return res + +if __name__ == "__main__": + print find_packages()
--- a/rgToolFactory2.py Mon Jan 12 05:27:52 2015 -0500 +++ b/rgToolFactory2.py Wed Jan 14 19:17:11 2015 -0500 @@ -172,7 +172,20 @@ citation_tuples.append( ("bibtex", citation[len("bibtex"):].strip() ) ) return citation_tuples - +def shell_source(script): + """need a way to source a Galaxy tool interpreter env.sh so we can use that dependency + package + see http://pythonwise.blogspot.fr/2010/04/sourcing-shell-script.html + Sometime you want to emulate the action of "source" in bash, + settings some environment variables. Here is a way to do it. + Note that we have to finesse the automagic exports using nulls as newlines for env""" + pipe = subprocess.Popen("env -i ; . %s ; env -0" % script, stdout=subprocess.PIPE, shell=True) + output = pipe.communicate()[0] + outl = output.split('\0') + outl = [x for x in outl if len(x.split("=")) == 2] + newenv = dict((line.split("=", 1) for line in outl)) + os.environ.update(newenv) + class ScriptRunner: """class is a wrapper for an arbitrary script """ @@ -218,10 +231,7 @@ self.test1Inputs = [] # now a list a = self.cl.append a(opts.interpreter) - if self.treatbashSpecial and opts.interpreter in ['bash','sh']: - a(self.sfile) - else: - a('-') # stdin + a(self.sfile) # if multiple inputs - positional or need to distinguish them with cl params if opts.input_tab: tests = [] @@ -391,7 +401,8 @@ %(citations)s <citation type="doi">10.1093/bioinformatics/bts573</citation> </citations> -</tool>""" # needs a dict with toolname, toolid, interpreter, scriptname, command, inputs as a multi line string ready to write, outputs ditto, help ditto +</tool>""" +# needs a dict with toolname, toolid, interpreter, scriptname, command, inputs as a multi line string ready to write, outputs ditto, help ditto newCommand=""" %(toolname)s.py --script_path "$runMe" --interpreter "%(interpreter)s" @@ -433,8 +444,8 @@ xdict['additionalInputs'] = '' if self.opts.additional_parameters: if self.opts.edit_additional_parameters: # add to new tool form with default value set to original value - 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]), - html_escape(x.split(',')[3]), x.split(',')[4]) for x in self.opts.additional_parameters]) + 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]),html_escape(x.split(',')[3]), x.split(',')[4]) for x in self.opts.additional_parameters]) xdict['additionalParams'] = '\n'.join(['<param name="%s" value="%s" />' % (x.split(',')[0],html_escape(x.split(',')[1])) for x in self.opts.additional_parameters]) xdict['requirements'] = '' if self.opts.make_HTML: @@ -774,10 +785,13 @@ self.html = html + def run(self): """ scripts must be small enough not to fill the pipe! """ + if self.opts.envshpath <> 'system': + shell_source(self.opts.envshpath) if self.treatbashSpecial and self.opts.interpreter in ['bash','sh']: retval = self.runBash() else: @@ -786,11 +800,9 @@ sto = open(self.tlog,'w') sto.write('## Toolfactory generated command line = %s\n' % ' '.join(self.cl)) sto.flush() - p = subprocess.Popen(self.cl,shell=False,stdout=sto,stderr=ste,stdin=subprocess.PIPE,cwd=self.opts.output_dir) + p = subprocess.Popen(self.cl,shell=False,stdout=sto,stderr=ste,cwd=self.opts.output_dir) else: - p = subprocess.Popen(self.cl,shell=False,stdin=subprocess.PIPE) - p.stdin.write(self.script) - p.stdin.close() + p = subprocess.Popen(self.cl,shell=False) retval = p.wait() if self.opts.output_dir: sto.close() @@ -851,6 +863,7 @@ a('--citations',default=None) a('--additional_parameters', dest='additional_parameters', action='append', default=[]) a('--edit_additional_parameters', action="store_true", default=False) + a('--envshpath',default="system") opts, args = op.parse_args() 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) assert opts.tool_name,'## Tool Factory expects a tool name - eg --tool_name=DESeq'
--- a/rgToolFactory2.xml Mon Jan 12 05:27:52 2015 -0500 +++ b/rgToolFactory2.xml Wed Jan 14 19:17:11 2015 -0500 @@ -1,15 +1,17 @@ -<tool id="rgTF2" name="Tool Factory Two" version="1.15"> +<tool id="rgTF2" name="Tool Factory Two" version="1.16"> <description>Scripts into tools</description> <requirements> <requirement type="package" version="9.10">ghostscript</requirement> <requirement type="package" version="1.3.20">graphicsmagick</requirement> </requirements> + <code file="getlocalrpackages.py"/> <command interpreter="python"> #if ( $__user_email__ not in $__admin_users__ ): rgToolFactory2.py --bad_user $__user_email__ #else: - rgToolFactory2.py --script_path "$runme" --interpreter "$interpreter" + rgToolFactory2.py --script_path "$runme" --interpreter "$interp.interpreter" --tool_name "$tool_name" --user_email "$__user_email__" --citations "$citeme" + --envshpath "$interp.envpath" #if $make_TAB.value=="yes": --output_tab "$output1" @@ -96,7 +98,7 @@ </param> <when value="doi"> <param name="doi" label="DOI" type="text" value="" - help="Supply a DOI (e.g. 10.1111/j.1740-9713.2007.00258.x) that should be cited when this tool is used in published research." /> + help="Supply a DOI (e.g. doi: 10.1111/j.1740-9713.2007.00258.x) that should be cited when this tool is used in published research." /> </when> <when value="bibtex"> <param name="bibtex" label="BibTex" type="text" area="true" size="8x120" @@ -135,6 +137,7 @@ <column name="value" index="0"/> </options> </param> + <conditional name="interp"> <param name="interpreter" type="select" label="Select the interpreter for your code. This must be available on the path of the execution host"> <option value="Rscript" selected="true">Rscript</option> <option value="python">python</option> @@ -142,6 +145,19 @@ <option value="bash">bash</option> <option value="sh">sh</option> </param> + <when value="Rscript"> + <param name="envpath" type="select" label="Interpreter to use" dynamic_options="find_packages(prefix='package_r_')" + help = "Select the R interpreter to use when running this code - should show all installed tool shed package_r_..." /> + </when> + <when value="python"> + <param name="envpath" type="select" label="Interpreter to use" dynamic_options="find_packages(prefix='package_python_')" + help = "Select the python dependency to use when running this code - should show all installed tool shed package_python_..." /> + </when> + <when value="perl"> + <param name="envpath" type="select" label="Interpreter to use" dynamic_options="find_packages(prefix='package_perl_')" + help = "Select the Perl interpreter to use when running this code - should show all installed tool shed package_perl_..." /> + </when> + </conditional> <param name="edit_params" type="select" label="Add all additional parameters to the generated tool form so they are user editable?" help="If no (default), users will NOT be able to alter any additional parameters. If yes, these will appear on the tool form as text fields with no validation or sanitizing"> <option value="yes">Yes, allow user to edit all additional parameters on the generated tool form</option> @@ -244,6 +260,7 @@ <param name="output_format" value="tabular" /> <param name="input_formats" value="tabular" /> <param name="interpreter" value='python' /> + <param name="envpath" value='system' /> <param name="runme" value="tf2_test_runme.py"/> <output name='output1' file='tf2_test_out.xls' compare='diff' lines_diff = '10'/> <output name='html_file' file="tf2_test.html" compare='diff' lines_diff = '10'/> @@ -418,7 +435,7 @@ </help> <citations> - <citation type="doi">doi: 10.1093/bioinformatics/bts573</citation> + <citation type="doi">10.1093/bioinformatics/bts573</citation> </citations> </tool>
--- a/test-data/tf2_test.html Mon Jan 12 05:27:52 2015 -0500 +++ b/test-data/tf2_test.html Wed Jan 14 19:17:11 2015 -0500 @@ -8,18 +8,18 @@ <body> <div class="toolFormBody"> -<div class="infomessage">Galaxy Tool "tf2_test" run at 02/01/2015 11:50:01</div><br/> +<div class="infomessage">Galaxy Tool "tf2_test" run at 15/01/2015 11:06:33</div><br/> <div class="toolFormTitle">tf2 log output</div> tf2_test_error.log is empty<br/> <div class="toolFormTitle">Other log output</div> -/tmp/tmpsyPOyw/job_working_directory/000/2/dataset_3_files/tf2_test_runner.log is empty<br/> +/tmp/tmp5bLHi4/job_working_directory/000/2/dataset_3_files/tf2_test_runner.log is empty<br/> <div class="toolFormTitle">All output files available for downloading</div> <div><table class="colored" cellpadding="3" cellspacing="3"><tr><th>Output File Name (click to view)</th><th>Size</th></tr> <tr><td><a href="tf2_test.python">tf2_test.python</a></td><td>0 B</td></tr> <tr class="odd_row"><td><a href="tf2_test_error.log">tf2_test_error.log</a></td><td>0 B</td></tr> -<tr><td><a href="tf2_test_runner.log">tf2_test_runner.log</a></td><td>177 B</td></tr> +<tr><td><a href="tf2_test_runner.log">tf2_test_runner.log</a></td><td>216 B</td></tr> </table></div><br/> </div></body></html>