changeset: 86244:3303d735058f branch: 2.7 parent: 86237:9f1e1da820fb user: Serhiy Storchaka date: Sat Oct 12 21:35:33 2013 +0300 files: Lib/aifc.py Lib/sunau.py Lib/wave.py Misc/NEWS description: Issue #18919: If the close() method of a writer in the sunau or wave module failed, second invocation of close() and destructor no more raise an exception. Second invocation of close() on sunau writer now has no effects. The aifc module now accepts lower case of names of the 'ulaw' and 'alaw' codecs. diff -r 9f1e1da820fb -r 3303d735058f Lib/aifc.py --- a/Lib/aifc.py Sat Oct 12 18:44:13 2013 +0200 +++ b/Lib/aifc.py Sat Oct 12 21:35:33 2013 +0300 @@ -486,7 +486,7 @@ try: import cl except ImportError: - if self._comptype == 'ULAW': + if self._comptype in ('ULAW', 'ulaw'): try: import audioop self._convert = self._ulaw2lin @@ -495,9 +495,9 @@ except ImportError: pass raise Error, 'cannot read compressed AIFF-C files' - if self._comptype == 'ULAW': + if self._comptype in ('ULAW', 'ulaw'): scheme = cl.G711_ULAW - elif self._comptype == 'ALAW': + elif self._comptype in ('ALAW', 'alaw'): scheme = cl.G711_ALAW else: raise Error, 'unsupported compression type' @@ -654,7 +654,7 @@ def setcomptype(self, comptype, compname): if self._nframeswritten: raise Error, 'cannot change parameters after starting to write' - if comptype not in ('NONE', 'ULAW', 'ALAW', 'G722'): + if comptype not in ('NONE', 'ULAW', 'ulaw', 'ALAW', 'alaw', 'G722'): raise Error, 'unsupported compression type' self._comptype = comptype self._compname = compname @@ -674,7 +674,7 @@ nchannels, sampwidth, framerate, nframes, comptype, compname = info if self._nframeswritten: raise Error, 'cannot change parameters after starting to write' - if comptype not in ('NONE', 'ULAW', 'ALAW', 'G722'): + if comptype not in ('NONE', 'ULAW', 'ulaw', 'ALAW', 'alaw', 'G722'): raise Error, 'unsupported compression type' self.setnchannels(nchannels) self.setsampwidth(sampwidth) @@ -803,7 +803,7 @@ try: import cl except ImportError: - if self._comptype == 'ULAW': + if self._comptype in ('ULAW', 'ulaw'): try: import audioop self._convert = self._lin2ulaw @@ -811,9 +811,9 @@ except ImportError: pass raise Error, 'cannot write compressed AIFF-C files' - if self._comptype == 'ULAW': + if self._comptype in ('ULAW', 'ulaw'): scheme = cl.G711_ULAW - elif self._comptype == 'ALAW': + elif self._comptype in ('ALAW', 'alaw'): scheme = cl.G711_ALAW else: raise Error, 'unsupported compression type' @@ -866,7 +866,7 @@ _write_short(self._file, self._nchannels) self._nframes_pos = self._file.tell() _write_ulong(self._file, self._nframes) - if self._comptype in ('ULAW', 'ALAW', 'G722'): + if self._comptype in ('ULAW', 'ulaw', 'ALAW', 'alaw', 'G722'): _write_short(self._file, 8) else: _write_short(self._file, self._sampwidth * 8) diff -r 9f1e1da820fb -r 3303d735058f Lib/sunau.py --- a/Lib/sunau.py Sat Oct 12 18:44:13 2013 +0200 +++ b/Lib/sunau.py Sat Oct 12 21:35:33 2013 +0300 @@ -406,12 +406,15 @@ self._patchheader() def close(self): - self._ensure_header_written() - if self._nframeswritten != self._nframes or \ - self._datalength != self._datawritten: - self._patchheader() - self._file.flush() - self._file = None + if self._file: + try: + self._ensure_header_written() + if self._nframeswritten != self._nframes or \ + self._datalength != self._datawritten: + self._patchheader() + self._file.flush() + finally: + self._file = None # # private methods diff -r 9f1e1da820fb -r 3303d735058f Lib/wave.py --- a/Lib/wave.py Sat Oct 12 18:44:13 2013 +0200 +++ b/Lib/wave.py Sat Oct 12 21:35:33 2013 +0300 @@ -436,11 +436,13 @@ def close(self): if self._file: - self._ensure_header_written(0) - if self._datalength != self._datawritten: - self._patchheader() - self._file.flush() - self._file = None + try: + self._ensure_header_written(0) + if self._datalength != self._datawritten: + self._patchheader() + self._file.flush() + finally: + self._file = None if self._i_opened_the_file: self._i_opened_the_file.close() self._i_opened_the_file = None diff -r 9f1e1da820fb -r 3303d735058f Misc/NEWS --- a/Misc/NEWS Sat Oct 12 18:44:13 2013 +0200 +++ b/Misc/NEWS Sat Oct 12 21:35:33 2013 +0300 @@ -32,6 +32,12 @@ Library ------- +- Issue #18919: If the close() method of a writer in the sunau or wave module + failed, second invocation of close() and destructor no more raise an + exception. Second invocation of close() on sunau writer now has no effects. + The aifc module now accepts lower case of names of the 'ulaw' and 'alaw' + codecs. + - Issue #19131: The aifc module now correctly reads and writes sampwidth of compressed streams.