summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Svetlov <andrew.svetlov@gmail.com>2012-12-29 23:11:20 +0200
committerAndrew Svetlov <andrew.svetlov@gmail.com>2012-12-29 23:11:20 +0200
commit9edccb47db7683031e76f02e659e637cf04ba2d7 (patch)
tree4e8eb0908f5a503117615adc66dbf54a5fa997db
parentf0724e7695ac427d64f68c785a2da8abd2ec01f5 (diff)
parent44c66c72c9045a7824d07175cfc07845e4d7d28a (diff)
downloadcpython-git-9edccb47db7683031e76f02e659e637cf04ba2d7.tar.gz
merge heads
-rw-r--r--Doc/library/aifc.rst4
-rw-r--r--Lib/aifc.py12
-rw-r--r--Lib/test/test_aifc.py12
-rw-r--r--Misc/NEWS2
4 files changed, 30 insertions, 0 deletions
diff --git a/Doc/library/aifc.rst b/Doc/library/aifc.rst
index 999bad83ca..f8a6ab7ef8 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 a19b38f4aa..67ea5dadc0 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 9c0e7b96ce..34589f24c1 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'')
diff --git a/Misc/NEWS b/Misc/NEWS
index 4f7f85622e..d4aa0dda76 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -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.