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 --git a/Lib/aifc.py b/Lib/aifc.py
index f4c196c..d8b7fab 100644
--- a/Lib/aifc.py
+++ b/Lib/aifc.py
@@ -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 --git a/Lib/sunau.py b/Lib/sunau.py
index 4f0885a..31b280d 100644
--- a/Lib/sunau.py
+++ b/Lib/sunau.py
@@ -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 --git a/Lib/wave.py b/Lib/wave.py
index 16b11dc..04a1a6d 100644
--- a/Lib/wave.py
+++ b/Lib/wave.py
@@ -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