Skip to content

Commit

Permalink
Merge pull request #22 from mdshw5/develop
Browse files Browse the repository at this point in the history
Add support for appending to existing SAM files (#21).
  • Loading branch information
mdshw5 authored Jun 29, 2021
2 parents 2cd82f5 + 7225e9b commit 3d0c873
Showing 1 changed file with 20 additions and 12 deletions.
32 changes: 20 additions & 12 deletions simplesam.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
except ImportError: #python2
from _multiprocessing import Connection

__version__ = '0.1.3.2'
__version__ = '0.1.4.0'

class DefaultOrderedDict(OrderedDict):
def __init__(self, default, items=[]):
Expand Down Expand Up @@ -226,24 +226,32 @@ def __init__(self, f, header=None):
try:
_, ext = os.path.splitext(f.name)
if ext == '.bam':
raise NotImplementedError('Bam writing support is not implemented.\n') # why not just pipe to samtools?
except AttributeError:
# Why not just pipe to samtools?
raise NotImplementedError("Bam writing support is not implemented.\n")
except AttributeError: # pipe?
pass
self.file = f
if header is not None:
self.header = DefaultOrderedDict(OrderedDict)
if self.file.mode == 'a' and self.file.tell() == 0:
# We're appending to an empty file. Assume we need a header.
self._merge_header(header)
self._header_dict_write()
elif self.file.mode == 'a' and self.file.tell() > 0:
if header:
raise NotImplementedError("Updating headers on existing SAM files is not supported.\n")
else:
self.header = DefaultOrderedDict(OrderedDict)
self.header['@HD']['VN:1.0'] = ['SO:unknown']
self._header_dict_format()
self._merge_header(header)
self._header_dict_write()

def _merge_header(self, header):
for key, values in header.items():
for k, v in values.items():
self.header[key][k] = v
self.header = DefaultOrderedDict(OrderedDict)
if not header:
self.header['@HD']['VN:1.0'] = ['SO:unknown']
else:
for key, values in header.items():
for k, v in values.items():
self.header[key][k] = v

def _header_dict_format(self):
def _header_dict_write(self):
for key, value in self.header.items():
for k, v in value.items():
tags = '\t'.join(v)
Expand Down

0 comments on commit 3d0c873

Please sign in to comment.