[Python-checkins] r85807 - in python/branches/py3k: Doc/library/ossaudiodev.rst Lib/test/test_ossaudiodev.py Misc/NEWS Modules/ossaudiodev.c
georg.brandl
python-checkins at python.org
Sat Oct 23 19:31:52 CEST 2010
Author: georg.brandl
Date: Sat Oct 23 19:31:52 2010
New Revision: 85807
Log:
#6518: enable context manager protocol for ossaudiodev types.
Modified:
python/branches/py3k/Doc/library/ossaudiodev.rst
python/branches/py3k/Lib/test/test_ossaudiodev.py
python/branches/py3k/Misc/NEWS
python/branches/py3k/Modules/ossaudiodev.c
Modified: python/branches/py3k/Doc/library/ossaudiodev.rst
==============================================================================
--- python/branches/py3k/Doc/library/ossaudiodev.rst (original)
+++ python/branches/py3k/Doc/library/ossaudiodev.rst Sat Oct 23 19:31:52 2010
@@ -159,6 +159,11 @@
is only useful in non-blocking mode. Has no return value, since the amount of
data written is always equal to the amount of data supplied.
+.. versionchanged:: 3.2
+ Audio device objects also support the context manager protocol, i.e. they can
+ be used in a :keyword:`with` statement.
+
+
The following methods each map to exactly one :func:`ioctl` system call. The
correspondence is obvious: for example, :meth:`setfmt` corresponds to the
``SNDCTL_DSP_SETFMT`` ioctl, and :meth:`sync` to ``SNDCTL_DSP_SYNC`` (this can
@@ -346,6 +351,10 @@
Returns the file handle number of the open mixer device file.
+.. versionchanged:: 3.2
+ Mixer objects also support the context manager protocol.
+
+
The remaining methods are specific to audio mixing:
Modified: python/branches/py3k/Lib/test/test_ossaudiodev.py
==============================================================================
--- python/branches/py3k/Lib/test/test_ossaudiodev.py (original)
+++ python/branches/py3k/Lib/test/test_ossaudiodev.py Sat Oct 23 19:31:52 2010
@@ -162,11 +162,13 @@
def test_mixer_methods(self):
# Issue #8139: ossaudiodev didn't initialize its types properly,
# therefore some methods were unavailable.
- mixer = ossaudiodev.openmixer()
- try:
+ with ossaudiodev.openmixer() as mixer:
self.assertGreaterEqual(mixer.fileno(), 0)
- finally:
- mixer.close()
+
+ def test_with(self):
+ with ossaudiodev.open('w') as dsp:
+ pass
+ self.assertTrue(dsp.closed)
def test_main():
Modified: python/branches/py3k/Misc/NEWS
==============================================================================
--- python/branches/py3k/Misc/NEWS (original)
+++ python/branches/py3k/Misc/NEWS Sat Oct 23 19:31:52 2010
@@ -126,6 +126,8 @@
Extensions
----------
+- Issue #6518: Support context manager protcol for ossaudiodev types.
+
- Issue #678250: Make mmap flush a noop on ACCESS_READ and ACCESS_COPY.
- Issue #9054: Fix a crash occurring when using the pyexpat module
Modified: python/branches/py3k/Modules/ossaudiodev.c
==============================================================================
--- python/branches/py3k/Modules/ossaudiodev.c (original)
+++ python/branches/py3k/Modules/ossaudiodev.c Sat Oct 23 19:31:52 2010
@@ -470,6 +470,23 @@
}
static PyObject *
+oss_self(PyObject *self)
+{
+ Py_INCREF(self);
+ return self;
+}
+
+static PyObject *
+oss_exit(PyObject *self, PyObject *unused)
+{
+ PyObject *ret = PyObject_CallMethod(self, "close", NULL);
+ if (!ret)
+ return NULL;
+ Py_DECREF(ret);
+ Py_RETURN_NONE;
+}
+
+static PyObject *
oss_fileno(oss_audio_t *self, PyObject *unused)
{
return PyLong_FromLong(self->fd);
@@ -782,6 +799,10 @@
/* Aliases for backwards compatibility */
{ "flush", (PyCFunction)oss_sync, METH_VARARGS },
+ /* Support for the context manager protocol */
+ { "__enter__", oss_self, METH_NOARGS },
+ { "__exit__", oss_exit, METH_VARARGS },
+
{ NULL, NULL} /* sentinel */
};
@@ -790,6 +811,10 @@
{ "close", (PyCFunction)oss_mixer_close, METH_NOARGS },
{ "fileno", (PyCFunction)oss_mixer_fileno, METH_NOARGS },
+ /* Support for the context manager protocol */
+ { "__enter__", oss_self, METH_NOARGS },
+ { "__exit__", oss_exit, METH_VARARGS },
+
/* Simple ioctl wrappers */
{ "controls", (PyCFunction)oss_mixer_controls, METH_VARARGS },
{ "stereocontrols", (PyCFunction)oss_mixer_stereocontrols, METH_VARARGS},
More information about the Python-checkins
mailing list