From 169a4d2f0596ddcf5973d69e45ac3636729644ec Mon Sep 17 00:00:00 2001 From: Daniel Blankenberg Date: Mon, 24 May 2010 14:15:02 -0400 Subject: [PATCH] First pass at implementing a method for allowing a maximum file size cutoff for setting optional metadata (e.g. line and sequence counts). Currently csFasta, qualsolid, and fastq make use of this option. --- datatypes_conf.xml.sample | 2 +- lib/galaxy/datatypes/data.py | 14 ++++++++++++++ lib/galaxy/datatypes/qualityscore.py | 7 +++++++ lib/galaxy/datatypes/registry.py | 2 ++ lib/galaxy/datatypes/sequence.py | 7 +++++++ 5 files changed, 31 insertions(+), 1 deletion(-) diff --git a/datatypes_conf.xml.sample b/datatypes_conf.xml.sample index 0e83c7e4d7c..bc5ec592c92 100644 --- a/datatypes_conf.xml.sample +++ b/datatypes_conf.xml.sample @@ -33,7 +33,7 @@ - + diff --git a/lib/galaxy/datatypes/data.py b/lib/galaxy/datatypes/data.py index f799e672019..8b917806012 100644 --- a/lib/galaxy/datatypes/data.py +++ b/lib/galaxy/datatypes/data.py @@ -57,6 +57,8 @@ class Data( object ): composite_type = None composite_files = odict() primary_file_name = 'index' + #A per datatype setting (inherited): max file size (in bytes) for setting optional metadata + _max_optional_metadata_filesize = None def __init__(self, **kwd): """Initialize the datatype""" @@ -116,6 +118,18 @@ class Data( object ): if not value: return True return False + def set_max_optional_metadata_filesize( self, max_value ): + try: + max_value = int( max_value ) + except: + return + self.__class__._max_optional_metadata_filesize = max_value + def get_max_optional_metadata_filesize( self ): + rval = self.__class__._max_optional_metadata_filesize + if rval is None: + return -1 + return rval + max_optional_metadata_filesize = property( get_max_optional_metadata_filesize, set_max_optional_metadata_filesize ) def set_peek( self, dataset, is_multi_byte=False ): """Set the peek and blurb text""" if not dataset.dataset.purged: diff --git a/lib/galaxy/datatypes/qualityscore.py b/lib/galaxy/datatypes/qualityscore.py index e51be3267b8..fadb9819e71 100644 --- a/lib/galaxy/datatypes/qualityscore.py +++ b/lib/galaxy/datatypes/qualityscore.py @@ -63,6 +63,13 @@ class QualityScoreSOLiD ( QualityScore ): except: pass return False + + def set_meta( self, dataset, **kwd ): + if self.max_optional_metadata_filesize >= 0 and dataset.get_size() > self.max_optional_metadata_filesize: + return + return QualityScore.set_meta( self, dataset, **kwd ) + + class QualityScore454 ( QualityScore ): """ diff --git a/lib/galaxy/datatypes/registry.py b/lib/galaxy/datatypes/registry.py index 338e4ac82a4..d0ef80752fb 100644 --- a/lib/galaxy/datatypes/registry.py +++ b/lib/galaxy/datatypes/registry.py @@ -64,6 +64,8 @@ class Registry( object ): self.available_tracks.append( extension ) if display_in_upload: self.upload_file_formats.append( extension ) + #max file size cut off for setting optional metadata + self.datatypes_by_extension[extension].max_optional_metadata_filesize = elem.get( 'max_optional_metadata_filesize', None ) for converter in elem.findall( 'converter' ): # Build the list of datatype converters which will later be loaded # into the calling app's toolbox. diff --git a/lib/galaxy/datatypes/sequence.py b/lib/galaxy/datatypes/sequence.py index 4d400318d62..522ca992319 100644 --- a/lib/galaxy/datatypes/sequence.py +++ b/lib/galaxy/datatypes/sequence.py @@ -148,6 +148,11 @@ class csFasta( Sequence ): except: pass return False + + def set_meta( self, dataset, **kwd ): + if self.max_optional_metadata_filesize >= 0 and dataset.get_size() > self.max_optional_metadata_filesize: + return + return Sequence.set_meta( self, dataset, **kwd ) class Fastq ( Sequence ): """Class representing a generic FASTQ sequence""" @@ -158,6 +163,8 @@ class Fastq ( Sequence ): Set the number of sequences and the number of data lines in dataset. """ + if self.max_optional_metadata_filesize >= 0 and dataset.get_size() > self.max_optional_metadata_filesize: + return data_lines = 0 sequences = 0 seq_counter = 0 # blocks should be 4 lines long