Difficulties using <repeat> tagset with min attribute

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

Difficulties using <repeat> tagset with min attribute

Cory Spencer

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'



___________________________________________________________
Please keep all replies on the list by using "reply all"
in your mail client.  To manage your subscriptions to this
and other Galaxy lists, please use the interface at:

  http://lists.bx.psu.edu/
Reply | Threaded
Open this post in threaded view
|

Re: Difficulties using <repeat> tagset with min attribute

Peter Cock
On Thu, May 3, 2012 at 12:20 AM, Cory Spencer <[hidden email]> 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/806d9526d5e846933bb02c9d3efb8ccc398609f4

On the off chance I was using a special value as the repeat name, I tried
changing that - no difference.

Thanks,

Peter

___________________________________________________________
Please keep all replies on the list by using "reply all"
in your mail client.  To manage your subscriptions to this
and other Galaxy lists, please use the interface at:
  http://lists.bx.psu.edu/

To search Galaxy mailing lists use the unified search at:
  http://galaxyproject.org/search/mailinglists/
Reply | Threaded
Open this post in threaded view
|

Re: Difficulties using <repeat> tagset with min attribute

Peter Cock
On Wed, May 8, 2013 at 5:40 PM, Peter Cock <[hidden email]> 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/806d9526d5e846933bb02c9d3efb8ccc398609f4
>
> 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
___________________________________________________________
Please keep all replies on the list by using "reply all"
in your mail client.  To manage your subscriptions to this
and other Galaxy lists, please use the interface at:
  http://lists.bx.psu.edu/

To search Galaxy mailing lists use the unified search at:
  http://galaxyproject.org/search/mailinglists/