diff --git a/config/datatypes_conf.xml.sample b/config/datatypes_conf.xml.sample
index ccdb01923ea..cddead60ee6 100644
--- a/config/datatypes_conf.xml.sample
+++ b/config/datatypes_conf.xml.sample
@@ -214,6 +214,7 @@
+
@@ -691,6 +692,7 @@
+
diff --git a/lib/galaxy/datatypes/binary.py b/lib/galaxy/datatypes/binary.py
index 6bac5212eba..b5726e8f845 100644
--- a/lib/galaxy/datatypes/binary.py
+++ b/lib/galaxy/datatypes/binary.py
@@ -1182,6 +1182,41 @@ class MzSQlite(SQlite):
return False
+class BlibSQlite(SQlite):
+ """Class describing a Proteomics Spectral Library Sqlite database """
+ MetadataElement(name="blib_version", default='1.8', param=MetadataParameter, desc="Blib Version",
+ readonly=True, visible=True, no_value='1.8')
+ file_ext = "blib"
+
+ def set_meta(self, dataset, overwrite=True, **kwd):
+ super(BlibSQlite, self).set_meta(dataset, overwrite=overwrite, **kwd)
+ try:
+ conn = sqlite.connect(dataset.file_name)
+ c = conn.cursor()
+ tables_query = "SELECT majorVersion,minorVersion FROM LibInfo"
+ (majorVersion, minorVersion) = c.execute(tables_query).fetchall()[0]
+ dataset.metadata.blib_version = '%s.%s' % (majorVersion, minorVersion)
+ except Exception as e:
+ log.warning('%s, set_meta Exception: %s', self, e)
+
+ def sniff(self, filename):
+ if super(BlibSQlite, self).sniff(filename):
+ blib_table_names = ['IonMobilityTypes', 'LibInfo', 'Modifications', 'RefSpectra', 'RefSpectraPeakAnnotations', 'RefSpectraPeaks', 'ScoreTypes', 'SpectrumSourceFiles']
+ try:
+ conn = sqlite.connect(filename)
+ c = conn.cursor()
+ tables_query = "SELECT name FROM sqlite_master WHERE type='table' ORDER BY name"
+ result = c.execute(tables_query).fetchall()
+ result = [_[0] for _ in result]
+ for table_name in blib_table_names:
+ if table_name not in result:
+ return False
+ return True
+ except Exception as e:
+ log.warning('%s, sniff Exception: %s', self, e)
+ return False
+
+
class IdpDB(SQlite):
"""
Class describing an IDPicker 3 idpDB (sqlite) database
diff --git a/lib/galaxy/datatypes/registry.py b/lib/galaxy/datatypes/registry.py
index 750e5f96006..acf7807beeb 100644
--- a/lib/galaxy/datatypes/registry.py
+++ b/lib/galaxy/datatypes/registry.py
@@ -782,6 +782,7 @@ class Registry(object):
'axt' : 'text/plain',
'bam' : 'application/octet-stream',
'bed' : 'text/plain',
+ 'blib' : 'application/octet-stream',
'customtrack' : 'text/plain',
'csfasta' : 'text/plain',
'db3' : 'application/octet-stream',
diff --git a/lib/galaxy/datatypes/sniff.py b/lib/galaxy/datatypes/sniff.py
index 943744b27bf..29ec1817d6a 100644
--- a/lib/galaxy/datatypes/sniff.py
+++ b/lib/galaxy/datatypes/sniff.py
@@ -445,6 +445,9 @@ def guess_ext(fname, sniff_order, is_binary=False):
>>> fname = get_test_fname('1.xmfa')
>>> guess_ext(fname, sniff_order)
'xmfa'
+ >>> fname = get_test_fname('test.blib')
+ >>> guess_ext(fname, sniff_order)
+ 'blib'
>>> fname = get_test_fname('test.phylip')
>>> guess_ext(fname, sniff_order)
'phylip'
diff --git a/lib/galaxy/datatypes/test/test.blib b/lib/galaxy/datatypes/test/test.blib
new file mode 100644
index 00000000000..fe43f04e8fe
Binary files /dev/null and b/lib/galaxy/datatypes/test/test.blib differ