From 9e7adb2f39318bd23ca3bd95084282420002e259 Mon Sep 17 00:00:00 2001 From: Greg Von Kuster Date: Fri, 31 Aug 2007 15:49:26 +0000 Subject: [PATCH] Changed Tabular numerical_columns metadata attribute to be column_types. --- lib/galaxy/datatypes/metadata.py | 9 +++++ lib/galaxy/datatypes/tabular.py | 65 ++++++++++++++++++-------------- 2 files changed, 46 insertions(+), 28 deletions(-) diff --git a/lib/galaxy/datatypes/metadata.py b/lib/galaxy/datatypes/metadata.py index 377ff0fa53b..f271a464b76 100644 --- a/lib/galaxy/datatypes/metadata.py +++ b/lib/galaxy/datatypes/metadata.py @@ -3,6 +3,7 @@ import sys, logging from galaxy.util.bunch import Bunch from galaxy.util.odict import odict from galaxy.web import form_builder +from types import * log = logging.getLogger( __name__ ) @@ -55,6 +56,14 @@ class MetadataParameter( object ): number of columns in the dataset. ''' self.spec = spec + """Since strings are stored as unicode, we need to decode them for display""" + if isinstance( value, ListType ): + for i, elem in enumerate( value ): + if type ( elem ) == unicode: + value[i] = str( elem ) + elif isinstance ( value, basestring ): + if type( value ) == unicode: + value = str( value ) self.value = value self.context = context diff --git a/lib/galaxy/datatypes/tabular.py b/lib/galaxy/datatypes/tabular.py index d5d3942ada4..b89c308648a 100644 --- a/lib/galaxy/datatypes/tabular.py +++ b/lib/galaxy/datatypes/tabular.py @@ -12,6 +12,7 @@ from cgi import escape from galaxy.datatypes import metadata from galaxy.datatypes.metadata import MetadataElement from galaxy.datatypes.metadata import MetadataAttributes + log = logging.getLogger(__name__) @@ -20,7 +21,7 @@ class Tabular( data.Text ): """Add metadata elements""" MetadataElement( name="columns", default=0, desc="Number of columns", readonly=True ) - MetadataElement( name="numerical_columns", default=[], desc="Numerical columns", readonly=True ) + MetadataElement( name="column_types", default=[], desc="Column types", readonly=True ) def init_meta( self, dataset, copy_from=None ): data.Text.init_meta( self, dataset, copy_from=copy_from ) @@ -38,7 +39,7 @@ class Tabular( data.Text ): that contain numerical values in the dataset """ if dataset.has_data(): - numerical_columns = [] + column_types = [] for i, line in enumerate( file ( dataset.file_name ) ): line = line.rstrip('\r\n') @@ -48,24 +49,43 @@ class Tabular( data.Text ): elems_len = len(elems) if elems_len > 0: + """Set the columns metadata attribute""" if elems_len != dataset.metadata.columns: dataset.metadata.columns = elems_len - """Set the numerical_columns metadata attribute""" + + """Set the column_types metadata attribute""" for col in range(0, elems_len): - try: - val = float(elems[col]) - valid = True - except: - val = elems[col] - if val: - if val.strip().lower() == "na": valid = True - else: valid = False - else: valid = False - if valid: numerical_columns.append(col+1) - if len(numerical_columns) > 0: break + col_type = None + val = elems[col] + if not col_type: + """See if val is an int""" + try: + int( val ) + col_type = 'int' + except: + pass + if not col_type: + """See if val is a float""" + try: + float( val ) + col_type = 'float' + except: + if val and val.strip().lower() == 'na': + col_type = 'float' + if not col_type: + """See if val is a list""" + val_elems = val.split(',') + if len( val_elems ) > 1: + col_type = 'list' + if not col_type: + """All parameters are strings, so this will be the default""" + col_type = 'str' + + column_types.append(col_type) + if len(column_types) > 0: break if i == 30: break # Hopefully we never get here... - dataset.metadata.numerical_columns = numerical_columns + dataset.metadata.column_types = column_types def make_html_table(self, data, skipchar=None): """Create HTML table, used for displaying peek""" @@ -113,16 +133,5 @@ class Tabular( data.Text ): def before_edit( self, dataset ): data.Text.before_edit( self, dataset ) - try: - maxcols = 0 - for i, line in enumerate ( file( dataset.file_name )): - line = line.rstrip('\r\n') - if line and not line.startswith( '#' ): - cols = len( line.split("\t") ) - if cols > maxcols: - maxcols = cols - if i == 30: - break - setattr( dataset.metadata, "columns", maxcols ) - except: - pass + if self.missing_meta( dataset ): + self.set_meta( dataset )