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