python: Documenting python3 changes.
[collectd.git] / src / python.c
index 824aa25..5664b0c 100644 (file)
@@ -420,13 +420,14 @@ static int cpy_notification_callback(const notification_t *notification, user_da
 
 static void cpy_log_callback(int severity, const char *message, user_data_t *data) {
        cpy_callback_t * c = data->data;
-       PyObject *ret;
+       PyObject *ret, *text;
 
        CPY_LOCK_THREADS
+       text = cpy_string_to_unicode_or_bytes(message);
        if (c->data == NULL)
-               ret = PyObject_CallFunction(c->callback, "is", severity, message); /* New reference. */
+               ret = PyObject_CallFunction(c->callback, "iN", severity, text); /* New reference. */
        else
-               ret = PyObject_CallFunction(c->callback, "isO", severity, message, c->data); /* New reference. */
+               ret = PyObject_CallFunction(c->callback, "iNO", severity, text, c->data); /* New reference. */
 
        if (ret == NULL) {
                /* FIXME */
@@ -443,13 +444,14 @@ static void cpy_log_callback(int severity, const char *message, user_data_t *dat
 
 static void cpy_flush_callback(int timeout, const char *id, user_data_t *data) {
        cpy_callback_t * c = data->data;
-       PyObject *ret;
+       PyObject *ret, *text;
 
        CPY_LOCK_THREADS
+       text = cpy_string_to_unicode_or_bytes(id);
        if (c->data == NULL)
-               ret = PyObject_CallFunction(c->callback, "is", timeout, id); /* New reference. */
+               ret = PyObject_CallFunction(c->callback, "iN", timeout, text); /* New reference. */
        else
-               ret = PyObject_CallFunction(c->callback, "isO", timeout, id, c->data); /* New reference. */
+               ret = PyObject_CallFunction(c->callback, "iNO", timeout, text, c->data); /* New reference. */
 
        if (ret == NULL) {
                cpy_log_exception("flush callback");
@@ -689,18 +691,18 @@ static PyObject *cpy_unregister_generic_userdata(cpy_unregister_function_t *unre
                PyErr_Clear();
                if (!PyCallable_Check(arg)) {
                        PyErr_SetString(PyExc_TypeError, "This function needs a string or a callable object as its only parameter.");
-                       Py_DECREF(&arg);
+                       Py_DECREF(arg);
                        return NULL;
                }
                cpy_build_name(buf, sizeof(buf), arg, NULL);
                name = buf;
        }
        if (unreg(name) == 0) {
-               Py_DECREF(&arg);
+               Py_DECREF(arg);
                Py_RETURN_NONE;
        }
        PyErr_Format(PyExc_RuntimeError, "Unable to unregister %s callback '%s'.", desc, name);
-       Py_DECREF(&arg);
+       Py_DECREF(arg);
        return NULL;
 }
 
@@ -879,7 +881,8 @@ static PyObject *cpy_oconfig_to_pyconfig(oconfig_item_t *ci, PyObject *parent) {
                }
        }
        
-       item = PyObject_CallFunction((void *) &ConfigType, "sONO", ci->key, parent, values, Py_None);
+       tmp = cpy_string_to_unicode_or_bytes(ci->key);
+       item = PyObject_CallFunction((void *) &ConfigType, "NONO", tmp, parent, values, Py_None);
        if (item == NULL)
                return NULL;
        children = PyTuple_New(ci->children_num); /* New reference. */
@@ -892,10 +895,11 @@ static PyObject *cpy_oconfig_to_pyconfig(oconfig_item_t *ci, PyObject *parent) {
        return item;
 }
 
+#ifdef IS_PY3K
 static struct PyModuleDef collectdmodule = {
        PyModuleDef_HEAD_INIT,
        "collectd",   /* name of module */
-       "Where does this go?", /* module documentation, may be NULL */
+       "The python interface to collectd", /* module documentation, may be NULL */
        -1,
        cpy_methods
 };
@@ -903,6 +907,7 @@ static struct PyModuleDef collectdmodule = {
 PyMODINIT_FUNC PyInit_collectd(void) {
        return PyModule_Create(&collectdmodule);
 }
+#endif
 
 static int cpy_config(oconfig_item_t *ci) {
        int i;