diff --git a/lib/galaxy/datatypes/metadata.py b/lib/galaxy/datatypes/metadata.py index 54cb8951221..ae9f9655a92 100644 --- a/lib/galaxy/datatypes/metadata.py +++ b/lib/galaxy/datatypes/metadata.py @@ -66,6 +66,7 @@ class MetadataParameter( object ): value = str( value ) self.value = value self.context = context + self.display = True def __str__(self): if self.value is None: @@ -264,4 +265,24 @@ class ColumnTypesParameter( MetadataParameter ): def __str__(self): return ",".join( map( str, self.value ) ) +class PythonObjectParameter( MetadataParameter ): + def __init__( self, spec, value, context ): + MetadataParameter.__init__( self, spec, value, context ) + self.value = value + self.display = False + + def __str__(self): + if not self.value: + return self.spec.to_string( self.spec.no_value ) + return self.spec.to_string( self.value ) + + def get_html_field( self, value=None, other_values={} ): + return form_builder.TextField( self.spec.name, value=str( self ) ) + + def get_html( self ): + return str( self ) + + @classmethod + def marshal( cls, value ): + return value diff --git a/lib/galaxy/datatypes/sequence.py b/lib/galaxy/datatypes/sequence.py index 709dbdf442e..1a5695c9d3b 100644 --- a/lib/galaxy/datatypes/sequence.py +++ b/lib/galaxy/datatypes/sequence.py @@ -24,6 +24,7 @@ class Alignment( Sequence ): """Add metadata elements""" MetadataElement( name="species", desc="Species", default=[], param=metadata.SelectParameter, multiple=True, readonly=True, no_value=None ) + MetadataElement( name="species_chromosomes", desc="Species Chromosomes", value={}, param=metadata.PythonObjectParameter, readonly=True, no_value={}, to_string=str ) class Fasta( Sequence ): """Class representing a FASTA sequence""" @@ -165,9 +166,10 @@ class Maf( Alignment ): def set_meta( self, dataset, first_line_is_header=False, **kwd ): """ - Parses and returns species from MAF files. + Parses and sets species and chromosomes from MAF files. """ species = [] + species_chromosomes = {} try: for i, m in enumerate( bx.align.maf.Reader( open(dataset.file_name) ) ): for c in m.components: @@ -176,15 +178,20 @@ class Maf( Alignment ): # "src_split" finds the rightmost dot, which is probably # wrong in general, and certainly here. spec = c.src + chrom = None if "." in spec: - spec = spec.split( "." )[0] + spec, chrom = spec.split( ".", 1 ) if spec not in species: species.append(spec) + species_chromosomes[spec] = [] + if chrom and chrom not in species_chromosomes[spec]: + species_chromosomes[spec].append( chrom ) # only check first 100,000 blocks for species if i > 100000: break except: pass dataset.metadata.species = species + dataset.metadata.species_chromosomes = species_chromosomes def missing_meta( self, dataset ): """Checks to see if species is set""" diff --git a/templates/dataset/edit_attributes.mako b/templates/dataset/edit_attributes.mako index faf11771489..75c63bbcbb5 100644 --- a/templates/dataset/edit_attributes.mako +++ b/templates/dataset/edit_attributes.mako @@ -39,15 +39,17 @@
%for element in metadata: -