From f72c32dcf7a105cb81aacee49189bd6503f79243 Mon Sep 17 00:00:00 2001 From: Jeremy Goecks Date: Thu, 29 Jul 2010 17:41:46 -0400 Subject: [PATCH] Added AttributeValueSplitterFilter to tool select parameter filters so that GFF attributes can be read and used as tool inputs. Updated gff_filtering tool to use this filter. --- .../tools/parameters/dynamic_options.py | 35 +++++++++++++++++++ tools/ngs_rna/gff_filtering.xml | 8 +++-- 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/lib/galaxy/tools/parameters/dynamic_options.py b/lib/galaxy/tools/parameters/dynamic_options.py index 50837cfd08f..c764d13cc6e 100644 --- a/lib/galaxy/tools/parameters/dynamic_options.py +++ b/lib/galaxy/tools/parameters/dynamic_options.py @@ -206,6 +206,40 @@ class MultipleSplitterFilter( Filter ): for field in fields[column].split( self.separator ): rval.append( fields[0:column] + [field] + fields[column:] ) return rval + +class AttributeValueSplitterFilter( Filter ): + """ + Filters a list of attribute-value pairs to be unique attribute names. + + Type: attribute_value_splitter + + Required Attributes: + column: column in options to compare with + Optional Attributes: + pair_separator: Split column by this (,) + name_val_separator: Split name-value pair by this ( whitespace ) + """ + def __init__( self, d_option, elem ): + Filter.__init__( self, d_option, elem ) + self.pair_separator = elem.get( "pair_separator", "," ) + self.name_val_separator = elem.get( "name_val_separator", None ) + self.columns = elem.get( "column", None ) + assert self.columns is not None, "Required 'columns' attribute missing from filter" + self.columns = [ int ( column ) for column in self.columns.split( "," ) ] + def filter_options( self, options, trans, other_values ): + attr_names = [] + rval = [] + for fields in options: + for column in self.columns: + for pair in fields[column].split( self.pair_separator ): + ary = pair.split( self.name_val_separator ) + if len( ary ) == 2: + name, value = ary + if name not in attr_names: + rval.append( fields[0:column] + [name] + fields[column:] ) + attr_names.append( name ) + return rval + class AdditionalValueFilter( Filter ): """ @@ -322,6 +356,7 @@ filter_types = dict( data_meta = DataMetaFilter, static_value = StaticValueFilter, unique_value = UniqueValueFilter, multiple_splitter = MultipleSplitterFilter, + attribute_value_splitter = AttributeValueSplitterFilter, add_value = AdditionalValueFilter, remove_value = RemoveValueFilter, sort_by = SortByColumnFilter ) diff --git a/tools/ngs_rna/gff_filtering.xml b/tools/ngs_rna/gff_filtering.xml index 4059c82387a..e881680318f 100644 --- a/tools/ngs_rna/gff_filtering.xml +++ b/tools/ngs_rna/gff_filtering.xml @@ -5,8 +5,12 @@ - - + + + + + +