Difficulties using <repeat> tagset with min attribute
Hi all - I've been trying to get the <repeat>...</repeat> tag working with a min attribute for some time now, though without any success. It works in other tools distributed with Galaxy, but when I attempt to use it in one of our custom tools, it dies with a "AttributeError: 'ExpressionContext' object has no attribute 'keys'" exception. Can anybody offer any insight? The full traceback is: ⇝ AttributeError: 'ExpressionContext' object has no attribute 'keys' URL: http://localhost:8080/tool_runner?tool_id=scde-list-compare Module weberror.evalexception.middleware:364 in respond view >> app_iter = self.application(environ, detect_start_response) Module paste.debug.prints:98 in __call__ view >> environ, self.app) Module paste.wsgilib:539 in intercept_output view >> app_iter = application(environ, replacement_start_response) Module paste.recursive:80 in __call__ view >> return self.application(environ, start_response) Module paste.httpexceptions:632 in __call__ view >> return self.application(environ, start_response) Module galaxy.web.framework.base:160 in __call__ view >> body = method( trans, **kwargs ) Module galaxy.web.controllers.tool_runner:68 in index view >> template, vars = tool.handle_input( trans, params.__dict__ ) Module galaxy.tools:1320 in handle_input view >> state = self.new_state( trans ) Module galaxy.tools:1248 in new_state view >> self.fill_in_new_state( trans, inputs, state.inputs ) Module galaxy.tools:1257 in fill_in_new_state view >> state[ input.name ] = input.get_initial_value( trans, context ) Module galaxy.tools.parameters.grouping:100 in get_initial_value view >> rval_dict[ input.name ] = input.get_initial_value( trans, context ) Module galaxy.tools.parameters.basic:1016 in get_initial_value view >> return SelectToolParameter.get_initial_value( self, trans, context ) Module galaxy.tools.parameters.basic:785 in get_initial_value view >> if self.need_late_validation( trans, context ): Module galaxy.tools.parameters.basic:1022 in need_late_validation view >> if super( ColumnListParameter, self ).need_late_validation( trans, context ): Module galaxy.tools.parameters.basic:766 in need_late_validation view >> for layer in context.itervalues(): Module UserDict:116 in itervalues view >> for _, v in self.iteritems(): Module UserDict:109 in iteritems view >> for k in self: Module UserDict:96 in __iter__ view >> for k in self.keys(): AttributeError: 'ExpressionContext' object has no attribute 'keys'
On Thu, May 3, 2012 at 12:20 AM, Cory Spencer <cspencer@sprocket.org> wrote:
Hi all -
I've been trying to get the <repeat>...</repeat> tag working with a min attribute for some time now, though without any success. It works in other tools distributed with Galaxy, but when I attempt to use it in one of our custom tools, it dies with a "AttributeError: 'ExpressionContext' object has no attribute 'keys'" exception.
Can anybody offer any insight?
The full traceback is:
⇝ AttributeError: 'ExpressionContext' object has no attribute 'keys' URL: http://localhost:8080/tool_runner?tool_id=scde-list-compare Module weberror.evalexception.middleware:364 in respond view >> app_iter = self.application(environ, detect_start_response) Module paste.debug.prints:98 in __call__ view >> environ, self.app) Module paste.wsgilib:539 in intercept_output view >> app_iter = application(environ, replacement_start_response) Module paste.recursive:80 in __call__ view >> return self.application(environ, start_response) Module paste.httpexceptions:632 in __call__ view >> return self.application(environ, start_response) Module galaxy.web.framework.base:160 in __call__ view >> body = method( trans, **kwargs ) Module galaxy.web.controllers.tool_runner:68 in index view >> template, vars = tool.handle_input( trans, params.__dict__ ) Module galaxy.tools:1320 in handle_input view >> state = self.new_state( trans ) Module galaxy.tools:1248 in new_state view >> self.fill_in_new_state( trans, inputs, state.inputs ) Module galaxy.tools:1257 in fill_in_new_state view >> state[ input.name ] = input.get_initial_value( trans, context ) Module galaxy.tools.parameters.grouping:100 in get_initial_value view >> rval_dict[ input.name ] = input.get_initial_value( trans, context ) Module galaxy.tools.parameters.basic:1016 in get_initial_value view >> return SelectToolParameter.get_initial_value( self, trans, context ) Module galaxy.tools.parameters.basic:785 in get_initial_value view >> if self.need_late_validation( trans, context ): Module galaxy.tools.parameters.basic:1022 in need_late_validation view >> if super( ColumnListParameter, self ).need_late_validation( trans, context ): Module galaxy.tools.parameters.basic:766 in need_late_validation view >> for layer in context.itervalues(): Module UserDict:116 in itervalues view >> for _, v in self.iteritems(): Module UserDict:109 in iteritems view >> for k in self: Module UserDict:96 in __iter__ view >> for k in self.keys(): AttributeError: 'ExpressionContext' object has no attribute 'keys'
Hi Cory, Do you remember if you could solve this? I've used <repeat> a few times even with a min value, but just hit the same issue as you: ⇝ AttributeError: 'ExpressionContext' object has no attribute 'keys' URL: http://localhost/galaxy-dev/tool_runner?tool_id=seq_filter_by_id Module weberror.evalexception.middleware:364 in respond view
app_iter = self.application(environ, detect_start_response) Module paste.recursive:84 in __call__ view return self.application(environ, start_response) Module paste.httpexceptions:633 in __call__ view return self.application(environ, start_response) Module galaxy.web.framework.base:132 in __call__ view return self.handle_request( environ, start_response ) Module galaxy.web.framework.base:190 in handle_request view body = method( trans, **kwargs ) Module galaxy.webapps.galaxy.controllers.tool_runner:82 in index view template, vars = tool.handle_input( trans, params.__dict__ ) Module galaxy.tools:1882 in handle_input view state = self.new_state( trans ) Module galaxy.tools:1810 in new_state view self.fill_in_new_state( trans, inputs, state.inputs ) Module galaxy.tools:1819 in fill_in_new_state view state[ input.name ] = input.get_initial_value( trans, context ) Module galaxy.tools.parameters.grouping:104 in get_initial_value view rval_dict[ input.name ] = input.get_initial_value( trans, context ) Module galaxy.tools.parameters.basic:1042 in get_initial_value view return SelectToolParameter.get_initial_value( self, trans, context ) Module galaxy.tools.parameters.basic:808 in get_initial_value view if self.need_late_validation( trans, context ): Module galaxy.tools.parameters.basic:1048 in need_late_validation view if super( ColumnListParameter, self ).need_late_validation( trans, context ): Module galaxy.tools.parameters.basic:789 in need_late_validation view for layer in context.itervalues(): Module UserDict:116 in itervalues view for _, v in self.iteritems(): Module UserDict:109 in iteritems view for k in self: Module UserDict:96 in __iter__ view for k in self.keys(): AttributeError: 'ExpressionContext' object has no attribute 'keys'
I see this when trying to access the tool via the normal Galaxy web interface, and when running the tool's unit tests. Removing the min="1" value 'fixes' this, but I do want at least one entry. The tool in question is here: https://bitbucket.org/peterjc/galaxy-central/commits/806d9526d5e846933bb02c9... On the off chance I was using a special value as the repeat name, I tried changing that - no difference. Thanks, Peter
On Wed, May 8, 2013 at 5:40 PM, Peter Cock <p.j.a.cock@googlemail.com> wrote:
Hi Cory,
Do you remember if you could solve this? I've used <repeat> a few times even with a min value, but just hit the same issue as you:
AttributeError: 'ExpressionContext' object has no attribute 'keys' ... Module galaxy.tools.parameters.grouping:104 in get_initial_value view
rval_dict[ input.name ] = input.get_initial_value( trans, context ) Module galaxy.tools.parameters.basic:1042 in get_initial_value view return SelectToolParameter.get_initial_value( self, trans, context ) Module galaxy.tools.parameters.basic:808 in get_initial_value view if self.need_late_validation( trans, context ): Module galaxy.tools.parameters.basic:1048 in need_late_validation view if super( ColumnListParameter, self ).need_late_validation( trans, context ): Module galaxy.tools.parameters.basic:789 in need_late_validation view for layer in context.itervalues(): Module UserDict:116 in itervalues view for _, v in self.iteritems(): Module UserDict:109 in iteritems view for k in self: Module UserDict:96 in __iter__ view for k in self.keys(): AttributeError: 'ExpressionContext' object has no attribute 'keys'
I see this when trying to access the tool via the normal Galaxy web interface, and when running the tool's unit tests. Removing the min="1" value 'fixes' this, but I do want at least one entry.
The tool in question is here: https://bitbucket.org/peterjc/galaxy-central/commits/806d9526d5e846933bb02c9...
On the off chance I was using a special value as the repeat name, I tried changing that - no difference.
Progress, this works (no min value): <repeat name="identifiers" title="Tabular file(s) with sequence identifiers"> <param name="input_tabular" type="data" format="tabular" label="Tabular file containing sequence identifiers"/> <param name="columns" type="data_column" data_ref="input_tabular" multiple="True" numerical="False" label="Column(s) containing sequence identifiers" help="Multi-select list - hold the appropriate key while clicking to select multiple columns"> <validator type="no_options" message="Pick at least one column"/> </param> </repeat> This also work - using a min value for the repeat, but removing the data_column parameter, <repeat name="identifiers" title="Tabular file(s) with sequence identifiers"> <param name="input_tabular" type="data" format="tabular" label="Tabular file containing sequence identifiers"/> </repeat> However what I want to use fails: <repeat name="identifiers" title="Tabular file(s) with sequence identifiers" min="1"> <param name="input_tabular" type="data" format="tabular" label="Tabular file containing sequence identifiers"/> <param name="columns" type="data_column" data_ref="input_tabular" multiple="True" numerical="False" label="Column(s) containing sequence identifiers" help="Multi-select list - hold the appropriate key while clicking to select multiple columns"> <validator type="no_options" message="Pick at least one column"/> </param> </repeat> So something bad is happening with the initial population of the first repeat value (triggered by using min="1") from the "data_column" parameter. I would guess Cory's example also used a non-trivial parameter type. Peter
participants (2)
-
Cory Spencer
-
Peter Cock