From b87d57aac7c15c0455e0936c0325a1a0b326407e Mon Sep 17 00:00:00 2001 From: mvdbeek Date: Mon, 12 Feb 2018 21:57:02 +0100 Subject: [PATCH 1/3] Make galaxy compatible with pysam 0.14 --- lib/galaxy/datatypes/binary.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/galaxy/datatypes/binary.py b/lib/galaxy/datatypes/binary.py index f15543bd4de..35c9cd3576c 100644 --- a/lib/galaxy/datatypes/binary.py +++ b/lib/galaxy/datatypes/binary.py @@ -12,6 +12,7 @@ import sys import tarfile import tempfile import zipfile +from collections import OrderedDict from json import dumps import h5py @@ -234,7 +235,7 @@ class BamNative(Binary): # TODO: Reference names, lengths, read_groups and headers can become very large, truncate when necessary dataset.metadata.reference_names = list(bam_file.references) dataset.metadata.reference_lengths = list(bam_file.lengths) - dataset.metadata.bam_header = bam_file.header + dataset.metadata.bam_header = OrderedDict((k, v) for k, v in bam_file.header.items()) dataset.metadata.read_groups = [read_group['ID'] for read_group in dataset.metadata.bam_header.get('RG', []) if 'ID' in read_group] dataset.metadata.sort_order = bam_file.header.get('HD', {}).get('SO', None) dataset.metadata.bam_version = bam_file.header.get('HD', {}).get('VN', None) From 349b25b74ae4de51ab567a0215054d854af9a934 Mon Sep 17 00:00:00 2001 From: mvdbeek Date: Tue, 13 Feb 2018 11:49:10 +0100 Subject: [PATCH 2/3] Minimize duplication of BAM set_meta code --- lib/galaxy/datatypes/binary.py | 19 +++---------------- 1 file changed, 3 insertions(+), 16 deletions(-) diff --git a/lib/galaxy/datatypes/binary.py b/lib/galaxy/datatypes/binary.py index 35c9cd3576c..10a053d28eb 100644 --- a/lib/galaxy/datatypes/binary.py +++ b/lib/galaxy/datatypes/binary.py @@ -237,8 +237,8 @@ class BamNative(Binary): dataset.metadata.reference_lengths = list(bam_file.lengths) dataset.metadata.bam_header = OrderedDict((k, v) for k, v in bam_file.header.items()) dataset.metadata.read_groups = [read_group['ID'] for read_group in dataset.metadata.bam_header.get('RG', []) if 'ID' in read_group] - dataset.metadata.sort_order = bam_file.header.get('HD', {}).get('SO', None) - dataset.metadata.bam_version = bam_file.header.get('HD', {}).get('VN', None) + dataset.metadata.sort_order = dataset.metadata.bam_header.get('HD', {}).get('SO', None) + dataset.metadata.bam_version = dataset.metadata.bam_header.get('HD', {}).get('VN', None) except Exception: # Per Dan, don't log here because doing so will cause datasets that # fail metadata to end in the error state @@ -384,25 +384,12 @@ class Bam(BamNative): def set_meta(self, dataset, overwrite=True, **kwd): # These metadata values are not accessible by users, always overwrite + super(Bam, self).set_meta(dataset=dataset, overwrite=overwrite, **kwd) index_file = dataset.metadata.bam_index if not index_file: index_file = dataset.metadata.spec['bam_index'].param.new_file(dataset=dataset) pysam.index(dataset.file_name, index_file.file_name) dataset.metadata.bam_index = index_file - # Now use pysam with BAI index to determine additional metadata - try: - bam_file = pysam.AlignmentFile(dataset.file_name, mode='rb', index_filename=index_file.file_name) - # TODO: Reference names, lengths, read_groups and headers can become very large, truncate when necessary - dataset.metadata.reference_names = list(bam_file.references) - dataset.metadata.reference_lengths = list(bam_file.lengths) - dataset.metadata.bam_header = bam_file.header - dataset.metadata.read_groups = [read_group['ID'] for read_group in dataset.metadata.bam_header.get('RG', []) if 'ID' in read_group] - dataset.metadata.sort_order = bam_file.header.get('HD', {}).get('SO', None) - dataset.metadata.bam_version = bam_file.header.get('HD', {}).get('VN', None) - except Exception: - # Per Dan, don't log here because doing so will cause datasets that - # fail metadata to end in the error state - pass def sniff(self, file_name): return super(Bam, self).sniff(file_name) and not self.dataset_content_needs_grooming(file_name) From 3b8a2f9edc93c45e5153896035f321bd23c7ec1a Mon Sep 17 00:00:00 2001 From: mvdbeek Date: Tue, 13 Feb 2018 15:22:51 +0100 Subject: [PATCH 3/3] Pin pysam to 0.14 --- lib/galaxy/dependencies/pinned-requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/galaxy/dependencies/pinned-requirements.txt b/lib/galaxy/dependencies/pinned-requirements.txt index adddb8247b9..dd1ccc5f58a 100644 --- a/lib/galaxy/dependencies/pinned-requirements.txt +++ b/lib/galaxy/dependencies/pinned-requirements.txt @@ -11,7 +11,7 @@ mercurial==3.7.3; python_version < '3.0' pycrypto==2.6.1 uWSGI==2.0.15 # Flexible BAM index naming is new to core pysam -pysam>=0.13 +pysam==0.14 # Install python_lzo if you want to support indexed access to lzo-compressed # locally cached maf files via bx-python