From cb09c35a07e3b9f8ca7e4eb5e8d37ffacdee6253 Mon Sep 17 00:00:00 2001 From: Daniel Blankenberg Date: Wed, 13 Jan 2016 17:28:34 -0500 Subject: [PATCH] Fix line wrapping for peek of tabular files. --- lib/galaxy/datatypes/data.py | 20 ++++++++++++++++---- lib/galaxy/datatypes/tabular.py | 5 ++++- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/lib/galaxy/datatypes/data.py b/lib/galaxy/datatypes/data.py index 945065c4371..f74227c47e5 100644 --- a/lib/galaxy/datatypes/data.py +++ b/lib/galaxy/datatypes/data.py @@ -742,13 +742,13 @@ class Text( Data ): data_lines += 1 return data_lines - def set_peek( self, dataset, line_count=None, is_multi_byte=False, WIDTH=256, skipchars=None ): + def set_peek( self, dataset, line_count=None, is_multi_byte=False, WIDTH=256, skipchars=None, line_wrap=True ): """ Set the peek. This method is used by various subclasses of Text. """ if not dataset.dataset.purged: # The file must exist on disk for the get_file_peek() method - dataset.peek = get_file_peek( dataset.file_name, is_multi_byte=is_multi_byte, WIDTH=WIDTH, skipchars=skipchars ) + dataset.peek = get_file_peek( dataset.file_name, is_multi_byte=is_multi_byte, WIDTH=WIDTH, skipchars=skipchars, line_wrap=line_wrap ) if line_count is None: # See if line_count is stored in the metadata if dataset.metadata.data_lines: @@ -950,7 +950,7 @@ def get_test_fname( fname ): return full_path -def get_file_peek( file_name, is_multi_byte=False, WIDTH=256, LINE_COUNT=5, skipchars=None ): +def get_file_peek( file_name, is_multi_byte=False, WIDTH=256, LINE_COUNT=5, skipchars=None, line_wrap=True ): """ Returns the first LINE_COUNT lines wrapped to WIDTH @@ -971,8 +971,9 @@ def get_file_peek( file_name, is_multi_byte=False, WIDTH=256, LINE_COUNT=5, skip file_type = None data_checked = False temp = open( file_name, "U" ) + last_line = '' while count <= LINE_COUNT: - line = temp.readline( WIDTH ) + line = last_line + temp.readline( WIDTH - len( last_line ) ) if line and not is_multi_byte and not data_checked: # See if we have a compressed or binary file if line[0:2] == util.gzip_magic: @@ -986,6 +987,17 @@ def get_file_peek( file_name, is_multi_byte=False, WIDTH=256, LINE_COUNT=5, skip data_checked = True if file_type in [ 'gzipped', 'binary' ]: break + if not line_wrap: + if '\n' in line: + i = line.index( '\n' ) + last_line = line[i:] + line = line[:i] + else: + last_line = '' + while True: + i = temp.read(1) + if not i or i == '\n': + break skip_line = False for skipchar in skipchars: if line.startswith( skipchar ): diff --git a/lib/galaxy/datatypes/tabular.py b/lib/galaxy/datatypes/tabular.py index 3617ed5336a..6ce28bb45a9 100644 --- a/lib/galaxy/datatypes/tabular.py +++ b/lib/galaxy/datatypes/tabular.py @@ -39,7 +39,7 @@ class TabularData( data.Text ): MetadataElement( name="delimiter", default='\t', desc="Data delimiter", readonly=True, visible=False, optional=True, no_value=[] ) def set_peek( self, dataset, line_count=None, is_multi_byte=False, WIDTH=256, skipchars=None ): - super(TabularData, self).set_peek( dataset, line_count=line_count, is_multi_byte=is_multi_byte, WIDTH=WIDTH, skipchars=skipchars) + super(TabularData, self).set_peek( dataset, line_count=line_count, is_multi_byte=is_multi_byte, WIDTH=WIDTH, skipchars=skipchars, line_wrap=False ) if dataset.metadata.comment_lines: dataset.blurb = "%s, %s comments" % ( dataset.blurb, util.commaify( str( dataset.metadata.comment_lines ) ) ) @@ -179,6 +179,9 @@ class TabularData( data.Text ): out.append( '%s' % escape( line ) ) elif line: elems = line.split( dataset.metadata.delimiter ) + # pad shortened elems, since lines could have been truncated by width + if len( elems ) < columns: + elems.extend( [''] * ( columns - len( elems ) ) ) # we may have an invalid comment line or invalid data if len( elems ) != columns: out.append( '%s' % escape( line ) )