From 309b71720e3b5615fac6abd028aa66735fa94eef Mon Sep 17 00:00:00 2001 From: mvdbeek Date: Sat, 9 Dec 2017 22:16:02 +0100 Subject: [PATCH] Improvements to datatypes suggested by @nsoranzo --- lib/galaxy/datatypes/binary.py | 10 +++++----- lib/galaxy/datatypes/tabular.py | 5 ++--- lib/galaxy/datatypes/test/1.unsorted.bam | Bin 4914 -> 0 bytes .../visualization/data_providers/genome.py | 2 +- test/unit/datatypes/util.py | 10 +++++----- 5 files changed, 13 insertions(+), 14 deletions(-) delete mode 100644 lib/galaxy/datatypes/test/1.unsorted.bam diff --git a/lib/galaxy/datatypes/binary.py b/lib/galaxy/datatypes/binary.py index acbb0474177..daefe7a7e97 100644 --- a/lib/galaxy/datatypes/binary.py +++ b/lib/galaxy/datatypes/binary.py @@ -210,7 +210,7 @@ class Bam(Binary): @staticmethod def merge(split_files, output_file): """ - Merges Bam files + Merges BAM files :param split_files: List of bam file paths to merge :param output_file: Write merged bam file to this location @@ -232,7 +232,7 @@ class Bam(Binary): with open(os.devnull, 'w') as devnull: subprocess.check_call(cmd, stderr=devnull, shell=False) needs_sorting = False - except Exception: + except subprocess.CalledProcessError: needs_sorting = True try: os.unlink(index_name) @@ -242,10 +242,10 @@ class Bam(Binary): def groom_dataset_content(self, file_name): """ - Ensures that the Bam file contents are sorted. This function is called + Ensures that the BAM file contents are sorted. This function is called on an output dataset after the content is initially generated. """ - # Use pysam to sort the Bam file + # Use pysam to sort the BAM file # This command may also creates temporary files .%d.bam when the # whole alignment cannot fit into memory. # do this in a unique temp directory, because of possible .%d.bam temp files @@ -254,7 +254,7 @@ class Bam(Binary): return tmp_dir = tempfile.mkdtemp() tmp_sorted_dataset_file_name_prefix = os.path.join(tmp_dir, 'sorted') - sorted_file_name = "%s.bam" % tmp_sorted_dataset_file_name_prefix # samtools accepts a prefix, not a filename, it always adds .bam to the prefix + sorted_file_name = "%s.bam" % tmp_sorted_dataset_file_name_prefix slots = os.environ.get('GALAXY_SLOTS', 1) try: pysam.sort("-@%s" % slots, file_name, '-T', tmp_sorted_dataset_file_name_prefix, '-O', 'BAM', '-o', sorted_file_name) diff --git a/lib/galaxy/datatypes/tabular.py b/lib/galaxy/datatypes/tabular.py index bf4b264fadf..51886d7b1e3 100644 --- a/lib/galaxy/datatypes/tabular.py +++ b/lib/galaxy/datatypes/tabular.py @@ -16,7 +16,6 @@ from cgi import escape from json import dumps import pysam -import pysam.bcftools from galaxy import util from galaxy.datatypes import binary, data, metadata @@ -740,7 +739,7 @@ class Vcf(BaseVcf): def sniff(self, filename): if is_gzip(filename): return False - return BaseVcf.sniff(self, filename) + return super(Vcf, self).sniff(filename) class VcfGz(BaseVcf, binary.Binary): @@ -752,7 +751,7 @@ class VcfGz(BaseVcf, binary.Binary): def sniff(self, filename): if not is_gzip(filename): return False - return BaseVcf.sniff(self, filename) + return super(VcfGz, self).sniff(filename) def set_meta(self, dataset, **kwd): super(BaseVcf, self).set_meta(dataset, **kwd) diff --git a/lib/galaxy/datatypes/test/1.unsorted.bam b/lib/galaxy/datatypes/test/1.unsorted.bam deleted file mode 100644 index a24874147b5e651e2c4c221c5ba06f873df53753..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4914 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 kn!N=803VA81ONa4009360763o02=@U00000000000HTq&Z~y=R diff --git a/lib/galaxy/visualization/data_providers/genome.py b/lib/galaxy/visualization/data_providers/genome.py index 8bf1cdafae6..d78fbccadc5 100644 --- a/lib/galaxy/visualization/data_providers/genome.py +++ b/lib/galaxy/visualization/data_providers/genome.py @@ -322,7 +322,7 @@ class TabixDataProvider(FilterableMixin, GenomeDataProvider): @contextmanager def open_data_file(self): - # We create a symlnk to the index file. This is + # We create a symlink to the index file. This is # required until https://github.com/pysam-developers/pysam/pull/586 is merged. if PYSAM_INDEX_SYMLINK_NECESSARY: fd, index_path = tempfile.mkstemp(suffix='.tbi') diff --git a/test/unit/datatypes/util.py b/test/unit/datatypes/util.py index e49b75f12c5..47d5be832b9 100644 --- a/test/unit/datatypes/util.py +++ b/test/unit/datatypes/util.py @@ -9,12 +9,12 @@ from galaxy.util.hash_util import md5_hash_file @contextmanager -def get_dataset(file, index_attr='bam_index', dataset_id=1, has_data=True): +def get_dataset(filename, index_attr='bam_index', dataset_id=1, has_data=True): dataset = Bunch() dataset.has_data = lambda: True dataset.id = dataset_id dataset.metadata = Bunch() - with get_input_files(file) as input_files, get_tmp_path() as index_path: + with get_input_files(filename) as input_files, get_tmp_path() as index_path: dataset.file_name = input_files[0] index = Bunch() index.file_name = index_path @@ -39,9 +39,9 @@ def get_input_files(*args): temp_dir = tempfile.mkdtemp() test_files = [] try: - for file in args: - shutil.copy(get_test_fname(file), temp_dir) - test_files.append(os.path.join(temp_dir, file)) + for filename in args: + shutil.copy(get_test_fname(filename), temp_dir) + test_files.append(os.path.join(temp_dir, filename)) md5_sums = [md5_hash_file(f) for f in test_files] yield test_files new_md5_sums = [md5_hash_file(f) for f in test_files]