Issue #18878: sunau.open now supports the context manager protocol. Based on
patches by Claudiu Popa and R. David Murray.
diff --git a/Lib/sunau.py b/Lib/sunau.py
index 010ce23..efdc146 100644
--- a/Lib/sunau.py
+++ b/Lib/sunau.py
@@ -168,6 +168,12 @@
if self._file:
self.close()
+ def __enter__(self):
+ return self
+
+ def __exit__(self, *args):
+ self.close()
+
def initfp(self, file):
self._file = file
self._soundpos = 0
@@ -303,6 +309,12 @@
self.close()
self._file = None
+ def __enter__(self):
+ return self
+
+ def __exit__(self, *args):
+ self.close()
+
def initfp(self, file):
self._file = file
self._framerate = 0
@@ -410,14 +422,17 @@
self._patchheader()
def close(self):
- self._ensure_header_written()
- if self._nframeswritten != self._nframes or \
- self._datalength != self._datawritten:
- self._patchheader()
- self._file.flush()
- if self._opened and self._file:
- self._file.close()
- 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:
+ if self._opened and self._file:
+ self._file.close()
+ self._file = None
#
# private methods