Serhiy Storchaka added the comment:
Sorry, I miss that test_close() already exists. Merged.
----------
Added file: http://bugs.python.org/file27999/aifc_close.patch
Added file: http://bugs.python.org/file28000/aifc_close-2.7.patch
_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue16485>
_______________________________________
diff -r cb612c5f30cb Lib/aifc.py
--- a/Lib/aifc.py Thu Nov 15 18:22:23 2012 +0000
+++ b/Lib/aifc.py Fri Nov 16 15:22:51 2012 +0200
@@ -692,7 +692,9 @@
self._patchheader()
def close(self):
- if self._file:
+ if self._file is None:
+ return
+ try:
self._ensure_header_written(0)
if self._datawritten & 1:
# quick pad to even size
@@ -700,13 +702,15 @@
self._datawritten = self._datawritten + 1
self._writemarkers()
if self._nframeswritten != self._nframes or \
- self._datalength != self._datawritten or \
- self._marklength:
+ self._datalength != self._datawritten or \
+ self._marklength:
self._patchheader()
+ finally:
# Prevent ref cycles
self._convert = None
- self._file.close()
+ f = self._file
self._file = None
+ f.close()
#
# Internal methods.
diff -r cb612c5f30cb Lib/test/test_aifc.py
--- a/Lib/test/test_aifc.py Thu Nov 15 18:22:23 2012 +0000
+++ b/Lib/test/test_aifc.py Fri Nov 16 15:22:51 2012 +0200
@@ -112,6 +112,13 @@
self.assertEqual(testfile.closed, False)
f.close()
self.assertEqual(testfile.closed, True)
+ testfile = open(TESTFN, 'wb')
+ fout = aifc.open(testfile, 'wb')
+ self.assertFalse(testfile.closed)
+ with self.assertRaises(aifc.Error):
+ fout.close()
+ self.assertTrue(testfile.closed)
+ fout.close() # do nothing
def test_write_header_comptype_sampwidth(self):
for comptype in (b'ULAW', b'ulaw', b'ALAW', b'alaw', b'G722'):
@@ -286,11 +293,13 @@
def test_write_header_raises(self):
fout = aifc.open(io.BytesIO(), 'wb')
self.assertRaises(aifc.Error, fout.close)
+ fout = aifc.open(io.BytesIO(), 'wb')
fout.setnchannels(1)
self.assertRaises(aifc.Error, fout.close)
+ fout = aifc.open(io.BytesIO(), 'wb')
+ fout.setnchannels(1)
fout.setsampwidth(1)
self.assertRaises(aifc.Error, fout.close)
- fout.initfp(None)
def test_write_header_comptype_raises(self):
for comptype in (b'ULAW', b'ulaw', b'ALAW', b'alaw', b'G722'):
diff -r 457c0c9c7893 Lib/aifc.py
--- a/Lib/aifc.py Thu Nov 15 07:10:27 2012 +0100
+++ b/Lib/aifc.py Fri Nov 16 15:25:05 2012 +0200
@@ -732,22 +732,28 @@
self._patchheader()
def close(self):
- self._ensure_header_written(0)
- if self._datawritten & 1:
- # quick pad to even size
- self._file.write(chr(0))
- self._datawritten = self._datawritten + 1
- self._writemarkers()
- if self._nframeswritten != self._nframes or \
- self._datalength != self._datawritten or \
- self._marklength:
- self._patchheader()
- if self._comp:
- self._comp.CloseCompressor()
- self._comp = None
- # Prevent ref cycles
- self._convert = None
- self._file.close()
+ if self._file is None:
+ return
+ try:
+ self._ensure_header_written(0)
+ if self._datawritten & 1:
+ # quick pad to even size
+ self._file.write(chr(0))
+ self._datawritten = self._datawritten + 1
+ self._writemarkers()
+ if self._nframeswritten != self._nframes or \
+ self._datalength != self._datawritten or \
+ self._marklength:
+ self._patchheader()
+ if self._comp:
+ self._comp.CloseCompressor()
+ self._comp = None
+ finally:
+ # Prevent ref cycles
+ self._convert = None
+ f = self._file
+ self._file = None
+ f.close()
#
# Internal methods.
diff -r 457c0c9c7893 Lib/test/test_aifc.py
--- a/Lib/test/test_aifc.py Thu Nov 15 07:10:27 2012 +0100
+++ b/Lib/test/test_aifc.py Fri Nov 16 15:25:05 2012 +0200
@@ -106,6 +106,13 @@
self.assertEqual(testfile.closed, False)
f.close()
self.assertEqual(testfile.closed, True)
+ testfile = open(TESTFN, 'wb')
+ fout = aifc.open(testfile, 'wb')
+ self.assertFalse(testfile.closed)
+ with self.assertRaises(aifc.Error):
+ fout.close()
+ self.assertTrue(testfile.closed)
+ fout.close() # do nothing
class AIFCLowLevelTest(unittest.TestCase):
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com