#6518: enable context manager protocol for ossaudiodev types.

This commit is contained in:
Georg Brandl 2010-10-23 17:31:52 +00:00
parent 1cae8b58eb
commit 1e908af335
4 changed files with 42 additions and 4 deletions

View file

@ -469,6 +469,23 @@ oss_close(oss_audio_t *self, PyObject *unused)
return Py_None;
}
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)
{
@ -782,6 +799,10 @@ static PyMethodDef oss_methods[] = {
/* 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 @@ static PyMethodDef oss_mixer_methods[] = {
{ "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},