From 84e2e155b34743bc4e920d83965686a0256956d5 Mon Sep 17 00:00:00 2001 From: Kanwei Li Date: Mon, 18 Jul 2011 21:56:23 -0400 Subject: [PATCH] Tools: Add new LibraryDataset tool parameter to expose LDDAs to tools. Use trackster's modal popup interface for item selection. Add new InputWrapper that exposes LDDA templates as well. Refactor tool_form.mako to use base_panels.mako instead of its own custom HTML. --- lib/galaxy/tools/__init__.py | 30 ++ lib/galaxy/tools/parameters/basic.py | 61 +++- lib/galaxy/web/form_builder.py | 21 ++ static/scripts/galaxy.base.js | 1 + static/scripts/galaxy.panels.js | 6 +- templates/base.mako | 16 +- templates/base_panels.mako | 94 ++--- templates/root/index.mako | 18 +- templates/tool_form.mako | 492 ++++++++++++++------------- 9 files changed, 424 insertions(+), 315 deletions(-) diff --git a/lib/galaxy/tools/__init__.py b/lib/galaxy/tools/__init__.py index 9ab16d0ee2d..eb329c1ef72 100755 --- a/lib/galaxy/tools/__init__.py +++ b/lib/galaxy/tools/__init__.py @@ -1463,6 +1463,11 @@ class Tool: elif isinstance( input, SelectToolParameter ): input_values[ input.name ] = SelectToolParameterWrapper( input, input_values[ input.name ], self.app, other_values = param_dict ) + + elif isinstance( input, LibraryDatasetToolParameter ): + input_values[ input.name ] = LibraryDatasetValueWrapper( + input, input_values[ input.name ], param_dict ) + else: input_values[ input.name ] = InputValueWrapper( input, input_values[ input.name ], param_dict ) @@ -2013,6 +2018,31 @@ class RawObjectWrapper( object ): def __getattr__( self, key ): return getattr( self.obj, key ) +class LibraryDatasetValueWrapper( object ): + """ + Wraps an input so that __str__ gives the "param_dict" representation. + """ + def __init__( self, input, value, other_values={} ): + self.input = input + self.value = value + self._other_values = other_values + def __str__( self ): + return self.value.name + def templates( self ): + if not self.value: + return None + template_data = {} + for temp_info in self.value.info_association: + template = temp_info.template + content = temp_info.info.content + tmp_dict = {} + for field in template.fields: + tmp_dict[field['label']] = content[field['name']] + template_data[template.name] = tmp_dict + return template_data + def __getattr__( self, key ): + return getattr( self.value, key ) + class InputValueWrapper( object ): """ Wraps an input so that __str__ gives the "param_dict" representation. diff --git a/lib/galaxy/tools/parameters/basic.py b/lib/galaxy/tools/parameters/basic.py index 4fef3efafe0..9621646b4c6 100644 --- a/lib/galaxy/tools/parameters/basic.py +++ b/lib/galaxy/tools/parameters/basic.py @@ -1272,7 +1272,7 @@ class DataToolParameter( ToolParameter ): displayed as radio buttons and multiple selects as a set of checkboxes TODO: The following must be fixed to test correctly for the new security_check tag in the DataToolParameter ( the last test below is broken ) - Nate's next passs at the dataset security stuff will dramatically alter this anyway. + Nate's next pass at the dataset security stuff will dramatically alter this anyway. """ def __init__( self, tool, elem ): @@ -1522,6 +1522,38 @@ class DataToolParameter( ToolParameter ): ref = ref() return ref +class LibraryDatasetToolParameter( ToolParameter ): + """ + Parameter that lets users select a LDDA from a modal window, then use it within the wrapper. + """ + + def __init__( self, tool, elem ): + ToolParameter.__init__( self, tool, elem ) + + def get_html_field( self, trans=None, value=None, other_values={} ): + return form_builder.LibraryField( self.name, value=value, trans=trans ) + + def get_initial_value( self, trans, context ): + return None + + def from_html( self, value, trans, other_values={} ): + if not value: + return None + elif isinstance( value, trans.app.model.LibraryDatasetDatasetAssociation ): + return value + else: + return trans.sa_session.query( trans.app.model.LibraryDatasetDatasetAssociation ).get( trans.security.decode_id( value ) ) + + def to_string( self, value, app ): + if not value: + return None + return value.id + + def to_python( self, value, app ): + if not value: + return value + return app.model.context.query( app.model.LibraryDatasetDatasetAssociation ).get( value ) + # class RawToolParameter( ToolParameter ): # """ # Completely nondescript parameter, HTML representation is provided as text @@ -1570,19 +1602,20 @@ class DataToolParameter( ToolParameter ): # self.html = form_builder.HiddenField( self.name, trans.history.id ).get_html() # return self.html -parameter_types = dict( text = TextToolParameter, - integer = IntegerToolParameter, - float = FloatToolParameter, - boolean = BooleanToolParameter, - genomebuild = GenomeBuildParameter, - select = SelectToolParameter, - data_column = ColumnListParameter, - hidden = HiddenToolParameter, - baseurl = BaseURLToolParameter, - file = FileToolParameter, - ftpfile = FTPFileToolParameter, - data = DataToolParameter, - drill_down = DrillDownSelectToolParameter ) +parameter_types = dict( text = TextToolParameter, + integer = IntegerToolParameter, + float = FloatToolParameter, + boolean = BooleanToolParameter, + genomebuild = GenomeBuildParameter, + select = SelectToolParameter, + data_column = ColumnListParameter, + hidden = HiddenToolParameter, + baseurl = BaseURLToolParameter, + file = FileToolParameter, + ftpfile = FTPFileToolParameter, + data = DataToolParameter, + library_data = LibraryDatasetToolParameter, + drill_down = DrillDownSelectToolParameter ) class UnvalidatedValue( object ): """ diff --git a/lib/galaxy/web/form_builder.py b/lib/galaxy/web/form_builder.py index fd7a6fd9ba8..b9f79e134a1 100644 --- a/lib/galaxy/web/form_builder.py +++ b/lib/galaxy/web/form_builder.py @@ -652,6 +652,27 @@ class HistoryField( BaseField ): return self.value else: return '-' + +class LibraryField( BaseField ): + def __init__( self, name, value=None, trans=None ): + self.name = name + self.ldda = value + self.trans = trans + def get_html( self, disabled=False ): + if not self.ldda: + ldda = "" + text = "Choose a library dataset" + else: + ldda = self.trans.security.encode_id(self.ldda.id) + text = self.ldda.name + return '%s \ + ' % ( text, self.name, escape( str(ldda), quote=True ) ) + + def get_display_text(self): + if self.ldda: + return self.ldda.name + else: + return 'None' def get_suite(): """Get unittest suite for this module""" diff --git a/static/scripts/galaxy.base.js b/static/scripts/galaxy.base.js index 447a31aeb1b..fa0fe391dd2 100644 --- a/static/scripts/galaxy.base.js +++ b/static/scripts/galaxy.base.js @@ -725,4 +725,5 @@ $(document).ready( function() { } return anchor; }); + }); diff --git a/static/scripts/galaxy.panels.js b/static/scripts/galaxy.panels.js index ba02efe57d0..be187d8fb57 100644 --- a/static/scripts/galaxy.panels.js +++ b/static/scripts/galaxy.panels.js @@ -214,7 +214,7 @@ function show_modal( title, body, buttons, extra_buttons, init_fn ) { init_fn(); } }; - + function show_in_overlay( options ) { var width = options.width || '600'; var height = options.height || '400'; @@ -226,9 +226,9 @@ function show_in_overlay( options ) { show_modal( null, $( "
" ) ); $("#close_button").bind( "click", function() { hide_modal(); } ); } - + // Tab management - + $(function() { $(".tab").each( function() { var submenu = $(this).children( ".submenu" ); diff --git a/templates/base.mako b/templates/base.mako index 998d8f75785..a58ce02430b 100644 --- a/templates/base.mako +++ b/templates/base.mako @@ -1,15 +1,13 @@ <% _=n_ %> - - -${self.title()} - -${self.metas()} -${self.stylesheets()} -${self.javascripts()} - - + + ${self.title()} + + ${self.metas()} + ${self.stylesheets()} + ${self.javascripts()} + ${next.body()} diff --git a/templates/base_panels.mako b/templates/base_panels.mako index 791535ffd91..c9c70257c22 100644 --- a/templates/base_panels.mako +++ b/templates/base_panels.mako @@ -155,13 +155,13 @@ ## Override -<%def name="overlay( title='', content='' )"> +<%def name="overlay( title='', content='', visible=False )"> <%def name="title()"> <%def name="content()">