Issue #16486: Make aifc files work with 'with' as context managers.
This commit is contained in:
parent
ff2840a76f
commit
44c66c72c9
|
@ -51,6 +51,10 @@ Module :mod:`aifc` defines the following function:
|
|||
used for writing, the file object should be seekable, unless you know ahead of
|
||||
time how many samples you are going to write in total and use
|
||||
:meth:`writeframesraw` and :meth:`setnframes`.
|
||||
Objects returned by :func:`.open` also supports the :keyword:`with` statement.
|
||||
|
||||
.. versionchanged:: 3.4
|
||||
Support for the :keyword:`with` statement was added.
|
||||
|
||||
Objects returned by :func:`.open` when a file is opened for reading have the
|
||||
following methods:
|
||||
|
|
12
Lib/aifc.py
12
Lib/aifc.py
|
@ -334,6 +334,12 @@ class Aifc_read:
|
|||
# else, assume it is an open file object already
|
||||
self.initfp(f)
|
||||
|
||||
def __enter__(self):
|
||||
return self
|
||||
|
||||
def __exit__(self, *args):
|
||||
self.close()
|
||||
|
||||
#
|
||||
# User visible methods.
|
||||
#
|
||||
|
@ -553,6 +559,12 @@ class Aifc_write:
|
|||
def __del__(self):
|
||||
self.close()
|
||||
|
||||
def __enter__(self):
|
||||
return self
|
||||
|
||||
def __exit__(self, *args):
|
||||
self.close()
|
||||
|
||||
#
|
||||
# User visible methods.
|
||||
#
|
||||
|
|
|
@ -43,6 +43,18 @@ class AIFCTest(unittest.TestCase):
|
|||
(2, 2, 48000, 14400, b'NONE', b'not compressed'),
|
||||
)
|
||||
|
||||
def test_context_manager(self):
|
||||
with open(self.sndfilepath, 'rb') as testfile:
|
||||
with aifc.open(testfile) as f:
|
||||
pass
|
||||
self.assertEqual(testfile.closed, True)
|
||||
with open(TESTFN, 'wb') as testfile:
|
||||
with self.assertRaises(aifc.Error):
|
||||
with aifc.open(testfile, 'wb') as fout:
|
||||
pass
|
||||
self.assertEqual(testfile.closed, True)
|
||||
fout.close() # do nothing
|
||||
|
||||
def test_read(self):
|
||||
f = self.f = aifc.open(self.sndfilepath)
|
||||
self.assertEqual(f.readframes(0), b'')
|
||||
|
|
Loading…
Reference in New Issue