From 7079b3d5ecf181749c846ee2b63e2728a82c35aa Mon Sep 17 00:00:00 2001 From: Peter van Heusden Date: Wed, 10 Apr 2019 22:01:41 +0200 Subject: [PATCH 1/4] spaln db datatype --- lib/galaxy/datatypes/spaln.py | 161 ++++++++++++++++++++++++++++++++++ 1 file changed, 161 insertions(+) create mode 100644 lib/galaxy/datatypes/spaln.py diff --git a/lib/galaxy/datatypes/spaln.py b/lib/galaxy/datatypes/spaln.py new file mode 100644 index 00000000000..6a0c0b5df68 --- /dev/null +++ b/lib/galaxy/datatypes/spaln.py @@ -0,0 +1,161 @@ +""" +spaln Composite Dataset +""" + +import io +import logging +import os.path + +from galaxy.datatypes.data import Data +from galaxy.datatypes.images import Html +from galaxy.datatypes.metadata import MetadataElement +from galaxy.util import smart_str + +log = logging.getLogger(__name__) +verbose = True + + +class _SpalnDb(Data): + allow_datatype_change = False + composite_type = "auto_primary_file" + + MetadataElement(name="spalndb_name", default="spalndb", desc="DB name", + readonly=True, visible=True, set_in_upload=True) + + def __init__(self, **kwd): + super(_SpalnDb, self).__init__(**kwd) + self.add_composite_file("%s.ent", is_binary=True, description="spalndb.ent", substitute_name_with_metadata="spalndb_name") + self.add_composite_file("%s.grp", is_binary=True, description="spalndb.grp", substitute_name_with_metadata="spalndb_name") + self.add_composite_file("%s.idx", is_binary=True, description="spalndb.idx", substitute_name_with_metadata="spalndb_name") + self.add_composite_file("%s.seq", is_binary=True, description="spalndb.seq", substitute_name_with_metadata="spalndb_name") + + def generate_primary_file(self, dataset=None): + rval = ['Spaln Database

'] + rval.append('

This composite dataset is composed of the following files:

') + return "\n".join(rval) + + def regenerate_primary_file(self, dataset): + """ + cannot do this until we are setting metadata + """ + efp = dataset.extra_files_path + flist = os.listdir(efp) + rval = ['Files for Composite Dataset %s

Composite %s contains:

') + with open(dataset.file_name, 'w') as f: + f.write("\n".join(rval)) + f.write('\n') + + def set_peek(self, dataset, is_multi_byte=False): + """Set the peek and blurb text.""" + if not dataset.dataset.purged: + dataset.peek = "spaln database (multiple files)" + dataset.blurb = "spaln database (multiple files)" + else: + dataset.peek = "file does not exist" + dataset.blurb = "file purged from disk" + + def display_peek(self, dataset): + """Create HTML content, used for displaying peek.""" + try: + return dataset.peek + except Exception: + return "spaln database (multiple files)" + + def display_data( + self, + trans, + data, + preview=False, + filename=None, + to_ext=None, + size=None, + offset=None, + **kwd + ): + """ + If preview is `True` allows us to format the data shown in the central pane via the "eye" icon. + If preview is `False` triggers download. + """ + if not preview: + return super(_SpalnDb, self).display_data( + trans, + data=data, + preview=preview, + filename=filename, + to_ext=to_ext, + size=size, + offset=offset, + **kwd + ) + if self.file_ext == "spalndbn": + title = "This is a nucleotide-query spaln database" + elif self.file_ext == "spalndbp": + title = "This is a protein-query spaln database" + elif self.file_ext == "spalndba": + title = "This is a protein spaln database" + else: + # Error? + title = "This is a spaln database (unknown format)." + msg = "" + try: + # Try to use any text recorded in the dummy index file: + with io.open(data.file_name, "rU", encoding="utf-8") as handle: + msg = handle.read().strip() + except Exception: + pass + if not msg: + msg = title + # Galaxy assumes HTML for the display of composite datatypes, + return smart_str( + "%s
%s
" + % (title, msg) + ) + + def merge(split_files, output_file): + """Merge spaln databases (not implemented).""" + raise NotImplementedError("Merging spaln databases is not possible") + + def split(cls, input_datasets, subdir_generator_function, split_params): + """Split a spaln database (not implemented).""" + if split_params is None: + return None + raise NotImplementedError("Can't split spaln database") + + def set_meta(self, dataset, **kwd): + super(_SpalnDb, self).set_meta(dataset, **kwd) + efp = dataset.extra_files_path + for filename in os.listdir(efp): + if filename.endswith(".ent"): + dataset.metadata.spalndb_name = os.path.splitext(filename)[0] + self.regenerate_primary_file(dataset) + +class SpalnNuclDb(_SpalnDb): + file_ext = "spalndbnp" + allow_datatype_change = False + composite_type = "basic" + + def __init__(self, **kwd): + super(SpalnNuclDb, self).__init__(**kwd) + self.add_composite_file("%s.bkn", is_binary=True, description="spalndb.bkn", substitute_name_with_metadata="spalndb_name") + self.add_composite_file("%s.bkp", is_binary=True, description="spalndb.bkp", substitute_name_with_metadata="spalndb_name") + + +class SpalnProtDb(_SpalnDb): + file_ext = "spalndba" + + def __init__(self, **kwd): + super(SpalnProtDb, self).__init__(**kwd) + self.add_composite_file("%s.bka", is_binary=True, description="spalndb.bka", substitute_name_with_metadata="spalndb_name") From f0b498b08eb1f9b4ffc882d44c263cb7fadf5c40 Mon Sep 17 00:00:00 2001 From: Peter van Heusden Date: Wed, 10 Apr 2019 22:31:53 +0200 Subject: [PATCH 2/4] fix spalndbnp type --- lib/galaxy/datatypes/spaln.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/galaxy/datatypes/spaln.py b/lib/galaxy/datatypes/spaln.py index 6a0c0b5df68..441183946fa 100644 --- a/lib/galaxy/datatypes/spaln.py +++ b/lib/galaxy/datatypes/spaln.py @@ -144,8 +144,6 @@ class _SpalnDb(Data): class SpalnNuclDb(_SpalnDb): file_ext = "spalndbnp" - allow_datatype_change = False - composite_type = "basic" def __init__(self, **kwd): super(SpalnNuclDb, self).__init__(**kwd) From 4aafa946692f547760d3680c460f5b36286895d7 Mon Sep 17 00:00:00 2001 From: Peter van Heusden Date: Wed, 10 Apr 2019 22:35:18 +0200 Subject: [PATCH 3/4] Add spaln datatypes --- config/datatypes_conf.xml.sample | 2 ++ 1 file changed, 2 insertions(+) diff --git a/config/datatypes_conf.xml.sample b/config/datatypes_conf.xml.sample index 2cc81c53a06..3f159305a2e 100644 --- a/config/datatypes_conf.xml.sample +++ b/config/datatypes_conf.xml.sample @@ -720,6 +720,8 @@ + +