merge heads

This commit is contained in:
Andrew Svetlov 2012-12-29 23:11:20 +02:00
commit 9edccb47db
4 changed files with 30 additions and 0 deletions

View file

@ -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 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 time how many samples you are going to write in total and use
:meth:`writeframesraw` and :meth:`setnframes`. :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 Objects returned by :func:`.open` when a file is opened for reading have the
following methods: following methods:

View file

@ -334,6 +334,12 @@ class Aifc_read:
# else, assume it is an open file object already # else, assume it is an open file object already
self.initfp(f) self.initfp(f)
def __enter__(self):
return self
def __exit__(self, *args):
self.close()
# #
# User visible methods. # User visible methods.
# #
@ -553,6 +559,12 @@ class Aifc_write:
def __del__(self): def __del__(self):
self.close() self.close()
def __enter__(self):
return self
def __exit__(self, *args):
self.close()
# #
# User visible methods. # User visible methods.
# #

View file

@ -43,6 +43,18 @@ class AIFCTest(unittest.TestCase):
(2, 2, 48000, 14400, b'NONE', b'not compressed'), (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): def test_read(self):
f = self.f = aifc.open(self.sndfilepath) f = self.f = aifc.open(self.sndfilepath)
self.assertEqual(f.readframes(0), b'') self.assertEqual(f.readframes(0), b'')

View file

@ -200,6 +200,8 @@ Core and Builtins
Library Library
------- -------
- Issue #16486: Make aifc files work with 'with' as context managers.
- Issue #16485: Fix file descriptor not being closed if file header patching - Issue #16485: Fix file descriptor not being closed if file header patching
fails on closing of aifc file. fails on closing of aifc file.