allpy
changeset 639:b6a53615f1e9
allpy.fileio: wrapped some calls into try-finally; EmbossFile should now behave correctly if exceptions occur now
author | Daniil Alexeyevsky <dendik@kodomo.fbb.msu.ru> |
---|---|
date | Mon, 30 May 2011 20:38:58 +0400 |
parents | 843d6a5f8521 |
children | 69079d72d207 |
files | allpy/fileio.py |
diffstat | 1 files changed, 15 insertions(+), 12 deletions(-) [+] |
line diff
1.1 --- a/allpy/fileio.py Wed May 25 20:25:32 2011 +0400 1.2 +++ b/allpy/fileio.py Mon May 30 20:38:58 2011 +0400 1.3 @@ -57,12 +57,14 @@ 1.4 1.5 def write_strings(self, sequences): 1.6 """Write sequences to file.""" 1.7 - # XXX: in case of exceptions files are not closed, nor unlinked 1.8 - tmpfile = NamedTemporaryFile('w', delete=False) 1.9 - FastaFile(tmpfile).write_strings(self.fix_sequences(sequences)) 1.10 - tmpfile.close() 1.11 - os.system("seqret %s::%s %s" % (self.format, tmpfile.name, self.file.name)) 1.12 - os.unlink(tmpfile.name) 1.13 + try: 1.14 + tmpfile = NamedTemporaryFile('w', delete=False) 1.15 + FastaFile(tmpfile).write_strings(self.fix_sequences(sequences)) 1.16 + tmpfile.close() 1.17 + os.system("seqret %s::%s %s" % (self.format, tmpfile.name, self.file.name)) 1.18 + finally: 1.19 + tmpfile.close() 1.20 + os.unlink(tmpfile.name) 1.21 1.22 def fix_sequences(self, sequences): 1.23 """EMBOSS does not permit : in file names. Fix sequences for that.""" 1.24 @@ -71,12 +73,13 @@ 1.25 1.26 def read_strings(self): 1.27 """Read sequences from file.""" 1.28 - # XXX: in case of exceptions files are not closed, nor unlinked 1.29 - tmpfile = NamedTemporaryFile(delete=False) 1.30 - self.file.flush() 1.31 - os.system("seqret %s %s::%s" % (self.file.name, self.format, tmpfile.name)) 1.32 - sequences = FastaFile(tmpfile).read_strings() 1.33 - os.unlink(tmpfile) 1.34 + try: 1.35 + tmpfile = NamedTemporaryFile(delete=False) 1.36 + self.file.flush() 1.37 + os.system("seqret %s %s::%s" % (self.file.name, self.format, tmpfile.name)) 1.38 + sequences = FastaFile(tmpfile).read_strings() 1.39 + finally: 1.40 + os.unlink(tmpfile) 1.41 return sequences 1.42 1.43 # vim: set et ts=4 sts=4 sw=4: