# HG changeset patch
# User peterjc
# Date 1352461805 18000
# Node ID f9a7783ed7b688f3ac68aab79dcbc6599d3d1c2d
# Parent 6ef523b390e0edeecac59632ad0d89cbf82f8333
Uploaded v0.0.14 adding BLAST database support.
See also the matching update for the NCBI BLAST+ wrappers which use these new definitions. This update included work by Edward Kirton.
diff -r 6ef523b390e0 -r f9a7783ed7b6 blast.py
--- a/blast.py Thu Sep 20 10:13:16 2012 -0400
+++ b/blast.py Fri Nov 09 06:50:05 2012 -0500
@@ -3,8 +3,9 @@
"""
from galaxy.datatypes.data import get_file_peek
-from galaxy.datatypes.data import Text
+from galaxy.datatypes.data import Text, Data
from galaxy.datatypes.xml import GenericXml
+from galaxy.datatypes.metadata import MetadataElement
class BlastXml( GenericXml ):
"""NCBI Blast XML Output data"""
@@ -18,6 +19,7 @@
else:
dataset.peek = 'file does not exist'
dataset.blurb = 'file purged from disk'
+
def sniff( self, filename ):
"""
Determines whether the file is blastxml
@@ -55,6 +57,9 @@
if len(split_files) == 1:
#For one file only, use base class method (move/copy)
return Text.merge(split_files, output_file)
+ if not split_files:
+ raise ValueError("Given no BLAST XML files, %r, to merge into %s" \
+ % (split_files, output_file))
out = open(output_file, "w")
h = None
for f in split_files:
@@ -122,3 +127,98 @@
out.close()
merge = staticmethod(merge)
+
+class _BlastDb(object):
+ """Base class for BLAST database datatype."""
+
+ def set_peek( self, dataset, is_multi_byte=False ):
+ """Set the peek and blurb text."""
+ if not dataset.dataset.purged:
+ dataset.peek = "BLAST database (multiple files)"
+ dataset.blurb = "BLAST 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:
+ return "BLAST database (multiple files)"
+
+ def display_data(self, trans, data, preview=False, filename=None,
+ to_ext=None, size=None, offset=None, **kwd):
+ """Apparently an old display method, but still gets called.
+
+ This allows us to format the data shown in the central pane via the "eye" icon.
+ """
+ return "This is a BLAST database."
+
+ def get_mime(self):
+ """Returns the mime type of the datatype (pretend it is text for peek)"""
+ return 'text/plain'
+
+ def merge(split_files, output_file):
+ """Merge BLAST databases (not implemented for now)."""
+ raise NotImplementedError("Merging BLAST databases is non-trivial (do this via makeblastdb?)")
+
+ def split( cls, input_datasets, subdir_generator_function, split_params):
+ """Split a BLAST database (not implemented for now)."""
+ if split_params is None:
+ return None
+ raise NotImplementedError("Can't split BLAST databases")
+
+
+class BlastNucDb( _BlastDb, Data ):
+ """Class for nucleotide BLAST database files."""
+ file_ext = 'blastdbn'
+ composite_type ='basic'
+ MetadataElement( readonly=True, optional=True, visible=False, no_value=0 )
+
+ def __init__(self,**kwd):
+ Data.__init__(self, **kwd)
+ self.add_composite_file('blastdb.nhr')
+ self.add_composite_file('blastdb.nin')
+ self.add_composite_file('blastdb.nsq')
+ self.add_composite_file('blastdb.nhd', optional=True)
+ self.add_composite_file('blastdb.nsi', optional=True)
+ self.add_composite_file('blastdb.nhi', optional=True)
+ self.add_composite_file('blastdb.nog', optional=True)
+ self.add_composite_file('blastdb.nsd', optional=True)
+
+ def display_data(self, trans, data, preview=False, filename=None,
+ to_ext=None, size=None, offset=None, **kwd):
+ """Apparently an old display method, but still gets called.
+
+ This allows us to format the data shown in the central pane via the "eye" icon.
+ """
+ return "This is a BLAST nucleotide database."
+
+class BlastProtDb( _BlastDb, Data ):
+ """Class for protein BLAST database files."""
+ file_ext = 'blastdbp'
+ composite_type ='basic'
+ MetadataElement( readonly=True, optional=True, visible=False, no_value=0 )
+
+ def __init__(self,**kwd):
+ Data.__init__(self, **kwd)
+ self.add_composite_file('blastdb.phr')
+ self.add_composite_file('blastdb.pin')
+ self.add_composite_file('blastdb.psq')
+ self.add_composite_file('blastdb.pnd', optional=True)
+ self.add_composite_file('blastdb.pni', optional=True)
+ self.add_composite_file('blastdb.psd', optional=True)
+ self.add_composite_file('blastdb.psi', optional=True)
+ self.add_composite_file('blastdb.psq', optional=True)
+ self.add_composite_file('blastdb.phd', optional=True)
+ self.add_composite_file('blastdb.phi', optional=True)
+ self.add_composite_file('blastdb.pog', optional=True)
+
+ def display_data(self, trans, data, preview=False, filename=None,
+ to_ext=None, size=None, offset=None, **kwd):
+ """Apparently an old display method, but still gets called.
+
+ This allows us to format the data shown in the central pane via the "eye" icon.
+ """
+ return "This is a BLAST protein database."
diff -r 6ef523b390e0 -r f9a7783ed7b6 blast_datatypes.txt
--- a/blast_datatypes.txt Thu Sep 20 10:13:16 2012 -0400
+++ b/blast_datatypes.txt Fri Nov 09 06:50:05 2012 -0500
@@ -21,6 +21,8 @@
v0.0.11 - Final revision as part of the Galaxy main repository, and the
first release via the Tool Shed
v0.0.13 - Uses blast.py instead of xml.py to define the datatypes
+v0.0.14 - Includes datatypes for protein and nucleotide BLAST databases
+ (based on work by Edward Kirton)
Installation
@@ -37,9 +39,15 @@
datatypes_conf.xml entry to be combined with your local configuration.
However, if you really want to this should work for a manual install. Add
-the following line to the datatypes_conf.xml file in the Galaxy main folder:
+the following lines to the datatypes_conf.xml file in the Galaxy main folder:
+
+
+
+and later in the sniffer section:
+
+
Also create the file lib/galaxy/datatypes/blast.py by moving, copying or linking
the blast.py file provided in this tar-ball. Finally add 'import blast' near
diff -r 6ef523b390e0 -r f9a7783ed7b6 datatypes_conf.xml
--- a/datatypes_conf.xml Thu Sep 20 10:13:16 2012 -0400
+++ b/datatypes_conf.xml Fri Nov 09 06:50:05 2012 -0500
@@ -5,6 +5,8 @@
+
+