diff --git a/lib/galaxy/datatypes/binary.py b/lib/galaxy/datatypes/binary.py index f15543bd4de..10a053d28eb 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,10 +235,10 @@ 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) + 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 @@ -383,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) 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