/gst/pygstexception.c
C | 267 lines | 170 code | 63 blank | 34 comment | 46 complexity | 17dc27c45f0a477f7a84f4f6c13c2fd7 MD5 | raw file
Possible License(s): LGPL-2.1
- /*
- * pygstexception.c - gst-python exceptions
- * Copyright (C) 2005 Alessandro Decina
- *
- * Authors:
- * Alessandro Decina <alessandro@nnva.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
- #include <Python.h>
- #include "structmember.h"
- PyObject *PyGstExc_LinkError = NULL;
- PyObject *PyGstExc_AddError = NULL;
- PyObject *PyGstExc_QueryError = NULL;
- PyObject *PyGstExc_RemoveError = NULL;
- PyObject *PyGstExc_PluginNotFoundError = NULL;
- PyObject *PyGstExc_ElementNotFoundError = NULL;
- static PyObject *
- call_exception_init(PyObject *args)
- {
- PyObject *parent_init = NULL;
- PyObject *res = NULL;
- /* get Exception.__init__ */
- parent_init = PyObject_GetAttrString(PyExc_Exception, "__init__");
- if (parent_init == NULL)
- goto exception;
-
- /* call Exception.__init__. This will set self.args */
- res = PyObject_CallObject(parent_init, args);
- if (res == NULL)
- goto exception;
-
- Py_DECREF(parent_init);
-
- return res;
- exception:
- Py_XDECREF(parent_init);
- Py_XDECREF(res);
-
- return NULL;
- }
- static int
- add_method(PyObject *klass, PyObject *dict, PyMethodDef *method) {
- PyObject *module = NULL;
- PyObject *func = NULL;
- PyObject *meth = NULL;
- module = PyString_FromString("gst");
- if (module == NULL)
- goto exception;
-
- func = PyCFunction_NewEx(method, NULL, module);
- if (func == NULL)
- goto exception;
- Py_DECREF(module);
-
- meth = PyMethod_New(func, NULL, klass);
- if (meth == NULL)
- goto exception;
- Py_DECREF(func);
-
- if (PyDict_SetItemString(dict, method->ml_name, meth) < 0)
- goto exception;
- Py_DECREF(meth);
-
- return 0;
-
- exception:
- Py_XDECREF(module);
- Py_XDECREF(func);
- Py_XDECREF(meth);
- return -1;
- }
- static PyObject *
- link_error_init(PyObject *self, PyObject *args)
- {
- PyObject *err_type = NULL;
- int status;
-
- if (!PyArg_ParseTuple(args, "O|O:__init__", &self, &err_type))
- return NULL;
-
- if (err_type == NULL)
- err_type = Py_None;
- Py_INCREF(err_type);
-
- /* set self.error */
- status = PyObject_SetAttrString(self, "error", err_type);
- Py_DECREF(err_type);
- if (status < 0)
- return NULL;
-
- return call_exception_init(args);
- }
- static PyObject *
- element_not_found_error_init(PyObject *self, PyObject *args)
- {
- PyObject *element_name = NULL;
- int status;
- if (!PyArg_ParseTuple(args, "O|O:__init__", &self, &element_name))
- return NULL;
- if (element_name == NULL)
- element_name = Py_None;
- Py_INCREF(element_name);
-
- /* set self.name */
- status = PyObject_SetAttrString(self, "name", element_name);
- Py_DECREF(element_name);
- if (status < 0)
- return NULL;
- return call_exception_init(args);
- }
- static PyMethodDef link_error_init_method = {"__init__",
- link_error_init, METH_VARARGS
- };
- static PyMethodDef element_not_found_error_init_method = {"__init__",
- element_not_found_error_init, METH_VARARGS
- };
- void
- pygst_exceptions_register_classes(PyObject *d)
- {
- PyObject *dict = NULL;
-
- /* register gst.LinkError */
- dict = PyDict_New();
- if (dict == NULL)
- goto exception;
-
- PyGstExc_LinkError = PyErr_NewException("gst.LinkError",
- PyExc_Exception, dict);
- if (PyGstExc_LinkError == NULL)
- goto exception;
-
- if (add_method(PyGstExc_LinkError, dict, &link_error_init_method) < 0)
- goto exception;
-
- Py_DECREF(dict);
-
- if (PyDict_SetItemString(d, "LinkError", PyGstExc_LinkError) < 0)
- goto exception;
-
- Py_DECREF(PyGstExc_LinkError);
-
- /* register gst.AddError */
- PyGstExc_AddError = PyErr_NewException("gst.AddError",
- PyExc_Exception, NULL);
- if (PyGstExc_AddError == NULL)
- goto exception;
-
- if (PyDict_SetItemString(d, "AddError", PyGstExc_AddError) < 0)
- goto exception;
- Py_DECREF(PyGstExc_AddError);
-
- /* register gst.RemoveError */
- PyGstExc_RemoveError = PyErr_NewException("gst.RemoveError",
- PyExc_Exception, NULL);
- if (PyGstExc_RemoveError == NULL)
- goto exception;
-
- if (PyDict_SetItemString(d, "RemoveError", PyGstExc_RemoveError) < 0)
- goto exception;
-
- Py_DECREF(PyGstExc_RemoveError);
- /* register gst.QueryError */
- PyGstExc_QueryError = PyErr_NewException("gst.QueryError",
- PyExc_Exception, NULL);
- if (PyGstExc_QueryError == NULL)
- goto exception;
-
- if (PyDict_SetItemString(d, "QueryError", PyGstExc_QueryError) < 0)
- goto exception;
-
- Py_DECREF(PyGstExc_QueryError);
-
- /* FIXME: remove this method in 0.11; element_factory_make deals with element
- factories, not plug-ins */
-
- /* register gst.PluginNotFoundError */
- dict = PyDict_New();
- if (dict == NULL)
- goto exception;
-
- PyGstExc_PluginNotFoundError = \
- PyErr_NewException("gst.PluginNotFoundError", PyExc_Exception, dict);
- if (PyGstExc_PluginNotFoundError == NULL)
- goto exception;
-
- if (add_method(PyGstExc_PluginNotFoundError,
- dict, &element_not_found_error_init_method) < 0)
- goto exception;
- Py_DECREF(dict);
-
- if (PyDict_SetItemString(d, "PluginNotFoundError",
- PyGstExc_PluginNotFoundError) < 0)
- goto exception;
- Py_DECREF(PyGstExc_PluginNotFoundError);
- /* register gst.ElementNotFoundError */
- dict = PyDict_New();
- if (dict == NULL)
- goto exception;
-
- PyGstExc_ElementNotFoundError = \
- PyErr_NewException("gst.ElementNotFoundError", PyGstExc_PluginNotFoundError, dict);
- if (PyGstExc_ElementNotFoundError == NULL)
- goto exception;
-
- if (add_method(PyGstExc_ElementNotFoundError,
- dict, &element_not_found_error_init_method) < 0)
- goto exception;
- Py_DECREF(dict);
-
- if (PyDict_SetItemString(d, "ElementNotFoundError",
- PyGstExc_ElementNotFoundError) < 0)
- goto exception;
- Py_DECREF(PyGstExc_ElementNotFoundError);
-
- return;
-
- return;
-
- exception:
- Py_XDECREF(dict);
- Py_XDECREF(PyGstExc_LinkError);
- Py_XDECREF(PyGstExc_AddError);
- Py_XDECREF(PyGstExc_RemoveError);
- Py_XDECREF(PyGstExc_QueryError);
- Py_XDECREF(PyGstExc_PluginNotFoundError);
- Py_XDECREF(PyGstExc_ElementNotFoundError);
- return;
- }