diff --git a/config/datatypes_conf.xml.sample b/config/datatypes_conf.xml.sample index a9ee8c5eeaa..7c18036cfc7 100644 --- a/config/datatypes_conf.xml.sample +++ b/config/datatypes_conf.xml.sample @@ -38,6 +38,7 @@ + @@ -606,6 +607,7 @@ + diff --git a/lib/galaxy/datatypes/binary.py b/lib/galaxy/datatypes/binary.py index 87882101b50..161d25a854a 100644 --- a/lib/galaxy/datatypes/binary.py +++ b/lib/galaxy/datatypes/binary.py @@ -1436,3 +1436,36 @@ class NetCDF( Binary ): Binary.register_sniffable_binary_format("netcdf", "netcdf", NetCDF) + + +class DMND( Binary ): + """ + Class describing an DMND file + >>> from galaxy.datatypes.sniff import get_test_fname + >>> fname = get_test_fname( 'diamond_db.dmnd' ) + >>> DMND().sniff( fname ) + True + >>> fname = get_test_fname( 'interval.interval' ) + >>> DMND().sniff( fname ) + False + """ + file_ext = "dmnd" + edam_format = "" + + def __init__( self, **kwd ): + Binary.__init__( self, **kwd ) + self._magic = binascii.unhexlify("6d18ee15a4f84a02") + + def sniff( self, filename ): + # The first 8 bytes of any dmnd file are 0x24af8a415ee186d + + try: + header = open( filename, 'rb' ).read(8) + if header == self._magic: + return True + return False + except: + return False + + +Binary.register_sniffable_binary_format("dmnd", "dmnd", DMND) diff --git a/lib/galaxy/datatypes/sniff.py b/lib/galaxy/datatypes/sniff.py index d7bfdd0a95b..7188bafdba5 100644 --- a/lib/galaxy/datatypes/sniff.py +++ b/lib/galaxy/datatypes/sniff.py @@ -356,6 +356,9 @@ def guess_ext( fname, sniff_order, is_multi_byte=False ): >>> fname = get_test_fname('1.gg') >>> guess_ext(fname, sniff_order) 'gg' + >>> fname = get_test_fname('diamond_db.dmnd') + >>> guess_ext(fname, sniff_order) + 'dmnd' """ file_ext = None for datatype in sniff_order: diff --git a/lib/galaxy/datatypes/test/diamond_db.dmnd b/lib/galaxy/datatypes/test/diamond_db.dmnd new file mode 100644 index 00000000000..b5322de5617 Binary files /dev/null and b/lib/galaxy/datatypes/test/diamond_db.dmnd differ