Files
bongo/src/libs/python/libbongo/pybongo.c
T

57 lines
1.5 KiB
C

#include "pybongo.h"
#ifdef __cplusplus
extern "C" {
#endif
void
AddLibrary(PyObject *module, char *name, PyMethodDef *classMethods,
EnumItemDef *enumItems)
{
PyMethodDef *def;
EnumItemDef *item;
/* Create the new class object and add it to the module */
PyObject *moduleDict = PyModule_GetDict(module);
PyObject *classDict = PyDict_New();
PyObject *className = PyString_FromString(name);
PyObject *classObj = PyClass_New(NULL, classDict, className);
PyDict_SetItemString(moduleDict, name, classObj);
/* Add the class's methods to its dict */
for (def = classMethods; def->ml_name != NULL; def++) {
PyObject *func = PyCFunction_New(def, NULL);
PyObject *method;
if (def->ml_flags & METH_STATIC) {
method = PyStaticMethod_New(func);
} else {
method = PyMethod_New(func, NULL, classObj);
}
PyDict_SetItemString(classDict, def->ml_name, method);
Py_DECREF(func);
Py_DECREF(method);
}
if (enumItems != NULL) {
for (item = enumItems; item->name != NULL; item++) {
PyObject *value;
if(item->strvalue) {
value = PyString_FromString(item->strvalue);
} else {
value = PyInt_FromLong(item->value);
}
PyDict_SetItemString(classDict, item->name, value);
Py_DECREF(value);
}
}
Py_DECREF(classDict);
Py_DECREF(className);
Py_DECREF(classObj);
}
#ifdef __cplusplus
}
#endif