diff --git a/lib/galaxy/config/sample/datatypes_conf.xml.sample b/lib/galaxy/config/sample/datatypes_conf.xml.sample index cfd58ef2285..dd056fdca9e 100644 --- a/lib/galaxy/config/sample/datatypes_conf.xml.sample +++ b/lib/galaxy/config/sample/datatypes_conf.xml.sample @@ -185,6 +185,7 @@ + diff --git a/lib/galaxy/datatypes/binary.py b/lib/galaxy/datatypes/binary.py index b56c7bee39e..de4565a58c3 100644 --- a/lib/galaxy/datatypes/binary.py +++ b/lib/galaxy/datatypes/binary.py @@ -318,6 +318,29 @@ class Meryldb(CompressedArchive): return False +class Visium(CompressedArchive): + """Visium is a tar.gz archive with at least a 'Spatial' subfolder, a filtered h5 file and a raw h5 file.""" + + file_ext = "visium.tar.gz" + + def sniff(self, filename: str) -> bool: + """ + Check data structure: + Contains h5 files + Contains spatial folder + """ + try: + if filename and tarfile.is_tarfile(filename): + with tarfile.open(filename, "r") as temptar: + _tar_content = temptar.getnames() + if "spatial" in _tar_content: + if len([_ for _ in _tar_content if _.endswith("matrix.h5")]) == 2: + return True + except Exception as e: + log.warning("%s, sniff Exception: %s", self, e) + return False + + class Bref3(Binary): """Bref3 format is a binary format for storing phased, non-missing genotypes for a list of samples."""