Hi jj,

Patch applied in 8369:bd020b5aa531. Thanks for catching and submitting!


Dan


On Dec 10, 2012, at 12:27 PM, Jim Johnson wrote:

> Fix for SelectToolParameter  rerun,workflow  when multiple="true"
> 
> The following change allows multiple select values to be set on rerun and in 
> workflows.   I checked that DrillDownSelectToolParameter and 
> ColumnListParameter stiil worked.
> 
> $ hg diff lib/galaxy/tools/parameters/basic.py
> diff -r 0042b30216fc lib/galaxy/tools/parameters/basic.py
> --- a/lib/galaxy/tools/parameters/basic.py      Tue Nov 06 11:14:22 2012 -0800
> +++ b/lib/galaxy/tools/parameters/basic.py      Mon Dec 10 11:03:10 2012 -0600
> @@ -715,6 +715,12 @@
>             if value not in legal_values:
>                 raise ValueError( "An invalid option was selected, please 
> verify" )
>             return value
> +    def to_html_value( self, value, app ):
> +        if isinstance( value, list ):
> +            return value
> +        else:
> +            return str( value )
> +
>     def to_param_dict_string( self, value, other_values={} ):
>         if value is None:
>             return "None"
> 
> 
> 
> 
> 
> Need to override method to_html_value() from ToolParameter
> otherwise a list value will be returned as a string: "['a','b']" instead of a 
> list: ['a','b'] and options will not be selected in method get_html_field() :
> 
>    def get_html_field( self, trans=None, value=None, context={} ):
>        # Dynamic options are not yet supported in workflow, allow
>        # specifying the value as text for now.
>        if self.need_late_validation( trans, context ):
>            if value is not None:
>                assert isinstance( value, UnvalidatedValue ), "Late validation 
> needed for '%s', but provided value (%s) is not of type UnvalidatedValue 
> (%s)." % ( self.name, value, type( value ) )
>                value = value.value
>            if self.multiple:
>                if value is None:
>                    value = ""
>                else:
>                    value = "\n".join( value )
>                return form_builder.TextArea( self.name, value=value )
>            else:
>                return form_builder.TextField( self.name, value=(value or "") )
>        if value is not None:
>            if not isinstance( value, list ): value = [ value ]       ### 
> "['a','b']"  is not a list so value set to ["['a','b']"]
>        field = form_builder.SelectField( self.name, self.multiple, 
> self.display, self.refresh_on_change, refresh_on_change_values = 
> self.refresh_on_change_values )
>        options = self.get_options( trans, context )
>        for text, optval, selected in options:
>            if isinstance( optval, UnvalidatedValue ):
>                optval = optval.value
>                text = "%s (unvalidated)" % text
>            if value:
>                selected = ( optval in value )        ### 'a' will not be 
> found in: ["['a','b']"]
>            field.add_option( text, optval, selected )
>        return field
> <SelectToolParameter.diff>


___________________________________________________________
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 via email to