diff options
Diffstat (limited to 'plugin-loaders/python/bindings/plumamessage.override')
-rw-r--r-- | plugin-loaders/python/bindings/plumamessage.override | 556 |
1 files changed, 0 insertions, 556 deletions
diff --git a/plugin-loaders/python/bindings/plumamessage.override b/plugin-loaders/python/bindings/plumamessage.override deleted file mode 100644 index be1090a0..00000000 --- a/plugin-loaders/python/bindings/plumamessage.override +++ /dev/null @@ -1,556 +0,0 @@ -%% -headers - -#include <pluma/pluma-message-bus.h> -#include <pluma/pluma-message.h> - -static GType -_helper_wrap_get_gtype_from_pytype (PyObject *pytype) -{ - PyTypeObject *type = (PyTypeObject *)pytype; - - if (type == &PyList_Type || type == &PyTuple_Type) - return G_TYPE_STRV; - - return pyg_type_from_object (pytype); -} - -static gchar * -_helper_wrap_get_string (PyObject *obj) -{ - PyObject *str; - gchar *result; - - str = PyObject_Str (obj); - - if (!str) - return NULL; - - result = g_strdup (PyString_AsString (str)); - Py_DECREF (str); - - return result; -} - -static int -_helper_wrap_list_to_gvalue (GValue *gvalue, PyObject *pyvalue) -{ - int num; - gchar **lst; - gint i; - - num = PySequence_Size (pyvalue); - lst = g_new0 (gchar *, num + 1); - - for (i = 0; i < num; i++) - { - lst[i] = _helper_wrap_get_string (PySequence_GetItem (pyvalue, i)); - - if (lst[i] == NULL) - { - g_strfreev (lst); - return 1; - } - } - - g_value_set_boxed (gvalue, lst); - g_strfreev (lst); - - return 0; -} - -static int -_helper_wrap_get_gvalue_from_pyobject (GValue *gvalue, PyObject *pyvalue) -{ - if (pyvalue->ob_type == &PyList_Type || pyvalue->ob_type == &PyTuple_Type) - return _helper_wrap_list_to_gvalue (gvalue, pyvalue); - - return pyg_value_from_pyobject(gvalue, pyvalue); -} - -static int -_helper_wrap_message_set_value(PlumaMessage *message, PyObject *pykey, PyObject *pyvalue) -{ - gchar *key; - GType gtype; - GValue value = {0,}; - - key = _helper_wrap_get_string(pykey); - - if (key == NULL) - return 0; - - gtype = pluma_message_get_key_type(message, key); - - if (gtype == 0) { - PyErr_SetString(PyExc_TypeError, "invalid key"); - g_free (key); - return 0; - } - - g_value_init(&value, gtype); - - if (_helper_wrap_get_gvalue_from_pyobject (&value, pyvalue)) { - PyErr_SetString(PyExc_TypeError, - "value is of the wrong type for this key"); - g_free (key); - return 0; - } - - pluma_message_set_value(message, key, &value); - g_value_unset(&value); - g_free (key); - - return 1; -} - -typedef void (*ParsePairFunc)(PyObject *key, PyObject *value, gpointer user_data); - -static void -_helper_parse_pairs_dict (PyObject *dict, ParsePairFunc func, gpointer user_data) -{ - if (!dict) - return; - - PyObject *key, *value; - Py_ssize_t i = 0; - - while (PyDict_Next(dict, &i, &key, &value)) - { - func(key, value, user_data); - } -} - -static void -_helper_parse_pairs(PyObject *args, PyObject *kwargs, ParsePairFunc func, gpointer user_data) -{ - guint len; - guint i; - - len = PyTuple_Size(args); - - for (i = 0; i < len; ++i) - { - PyObject *d = PyTuple_GetItem(args, i); - - if (PyDict_Check(d)) - _helper_parse_pairs_dict(d, func, user_data); - } - - _helper_parse_pairs_dict(kwargs, func, user_data); -} - -static void -_helper_message_set(PyObject *key, PyObject *value, PlumaMessage *message) -{ - _helper_wrap_message_set_value(message, key, value); -} - -static void -_helper_message_set_values(PlumaMessage *message, PyObject *args, PyObject *kwargs) -{ - _helper_parse_pairs(args, kwargs, (ParsePairFunc)_helper_message_set, message); -} - -static PlumaMessage * -_helper_wrap_create_message(PlumaMessageBus *bus, PyObject *args, PyObject *kwargs) -{ - PyObject *pypath, *pymethod, *pydict; - - if (!PyArg_ParseTuple(args, "OO|O:PlumaMessage.create", &pypath, &pymethod, &pydict)) - return NULL; - - gchar *object_path = _helper_wrap_get_string(pypath); - gchar *method = _helper_wrap_get_string(pymethod); - - PlumaMessageType *message_type = pluma_message_bus_lookup (bus, object_path, method); - PlumaMessage *message; - - if (message_type) - { - message = pluma_message_type_instantiate(message_type, NULL); - _helper_message_set_values(message, args, kwargs); - } - else - { - PyErr_SetString(PyExc_StandardError, "Message type does not exist"); - message = NULL; - } - - g_free(object_path); - g_free(method); - - return message; -} - -typedef struct { - PyObject *func; - PyObject *data; -} PyPlumaCustomNotify; - -static void -pypluma_custom_destroy_notify(gpointer user_data) -{ - PyPlumaCustomNotify *cunote = user_data; - PyGILState_STATE state; - - g_return_if_fail(user_data); - state = pyg_gil_state_ensure(); - Py_XDECREF(cunote->func); - Py_XDECREF(cunote->data); - pyg_gil_state_release(state); - - g_free(cunote); -} -%% -ignore-glob - *_get_type - pluma_message_type_foreach - pluma_message_type_instantiate_valist - pluma_message_type_new_valist - pluma_message_get_valist - pluma_message_set_valist - pluma_message_set_valuesv - pluma_message_bus_disconnect_by_func - pluma_message_bus_block_by_func - pluma_message_bus_unblock_by_func -%% -override pluma_message_type_new kwargs - -typedef struct -{ - PlumaMessageType *message_type; - PyObject *optional; -} MessageTypeSetInfo; - -static void -_message_type_set(PyObject *key, PyObject *value, MessageTypeSetInfo *info) -{ - GType gtype; - - gchar *k = _helper_wrap_get_string(key); - - if (!k) - return; - - gtype = _helper_wrap_get_gtype_from_pytype(value); - - gboolean optional = info->optional && PySequence_Contains(info->optional, key); - - pluma_message_type_set(info->message_type, optional, k, gtype, NULL); - g_free(k); -} - -static int -_wrap_pluma_message_type_new(PyGObject *self, PyObject *args, PyObject *kwargs) -{ - PyObject *pypath, *pymethod, *optional = NULL, *pydict; - - if (!PyArg_ParseTuple(args, "OO|OO:PlumaMessageType.new", &pypath, &pymethod, &optional, &pydict)) - return -1; - - PlumaMessageType *message_type = PLUMA_MESSAGE_TYPE(g_object_new(pyg_type_from_object((PyObject *) self), NULL)); - - MessageTypeSetInfo info = {message_type, optional && PySequence_Check(optional) ? optional : NULL}; - _helper_parse_pairs (args, kwargs, (ParsePairFunc)_message_type_set, &info); - - self->obj = (GObject *)message_type; - pygobject_register_wrapper((PyObject *) self); - - return 0; -} -%% -override pluma_message_type_instantiate kwargs -static PyObject * -_wrap_pluma_message_type_instantiate(PyGObject *self, PyObject *args, PyObject *kwargs) -{ - PlumaMessageType *message_type = PLUMA_MESSAGE_TYPE (self->obj); - PlumaMessage *message = pluma_message_type_instantiate(message_type, NULL); - - _helper_message_set_values(message, args, kwargs); - - return pygobject_new((GObject *)message); -} -%% -override pluma_message_get args -static PyObject * -_wrap_pluma_message_get(PyGObject *self, PyObject *args) -{ - guint len, i; - PyObject *ret; - - len = PyTuple_Size(args); - - ret = PyTuple_New(len); - - for (i = 0; i < len; i++) { - GValue value = { 0, }; - PyObject *py_key = PyTuple_GetItem(args, i); - gchar *key = _helper_wrap_get_string(py_key); - - if (!key) { - PyErr_SetString(PyExc_TypeError, "keys must be strings"); - Py_DECREF(ret); - return NULL; - } - - pluma_message_get_value (PLUMA_MESSAGE (self->obj), key, &value); - g_free (key); - - PyTuple_SetItem(ret, i, pyg_value_as_pyobject(&value, TRUE)); - g_value_unset(&value); - } - - return ret; -} -%% -override pluma_message_get_value kwargs -static PyObject * -_wrap_pluma_message_get_value(PyGObject *self, PyObject *args, PyObject *kwargs) -{ - static char *kwlist[] = { "key", NULL }; - const gchar *key; - PyObject *ret; - GValue value = { 0, }; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s:PlumaMessage.get_value", kwlist, &key)) - return NULL; - - pluma_message_get_value(PLUMA_MESSAGE(self->obj), key, &value); - ret = pyg_value_as_pyobject(&value, TRUE); - g_value_unset(&value); - - return ret; -} -%% -override pluma_message_set_value kwargs -static PyObject * -_wrap_pluma_message_set_value(PyGObject *self, PyObject *args, PyObject *kwargs) -{ - static char *kwlist[] = { "key", "value", NULL }; - PyObject *pykey, *pyvalue; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "OO:PlumaMessage.set_value", kwlist, &pykey, &pyvalue)) - return NULL; - - if (!_helper_wrap_message_set_value(PLUMA_MESSAGE(self->obj), pykey, pyvalue)) - return NULL; - - Py_INCREF(Py_None); - return Py_None; -} -%% -override pluma_message_set kwargs -static PyObject * -_wrap_pluma_message_set (PyGObject *self, PyObject *args, PyObject *kwargs) { - _helper_message_set_values(PLUMA_MESSAGE(self->obj), args, kwargs); - - Py_INCREF(Py_None); - return Py_None; -} -%% -override pluma_message_bus_new -static int -_wrap_pluma_message_bus_new(PyGObject *self) -{ - pygobject_construct (self, NULL); - - if (!self->obj) { - PyErr_SetString (PyExc_RuntimeError, "could not create pluma.MessageBus object"); - return -1; - } - - return 0; -} -%% -new-constructor PLUMA_TYPE_MESSAGE_BUS -%% -override pluma_message_bus_register kwargs -static PyObject * -_wrap_pluma_message_bus_register(PyGObject *self, PyObject *args, PyObject *kwargs) -{ - PyObject *pypath, *pymethod, *optional = NULL, *pydict; - PlumaMessageBus *bus = PLUMA_MESSAGE_BUS(self->obj); - - if (!PyArg_ParseTuple(args, "OO|OO:PlumaMessageBus.register", &pypath, &pymethod, &optional, &pydict)) - return NULL; - - gchar *object_path = _helper_wrap_get_string(pypath); - gchar *method = _helper_wrap_get_string(pymethod); - - PlumaMessageType *message_type = pluma_message_bus_register(bus, object_path, method, 0, NULL); - - g_free(object_path); - g_free(method); - - if (!message_type) - { - PyErr_SetString(PyExc_StandardError, "Message type already exists"); - return NULL; - } - - MessageTypeSetInfo info = {message_type, optional && PySequence_Check(optional) ? optional : NULL}; - _helper_parse_pairs (args, kwargs, (ParsePairFunc)_message_type_set, &info); - - return pyg_boxed_new(PLUMA_TYPE_MESSAGE_TYPE, message_type, TRUE, TRUE); -} -%% -override pluma_message_bus_connect kwargs -static void -pypluma_message_bus_connect_cb(PlumaMessageBus *bus, PlumaMessage *message, gpointer data) -{ - PyGILState_STATE state; - PyPlumaCustomNotify *cunote = data; - PyObject *pybus, *pymessage, *retobj; - - g_assert(cunote->func); - - state = pyg_gil_state_ensure(); - - pybus = pygobject_new((GObject *)bus); - pymessage = pygobject_new((GObject *)message); - - if (cunote->data) { - retobj = PyEval_CallFunction(cunote->func, "(NNO)", pybus, pymessage, cunote->data); - } else { - retobj = PyEval_CallFunction(cunote->func, "(NN)", pybus, pymessage); - } - - if (PyErr_Occurred()) { - PyErr_Print(); - } - - Py_XDECREF(retobj); - - pyg_gil_state_release(state); -} - -static PyObject * -_wrap_pluma_message_bus_connect(PyGObject *self, PyObject *args, PyObject *kwargs) -{ - static char *kwlist[] = { "domain", "name", "func", "data", NULL }; - PyObject *pyfunc, *pyarg = NULL; - const gchar *domain; - const gchar *name; - PyPlumaCustomNotify *cunote; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, - "ssO|O:PlumaMessageBus.connect", - kwlist, &domain, &name, &pyfunc, &pyarg)) - return NULL; - - if (!PyCallable_Check(pyfunc)) { - PyErr_SetString(PyExc_TypeError, "func must be a callable object"); - return NULL; - } - cunote = g_new(PyPlumaCustomNotify, 1); - Py_INCREF(pyfunc); - cunote->func = pyfunc; - Py_XINCREF(pyarg); - cunote->data = pyarg; - - guint id = pluma_message_bus_connect(PLUMA_MESSAGE_BUS(self->obj), - domain, - name, - pypluma_message_bus_connect_cb, - (gpointer)cunote, - pypluma_custom_destroy_notify); - return PyLong_FromUnsignedLong(id); -} -%% -override pluma_message_bus_send kwargs -static PyObject * -_wrap_pluma_message_bus_send(PyGObject *self, PyObject *args, PyObject *kwargs) -{ - /* create a new message object */ - PlumaMessage *message; - PlumaMessageBus *bus = PLUMA_MESSAGE_BUS(self->obj); - message = _helper_wrap_create_message(bus, args, kwargs); - - if (!message) - return NULL; - - pluma_message_bus_send_message(bus, message); - g_object_unref (message); - - Py_INCREF(Py_None); - return Py_None; -} -%% -override pluma_message_bus_send_sync kwargs -static PyObject * -_wrap_pluma_message_bus_send_sync(PyGObject *self, PyObject *args, PyObject *kwargs) -{ - /* create a new message object */ - PlumaMessage *message; - PlumaMessageBus *bus = PLUMA_MESSAGE_BUS(self->obj); - - message = _helper_wrap_create_message(bus, args, kwargs); - - if (!message) - return NULL; - - pluma_message_bus_send_message_sync(bus, message); - return pygobject_new((GObject *)message); -} -%% -override-slot PlumaMessage.tp_getattro -static PyObject * -_wrap_pluma_message_tp_getattro(PyObject *self, PyObject *attrname) -{ - PlumaMessage *message = PLUMA_MESSAGE(((PyGObject *)self)->obj); - PlumaMessageType *type; - - gchar *name = _helper_wrap_get_string (attrname); - gboolean exists; - gboolean intype; - PyObject *ret; - - if (name == NULL) - { - PyErr_SetString(PyExc_TypeError, "attr name somehow not a string"); - return NULL; - } - - g_object_get (message, "type", &type, NULL); - intype = pluma_message_type_lookup (type, name) != G_TYPE_INVALID; - pluma_message_type_unref (type); - - exists = pluma_message_has_key (message, name); - - if (!intype) - { - ret = PyObject_GenericGetAttr(self, attrname); - } - else if (exists) - { - GValue value = { 0, }; - pluma_message_get_value (message, name, &value); - ret = pyg_value_as_pyobject(&value, TRUE); - g_value_unset (&value); - } - else - { - Py_INCREF(Py_None); - ret = Py_None; - } - - g_free (name); - return ret; -} -%% -override-slot PlumaMessage.tp_setattro -static int -_wrap_pluma_message_tp_setattro(PyObject *self, PyObject *attrname, PyObject *value) -{ - PlumaMessage *message = PLUMA_MESSAGE(((PyGObject *)self)->obj); - - if (!_helper_wrap_message_set_value(message, attrname, value)) - { - return PyObject_GenericSetAttr(self, attrname, value); - } - else - { - return 1; - } -} |