Kaydet (Commit) 9edccb47 authored tarafından Andrew Svetlov's avatar Andrew Svetlov

merge heads

...@@ -51,6 +51,10 @@ Module :mod:`aifc` defines the following function: ...@@ -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:
......
...@@ -334,6 +334,12 @@ class Aifc_read: ...@@ -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: ...@@ -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.
# #
......
...@@ -43,6 +43,18 @@ class AIFCTest(unittest.TestCase): ...@@ -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'')
......
...@@ -200,6 +200,8 @@ Core and Builtins ...@@ -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.
......
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