Kaydet (Commit) 44c66c72 authored tarafından Serhiy Storchaka's avatar Serhiy Storchaka

Issue #16486: Make aifc files work with 'with' as context managers.

üst ff2840a7
......@@ -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:
......
......@@ -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'')
......
......@@ -200,6 +200,8 @@ Core and Builtins
Library
-------
- Issue #16486: Make aifc files work with 'with' as context managers.
- Issue #16485: Fix file descriptor not being closed if file header patching
fails on closing of aifc file.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment