diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2012-12-29 20:54:49 (GMT) |
---|---|---|
committer | Serhiy Storchaka <storchaka@gmail.com> | 2012-12-29 20:54:49 (GMT) |
commit | 44c66c72c9045a7824d07175cfc07845e4d7d28a (patch) | |
tree | a88a17bd7c1a4fb9542d5d9a4f7d91c80eb303e4 | |
parent | ff2840a76f04c8846e8ad5b7e8379998ab3e87a6 (diff) | |
download | cpython-44c66c72c9045a7824d07175cfc07845e4d7d28a.zip cpython-44c66c72c9045a7824d07175cfc07845e4d7d28a.tar.gz cpython-44c66c72c9045a7824d07175cfc07845e4d7d28a.tar.bz2 |
Issue #16486: Make aifc files work with 'with' as context managers.
-rw-r--r-- | Doc/library/aifc.rst | 4 | ||||
-rw-r--r-- | Lib/aifc.py | 12 | ||||
-rw-r--r-- | Lib/test/test_aifc.py | 12 | ||||
-rw-r--r-- | Misc/NEWS | 2 |
4 files changed, 30 insertions, 0 deletions
diff --git a/Doc/library/aifc.rst b/Doc/library/aifc.rst index 999bad8..f8a6ab7 100644 --- a/Doc/library/aifc.rst +++ b/Doc/library/aifc.rst @@ -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: diff --git a/Lib/aifc.py b/Lib/aifc.py index a19b38f..67ea5da 100644 --- a/Lib/aifc.py +++ b/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. # diff --git a/Lib/test/test_aifc.py b/Lib/test/test_aifc.py index 9c0e7b9..34589f2 100644 --- a/Lib/test/test_aifc.py +++ b/Lib/test/test_aifc.py @@ -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. |