Hi Assaf,

On Thu, Apr 28, 2011 at 7:55 PM, Assaf Gordon <gordon@cshl.edu> wrote:
Leandro Hermida wrote, On 04/28/2011 08:55 AM:
> Hi galaxy developers,
>
> Just want to double-check, there is no way to import some kind of galaxy tool context info into python code you are running for a tool?

Nothing is impossible... just depends on how messy you want to get :)

for me, the following works:
===  python_path.xml  ===
<tool id="cshl_python_path_test" name="pythonpath" description="" >
<command>echo '$input1' &gt; '$output'</command>
       <inputs>
               <param name="input1" type="text" value="10" label="Dummy"/>
       </inputs>
       <code file="python_path_code.py" />
       <outputs>
               <data name="output" format="txt" />
       </outputs>
</tool>
======

==== python_path_code.py =====
from os import path
import sys

def exec_after_process(app, inp_data, out_data, param_dict, tool, stdout, stderr):
       tool_path = path.abspath(tool.tool_dir);
       sys.stderr.write("!!!!! path = %s\n" % (tool_path))
========================

When the tool runs, the following line is printed to STDERR:
======
!!!!! path = /home/gordon/projects/galaxy_dev/tools/cshl_tests
======

Help this helps,
 -gordon

Thanks so much, I never knew of the page https://bitbucket.org/galaxy/galaxy-central/wiki/CustomCode until seeing what you wrote and searching now.  But I have one complication I guess.  My tool is already running a Python code file to dynamically create a drop-down menu using the dynamic_options attribute a la:

<param type="select" dynamic_options="my_options()">
...
<code file="my_options.py"/>

In this function my_options I would need the tool dir path.  How would I be able to combine what you did with this?  Which function runs at the right time before my_options() is executed is it exec_before_process?
 
>
> best,
> leandro
>
> On Fri, Apr 15, 2011 at 8:03 PM, Leandro Hermida <softdev@leandrohermida.com <mailto:softdev@leandrohermida.com>> wrote:
>
>     On Fri, Apr 15, 2011 at 7:27 PM, Peter Cock <p.j.a.cock@googlemail.com <mailto:p.j.a.cock@googlemail.com>> wrote:
>
>         On Thu, Apr 14, 2011 at 2:56 PM, Leandro Hermida
>         <softdev@leandrohermida.com <mailto:softdev@leandrohermida.com>> wrote:
>         > On Thu, Apr 14, 2011 at 3:17 PM, Peter Cock <p.j.a.cock@googlemail.com <mailto:p.j.a.cock@googlemail.com>>
>         > wrote:
>         >>
>         >> For standard Python tools in Galaxy, I'm using
>         >> os.path.split(sys.argv[0])[0]
>         >> to get the path, which on reflection probably should be written as
>         >> os.path.dirname(sys.argv[0]) as you suggest.
>         >>
>         >> What do __file__ and sys.argv[0] give you? The simplest way to debug
>         >> this is to add a print statement, since Galaxy will show the stdout.
>         >>
>         >
>         > Hi Peter,
>         >
>         > __file__ throws an error: global name '__file__' is not defined
>
>         I guess the script is being loaded as a string, and run with eval(...)
>         or something like that. It would also explain why sys.argv[0] would
>         be one of the Galaxy script files.
>
>         > os.path.abspath(os.path.dirname(sys.argv[0])) gives me
>         > /path/to/galaxy/scripts directory which is two levels up from what the tool
>         > directory I want for example /path/to/galaxy/tools/mytool
>
>         So combine that with ../tools/mytool/ and you're done? OK, you have
>         to know the name of the folder your tool *should* be in... so not a
>         perfect solution.
>
>
>     Thanks Peter, yes that's the same idea I did as a quick fix.... also don't like the fact that my tool directory is hard-coded but oh well.  There must be a way within Python in Galaxy importing something from Galaxy that has the current tool directory path, it would seem that Galaxy needs to know this and would store it anyway?
>
>     best,
>     Leandro
>
>