diff --git a/config/datatypes_conf.xml.sample b/config/datatypes_conf.xml.sample
index 71d09ed28d6..17e4ea9bd38 100644
--- a/config/datatypes_conf.xml.sample
+++ b/config/datatypes_conf.xml.sample
@@ -79,6 +79,9 @@
+
+
+
@@ -766,6 +769,7 @@
+
diff --git a/lib/galaxy/datatypes/converters/fastagz_to_fasta.xml b/lib/galaxy/datatypes/converters/fastagz_to_fasta.xml
new file mode 100644
index 00000000000..eb0c4125601
--- /dev/null
+++ b/lib/galaxy/datatypes/converters/fastagz_to_fasta.xml
@@ -0,0 +1,11 @@
+
+ gzip -dcf '$input1' > '$output1'
+
+
+
+
+
+
+
+
+
diff --git a/lib/galaxy/datatypes/sequence.py b/lib/galaxy/datatypes/sequence.py
index 55e1253f121..13e43e2bc1e 100644
--- a/lib/galaxy/datatypes/sequence.py
+++ b/lib/galaxy/datatypes/sequence.py
@@ -39,6 +39,7 @@ if sys.version_info > (3,):
log = logging.getLogger(__name__)
SNIFF_COMPRESSED_FASTQS = os.environ.get("GALAXY_ENABLE_BETA_COMPRESSED_FASTQ_SNIFFING", "0") == "1"
+SNIFF_COMPRESSED_FASTAS = os.environ.get("GALAXY_ENABLE_BETA_COMPRESSED_FASTA_SNIFFING", "0") == "1"
class SequenceSplitLocations(data.Text):
@@ -311,6 +312,21 @@ class Alignment(data.Text):
raise NotImplementedError("Can't split generic alignment files")
+class FastaGz(Sequence, Binary):
+ """Class representing a generic compressed FASTA sequence"""
+ edam_format = "format_1929"
+ file_ext = "fasta.gz"
+ compressed = True
+
+ def sniff(self, filename):
+ """Determines whether the file is in gzip-compressed FASTA format"""
+ if not SNIFF_COMPRESSED_FASTAS:
+ return False
+ if not is_gzip(filename):
+ return False
+ return Sequence.sniff(self, filename)
+
+
class Fasta(Sequence):
"""Class representing a FASTA sequence"""
edam_format = "format_1929"
diff --git a/lib/galaxy/datatypes/sniff.py b/lib/galaxy/datatypes/sniff.py
index 90c914d6f32..5658a746fa3 100644
--- a/lib/galaxy/datatypes/sniff.py
+++ b/lib/galaxy/datatypes/sniff.py
@@ -487,7 +487,7 @@ def handle_uploaded_dataset_file(filename, datatypes_registry, ext='auto'):
AUTO_DETECT_EXTENSIONS = ['auto'] # should 'data' also cause auto detect?
DECOMPRESSION_FUNCTIONS = dict(gzip=gzip.GzipFile, bz2=bz2.BZ2File)
COMPRESSION_CHECK_FUNCTIONS = [('gzip', is_gzip), ('bz2', is_bz2)]
-COMPRESSION_DATATYPES = dict(gzip=['bam', 'fastq.gz', 'fastqsanger.gz', 'fastqillumina.gz', 'fastqsolexa.gz', 'fastqcssanger.gz'], bz2=['fastq.bz2', 'fastqsanger.bz2', 'fastqillumina.bz2', 'fastqsolexa.bz2', 'fastqcssanger.bz2'])
+COMPRESSION_DATATYPES = dict(gzip=['bam', 'fasta.gz', 'fastq.gz', 'fastqsanger.gz', 'fastqillumina.gz', 'fastqsolexa.gz', 'fastqcssanger.gz'], bz2=['fastq.bz2', 'fastqsanger.bz2', 'fastqillumina.bz2', 'fastqsolexa.bz2', 'fastqcssanger.bz2'])
COMPRESSED_EXTENSIONS = []
for exts in COMPRESSION_DATATYPES.values():
COMPRESSED_EXTENSIONS.extend(exts)