Python-API: Python 2 support.

Change-Id: I6bc656caf22e284233e27f9e003f11502f306c11
Signed-off-by: Ole Troan <ot@cisco.com>
This commit is contained in:
Ole Troan
2016-04-25 13:11:19 +02:00
parent fc6cf287c4
commit d06b9f9cbf
2 changed files with 43 additions and 11 deletions

View File

@ -202,7 +202,7 @@ def api_table_print (name, msg_id):
# Generate the main Python file
#
print '''#!/usr/bin/env python3
print '''
#
# AUTO-GENERATED FILE. PLEASE DO NOT EDIT.

View File

@ -12,7 +12,11 @@ wrap_pneum_callback (char *data, int len)
gstate = PyGILState_Ensure();
/* Time to call the callback */
#if PY_VERSION_HEX >= 0x03000000
result = PyObject_CallFunction(pneum_callback, "y#", data, len);
#else
result = PyObject_CallFunction(pneum_callback, "s#", data, len);
#endif
if (result)
Py_DECREF(result);
else
@ -84,8 +88,11 @@ wrap_read (PyObject *self, PyObject *args)
Py_END_ALLOW_THREADS
if (rv != 0) { Py_RETURN_NONE; }
#if PY_VERSION_HEX >= 0x03000000
PyObject *ret = Py_BuildValue("y#", data, len);
#else
PyObject *ret = Py_BuildValue("s#", data, len);
#endif
if (!ret) { Py_RETURN_NONE; }
vl_msg_api_free(data);
@ -100,21 +107,46 @@ static PyMethodDef vpp_api_Methods[] = {
{NULL, NULL, 0, NULL} /* Sentinel */
};
static struct PyModuleDef vpp_api_module = {
PyModuleDef_HEAD_INIT,
"vpp_api", /* name of module */
NULL, /* module documentation, may be NULL */
-1, /* size of per-interpreter state of the module,
or -1 if the module keeps state in global variables. */
vpp_api_Methods
};
#if PY_VERSION_HEX >= 0x03000000
PyMODINIT_FUNC
PyInit_vpp_api (void)
#else
void
initvpp_api (void)
#endif
{
#if PY_VERSION_HEX >= 0x03000000
static struct PyModuleDef vpp_api_module = {
# if PY_VERSION_HEX >= 0x03020000
PyModuleDef_HEAD_INIT,
# else
{
PyObject_HEAD_INIT(NULL)
NULL, /* m_init */
0, /* m_index */
NULL, /* m_copy */
},
# endif
(char *) "vpp_api",
NULL,
-1,
vpp_api_Methods,
NULL,
NULL,
NULL,
NULL
};
#endif
/* Ensure threading is initialised */
if (!PyEval_ThreadsInitialized()) {
PyEval_InitThreads();
}
#if PY_VERSION_HEX >= 0x03000000
return PyModule_Create(&vpp_api_module);
#else
Py_InitModule((char *) "vpp_api", vpp_api_Methods);
return;
#endif
}