Yes, you can still use the framework to create interactive python-only
visualizations. The simplest way to do this is form-based interaction.
1. The visualization mako page renders a form that contains the options the
user can choose from
2. The user chooses and submits the form
3. Galaxy will re-render the visualization mako and now, since those
options are passed as parameters, the chosen visualization can be rendered
So you can render the form with your options:
%if not query.get( 'param2', None ):
## initial render of form
Draw
%else:
## second render drawing with param2
...
Note: this will default to a GET based form whose 'action' url will be the
visualization's url. Any html5 form based controls will work: radio
buttons, ranges, etc.
When the user submits the form, each of the params, will now be part of the
query string when the mako renders the second time:
/visualization/show/myvis?param2=somethingĀ¶m3=...
You can then use these params to call your python code with the user chosen
options:
arg2 = query.get( 'param2', default )
arg3 = query.get( 'param3', ...
from draw import main
returned = main( arg2, arg3, ... )
${ returned }
(or something similar)
Other things that may help?:
- you can use action="post" if you want to post data instead of get -
handy for larger parameters
- try to not bootstrap/load all your data into the mako file as this
will be re-fetched everytime the form is re-submitted
- you can add the arg2, arg3, etc. params to the config file and the
registry will parse those for you and put them in the template's 'config'
variable, e.g.: int_param2 = config.param2
- when using these query/form parameters you can now save/generate urls
that will auto-start your visualizations since all the configuration
options are sent in the url
Let me know if I can give more info or that doesn't end up working.
On Wed, Aug 19, 2015 at 9:30 AM, Anne Claire Fouilloux <
a.c.fouill...@geo.uio.no> wrote:
> Hi Carl,
>
>
> Yes I have a python code to manipulate and draw the data (it creates svg
> files and I wish to add this visualization tool to my galaxy instance:
>
> Let's say my composite datatype contains 3 files:
>
> -file1.dat
>
> -file2.dat
>
> -file3.dat
>
> My python code takes 4 arguments (for instance draw.py arg1 arg2 arg3
> arg4).
>
> arg1: The first argument is a path giving the location of these 3 files.
>
> arg2, arg3 and arg4 are list of options. These lists are dynamic as they
> depend on the content of these 3 files.
>
> Once the user has selected some options, I have a "draw" button and would
> like the python script draw.py to be executed and generate a plot.
>
> Your answer was very helpful; at least it clarifies a number of things.
> Now I understood I can access to these files using hda.extra_files_path in
> my mako file:
>
> <%
>
> composite_file_path=hda.extra_files_path + '/' + date + '/'
>
> %>
>
> Which is helpful to generate my select buttons (for arg2, arg3 and arg4)
> as I fist need to read the content of these files for the generation of
> these buttons.
>
>
> I still need to call my python script with the option chosen by the user.
> Is it something I can easily do with galaxy?
>
>
> Thanks,
>
>
> Anne.
>
>
>
> --
> *From:* Carl Eberhard
> *Sent:* 18 August 2015 18:59
> *To:* Anne Claire Fouilloux
> *Cc:* galaxy-dev@lists.galaxyproject.org
> *Subject:* Re: [galaxy-dev] new visualization tool for composite datatype?
>
> Hi, Anne
>
> Can you be more specific about how you'd like to visualize the files? It
> sounds like you've already got a tool that will build an html file which is
> the classic way to make visualizations with galaxy.
>
> Now you'd like to make it more interactive? Do you already have javascript
> or python code that will be used to manipulate or draw the data? The
> visualization registry will help you link a user's data to your
> visualization code but will not create the code that does the rendering or
> interaction.
>
> Aside from that, if you know the structure and filenames of your
> composite's extra files directory, currently you can access those files
> using:
> api/histories/{history_id}/contents/{content_id}/display?filename= file>
> The meme type will be guessed based on the extension generally and more
> complex paths can also be specified using the filename parameter.
>
> So, for example, if I have a FastQC Html composite file with an extra
> files path of:
> database/files/000/dataset_83_files
>
> And within that directory, fastqc makes an additional su