From 8966e621a0809d2109133f180db6a23bb4335843 Mon Sep 17 00:00:00 2001 From: Jiri Moskovcak Date: Tue, 2 Jun 2009 16:54:07 +0200 Subject: Python wrapper for libABRTUtils --- configure.ac | 1 + lib/Makefile.am | 2 +- lib/Python/Makefile.am | 5 + lib/Python/PyABRTUtils.cpp | 247 +++++++++++++++++++++++++++++++++++++++ lib/Python/PyBindingGenerator.py | 27 +++++ lib/Python/PyDebugDump.cpp | 247 +++++++++++++++++++++++++++++++++++++++ 6 files changed, 528 insertions(+), 1 deletion(-) create mode 100644 lib/Python/Makefile.am create mode 100644 lib/Python/PyABRTUtils.cpp create mode 100644 lib/Python/PyBindingGenerator.py create mode 100644 lib/Python/PyDebugDump.cpp diff --git a/configure.ac b/configure.ac index ff7da1be..bb016817 100644 --- a/configure.ac +++ b/configure.ac @@ -55,6 +55,7 @@ AC_CONFIG_FILES([ lib/MiddleWare/Makefile lib/CommLayer/Makefile lib/Plugins/Makefile + lib/Python/Makefile src/Makefile src/Daemon/Makefile src/Hooks/Makefile diff --git a/lib/Makefile.am b/lib/Makefile.am index fede1867..012b8f03 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -1 +1 @@ -SUBDIRS = Utils MiddleWare Plugins CommLayer \ No newline at end of file +SUBDIRS = Utils MiddleWare Plugins CommLayer Python \ No newline at end of file diff --git a/lib/Python/Makefile.am b/lib/Python/Makefile.am new file mode 100644 index 00000000..61cc806e --- /dev/null +++ b/lib/Python/Makefile.am @@ -0,0 +1,5 @@ +pyexec_LTLIBRARIES = ABRTUtils.la +ABRTUtils_la_SOURCES = PyDebugDump.cpp +ABRTUtils_la_LDFLAGS = -module -avoid-version +ABRTUtils_la_LIBADD = -lABRTUtils +ABRTUtils_la_CPPFLAGS = -fPIC -shared -I/usr/include/python2.5 -I../Utils diff --git a/lib/Python/PyABRTUtils.cpp b/lib/Python/PyABRTUtils.cpp new file mode 100644 index 00000000..9ce5a38f --- /dev/null +++ b/lib/Python/PyABRTUtils.cpp @@ -0,0 +1,247 @@ +/* This file was generated by PyBindGen 0.10.0 */ +#define PY_SSIZE_T_CLEAN +#include +#include + + +#if PY_VERSION_HEX < 0x020400F0 + +#define PyEval_ThreadsInitialized() 1 + +#define Py_CLEAR(op) \ + do { \ + if (op) { \ + PyObject *tmp = (PyObject *)(op); \ + (op) = NULL; \ + Py_DECREF(tmp); \ + } \ + } while (0) + + +#define Py_VISIT(op) \ + do { \ + if (op) { \ + int vret = visit((PyObject *)(op), arg); \ + if (vret) \ + return vret; \ + } \ + } while (0) + +#endif + + + +#if PY_VERSION_HEX < 0x020500F0 + +typedef int Py_ssize_t; +# define PY_SSIZE_T_MAX INT_MAX +# define PY_SSIZE_T_MIN INT_MIN +typedef inquiry lenfunc; +typedef intargfunc ssizeargfunc; +typedef intobjargproc ssizeobjargproc; + +#endif + + +#if __GNUC__ > 2 +# define PYBINDGEN_UNUSED(param) param __attribute__((__unused__)) +#elif __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4) +# define PYBINDGEN_UNUSED(param) __attribute__((__unused__)) param +#else +# define PYBINDGEN_UNUSED(param) +#endif /* !__GNUC__ */ + +#include "../Utils/DebugDump.h" +/* --- forward declarations --- */ + + +typedef struct { + PyObject_HEAD + CDebugDump *obj; +} PyCDebugDump; + + +extern PyTypeObject PyCDebugDump_Type; + +static PyMethodDef ABRTUtils_functions[] = { + {NULL, NULL, 0, NULL} +}; +/* --- classes --- */ + + + +static int +_wrap_PyCDebugDump__tp_init(PyCDebugDump *self, PyObject *args, PyObject *kwargs) +{ + const char *keywords[] = {NULL}; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, (char *) "", (char **) keywords)) { + return -1; + } + self->obj = new CDebugDump(); + return 0; +} + + +PyObject * +_wrap_PyCDebugDump_Close(PyCDebugDump *self) +{ + PyObject *py_retval; + + self->obj->Close(); + Py_INCREF(Py_None); + py_retval = Py_None; + return py_retval; +} + + +PyObject * +_wrap_PyCDebugDump_Create(PyCDebugDump *self, PyObject *args, PyObject *kwargs) +{ + PyObject *py_retval; + char *pFilename2; + const char *keywords[] = {"pFilename", NULL}; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, (char *) "s", (char **) keywords, &pFilename2)) { + return NULL; + } + self->obj->Create(pFilename2); + Py_INCREF(Py_None); + py_retval = Py_None; + return py_retval; +} + + +PyObject * +_wrap_PyCDebugDump_SaveText(PyCDebugDump *self, PyObject *args, PyObject *kwargs) +{ + PyObject *py_retval; + char *pName2; + char *pData2; + const char *keywords[] = {"pName", "pData", NULL}; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, (char *) "ss", (char **) keywords, &pName2, &pData2)) { + return NULL; + } + self->obj->SaveText(pName2, pData2); + Py_INCREF(Py_None); + py_retval = Py_None; + return py_retval; +} + +static PyMethodDef PyCDebugDump_methods[] = { + {(char *) "Close", (PyCFunction) _wrap_PyCDebugDump_Close, METH_NOARGS, NULL }, + {(char *) "Create", (PyCFunction) _wrap_PyCDebugDump_Create, METH_KEYWORDS|METH_VARARGS, NULL }, + {(char *) "SaveText", (PyCFunction) _wrap_PyCDebugDump_SaveText, METH_KEYWORDS|METH_VARARGS, NULL }, + {NULL, NULL, 0, NULL} +}; + +static void +_wrap_PyCDebugDump__tp_dealloc(PyCDebugDump *self) +{ + CDebugDump *tmp = self->obj; + self->obj = NULL; + delete tmp; + self->ob_type->tp_free((PyObject*)self); +} + +static PyObject* +_wrap_PyCDebugDump__tp_richcompare (PyCDebugDump *self, PyCDebugDump *other, int opid) +{ + + if (!PyObject_IsInstance((PyObject*) other, (PyObject*) &PyCDebugDump_Type)) { + Py_INCREF(Py_NotImplemented); + return Py_NotImplemented; + } + switch (opid) + { + case Py_LT: + Py_INCREF(Py_NotImplemented); + return Py_NotImplemented; + case Py_LE: + Py_INCREF(Py_NotImplemented); + return Py_NotImplemented; + case Py_EQ: + Py_INCREF(Py_NotImplemented); + return Py_NotImplemented; + case Py_NE: + Py_INCREF(Py_NotImplemented); + return Py_NotImplemented; + case Py_GE: + Py_INCREF(Py_NotImplemented); + return Py_NotImplemented; + case Py_GT: + Py_INCREF(Py_NotImplemented); + return Py_NotImplemented; + } /* closes switch (opid) */ + Py_INCREF(Py_NotImplemented); + return Py_NotImplemented; +} + +PyTypeObject PyCDebugDump_Type = { + PyObject_HEAD_INIT(NULL) + 0, /* ob_size */ + (char *) "ABRTUtils.CDebugDump", /* tp_name */ + sizeof(PyCDebugDump), /* tp_basicsize */ + 0, /* tp_itemsize */ + /* methods */ + (destructor)_wrap_PyCDebugDump__tp_dealloc, /* tp_dealloc */ + (printfunc)0, /* tp_print */ + (getattrfunc)NULL, /* tp_getattr */ + (setattrfunc)NULL, /* tp_setattr */ + (cmpfunc)NULL, /* tp_compare */ + (reprfunc)NULL, /* tp_repr */ + (PyNumberMethods*)NULL, /* tp_as_number */ + (PySequenceMethods*)NULL, /* tp_as_sequence */ + (PyMappingMethods*)NULL, /* tp_as_mapping */ + (hashfunc)NULL, /* tp_hash */ + (ternaryfunc)NULL, /* tp_call */ + (reprfunc)NULL, /* tp_str */ + (getattrofunc)NULL, /* tp_getattro */ + (setattrofunc)NULL, /* tp_setattro */ + (PyBufferProcs*)NULL, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT, /* tp_flags */ + NULL, /* Documentation string */ + (traverseproc)NULL, /* tp_traverse */ + (inquiry)NULL, /* tp_clear */ + (richcmpfunc)_wrap_PyCDebugDump__tp_richcompare, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + (getiterfunc)NULL, /* tp_iter */ + (iternextfunc)NULL, /* tp_iternext */ + (struct PyMethodDef*)PyCDebugDump_methods, /* tp_methods */ + (struct PyMemberDef*)0, /* tp_members */ + 0, /* tp_getset */ + NULL, /* tp_base */ + NULL, /* tp_dict */ + (descrgetfunc)NULL, /* tp_descr_get */ + (descrsetfunc)NULL, /* tp_descr_set */ + 0, /* tp_dictoffset */ + (initproc)_wrap_PyCDebugDump__tp_init, /* tp_init */ + (allocfunc)PyType_GenericAlloc, /* tp_alloc */ + (newfunc)PyType_GenericNew, /* tp_new */ + (freefunc)0, /* tp_free */ + (inquiry)NULL, /* tp_is_gc */ + NULL, /* tp_bases */ + NULL, /* tp_mro */ + NULL, /* tp_cache */ + NULL, /* tp_subclasses */ + NULL, /* tp_weaklist */ + (destructor) NULL /* tp_del */ +}; + + + +PyMODINIT_FUNC +initABRTUtils(void) +{ + PyObject *m; + m = Py_InitModule3((char *) "ABRTUtils", ABRTUtils_functions, NULL); + if (m == NULL) { + return; + } + /* Register the 'CDebugDump' class */ + if (PyType_Ready(&PyCDebugDump_Type)) { + return; + } + PyModule_AddObject(m, (char *) "CDebugDump", (PyObject *) &PyCDebugDump_Type); +} diff --git a/lib/Python/PyBindingGenerator.py b/lib/Python/PyBindingGenerator.py new file mode 100644 index 00000000..a2d62d59 --- /dev/null +++ b/lib/Python/PyBindingGenerator.py @@ -0,0 +1,27 @@ +from pybindgen import * +import sys +""" + void Open(const std::string& pDir); + void Create(const std::string& pDir); + void Delete(); + void Close(); + + bool Exist(const std::string& pFileName); + + void LoadText(const std::string& pName, std::string& pData); + void LoadBinary(const std::string& pName, char** pData, unsigned int* pSize); + + void SaveText(const std::string& pName, const std::string& pData); + void SaveBinary(const std::string& pName, const char* pData, const unsigned int pSize); + + void InitGetNextFile(); + bool GetNextFile(std::string& pFileName, std::string& pContent, bool& pIsTextFile); +""" +mod = Module('ABRTUtils') +mod.add_include('"../Utils/DebugDump.h"') +klass = mod.add_class('CDebugDump') +klass.add_constructor([]) +klass.add_method('Create', None, [param('char*', 'pFilename')]) +klass.add_method('Close', None, []) +klass.add_method('SaveText', None, [param('char*', 'pName'), param('char*', 'pData')]) +mod.generate(sys.stdout) diff --git a/lib/Python/PyDebugDump.cpp b/lib/Python/PyDebugDump.cpp new file mode 100644 index 00000000..9ce5a38f --- /dev/null +++ b/lib/Python/PyDebugDump.cpp @@ -0,0 +1,247 @@ +/* This file was generated by PyBindGen 0.10.0 */ +#define PY_SSIZE_T_CLEAN +#include +#include + + +#if PY_VERSION_HEX < 0x020400F0 + +#define PyEval_ThreadsInitialized() 1 + +#define Py_CLEAR(op) \ + do { \ + if (op) { \ + PyObject *tmp = (PyObject *)(op); \ + (op) = NULL; \ + Py_DECREF(tmp); \ + } \ + } while (0) + + +#define Py_VISIT(op) \ + do { \ + if (op) { \ + int vret = visit((PyObject *)(op), arg); \ + if (vret) \ + return vret; \ + } \ + } while (0) + +#endif + + + +#if PY_VERSION_HEX < 0x020500F0 + +typedef int Py_ssize_t; +# define PY_SSIZE_T_MAX INT_MAX +# define PY_SSIZE_T_MIN INT_MIN +typedef inquiry lenfunc; +typedef intargfunc ssizeargfunc; +typedef intobjargproc ssizeobjargproc; + +#endif + + +#if __GNUC__ > 2 +# define PYBINDGEN_UNUSED(param) param __attribute__((__unused__)) +#elif __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4) +# define PYBINDGEN_UNUSED(param) __attribute__((__unused__)) param +#else +# define PYBINDGEN_UNUSED(param) +#endif /* !__GNUC__ */ + +#include "../Utils/DebugDump.h" +/* --- forward declarations --- */ + + +typedef struct { + PyObject_HEAD + CDebugDump *obj; +} PyCDebugDump; + + +extern PyTypeObject PyCDebugDump_Type; + +static PyMethodDef ABRTUtils_functions[] = { + {NULL, NULL, 0, NULL} +}; +/* --- classes --- */ + + + +static int +_wrap_PyCDebugDump__tp_init(PyCDebugDump *self, PyObject *args, PyObject *kwargs) +{ + const char *keywords[] = {NULL}; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, (char *) "", (char **) keywords)) { + return -1; + } + self->obj = new CDebugDump(); + return 0; +} + + +PyObject * +_wrap_PyCDebugDump_Close(PyCDebugDump *self) +{ + PyObject *py_retval; + + self->obj->Close(); + Py_INCREF(Py_None); + py_retval = Py_None; + return py_retval; +} + + +PyObject * +_wrap_PyCDebugDump_Create(PyCDebugDump *self, PyObject *args, PyObject *kwargs) +{ + PyObject *py_retval; + char *pFilename2; + const char *keywords[] = {"pFilename", NULL}; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, (char *) "s", (char **) keywords, &pFilename2)) { + return NULL; + } + self->obj->Create(pFilename2); + Py_INCREF(Py_None); + py_retval = Py_None; + return py_retval; +} + + +PyObject * +_wrap_PyCDebugDump_SaveText(PyCDebugDump *self, PyObject *args, PyObject *kwargs) +{ + PyObject *py_retval; + char *pName2; + char *pData2; + const char *keywords[] = {"pName", "pData", NULL}; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, (char *) "ss", (char **) keywords, &pName2, &pData2)) { + return NULL; + } + self->obj->SaveText(pName2, pData2); + Py_INCREF(Py_None); + py_retval = Py_None; + return py_retval; +} + +static PyMethodDef PyCDebugDump_methods[] = { + {(char *) "Close", (PyCFunction) _wrap_PyCDebugDump_Close, METH_NOARGS, NULL }, + {(char *) "Create", (PyCFunction) _wrap_PyCDebugDump_Create, METH_KEYWORDS|METH_VARARGS, NULL }, + {(char *) "SaveText", (PyCFunction) _wrap_PyCDebugDump_SaveText, METH_KEYWORDS|METH_VARARGS, NULL }, + {NULL, NULL, 0, NULL} +}; + +static void +_wrap_PyCDebugDump__tp_dealloc(PyCDebugDump *self) +{ + CDebugDump *tmp = self->obj; + self->obj = NULL; + delete tmp; + self->ob_type->tp_free((PyObject*)self); +} + +static PyObject* +_wrap_PyCDebugDump__tp_richcompare (PyCDebugDump *self, PyCDebugDump *other, int opid) +{ + + if (!PyObject_IsInstance((PyObject*) other, (PyObject*) &PyCDebugDump_Type)) { + Py_INCREF(Py_NotImplemented); + return Py_NotImplemented; + } + switch (opid) + { + case Py_LT: + Py_INCREF(Py_NotImplemented); + return Py_NotImplemented; + case Py_LE: + Py_INCREF(Py_NotImplemented); + return Py_NotImplemented; + case Py_EQ: + Py_INCREF(Py_NotImplemented); + return Py_NotImplemented; + case Py_NE: + Py_INCREF(Py_NotImplemented); + return Py_NotImplemented; + case Py_GE: + Py_INCREF(Py_NotImplemented); + return Py_NotImplemented; + case Py_GT: + Py_INCREF(Py_NotImplemented); + return Py_NotImplemented; + } /* closes switch (opid) */ + Py_INCREF(Py_NotImplemented); + return Py_NotImplemented; +} + +PyTypeObject PyCDebugDump_Type = { + PyObject_HEAD_INIT(NULL) + 0, /* ob_size */ + (char *) "ABRTUtils.CDebugDump", /* tp_name */ + sizeof(PyCDebugDump), /* tp_basicsize */ + 0, /* tp_itemsize */ + /* methods */ + (destructor)_wrap_PyCDebugDump__tp_dealloc, /* tp_dealloc */ + (printfunc)0, /* tp_print */ + (getattrfunc)NULL, /* tp_getattr */ + (setattrfunc)NULL, /* tp_setattr */ + (cmpfunc)NULL, /* tp_compare */ + (reprfunc)NULL, /* tp_repr */ + (PyNumberMethods*)NULL, /* tp_as_number */ + (PySequenceMethods*)NULL, /* tp_as_sequence */ + (PyMappingMethods*)NULL, /* tp_as_mapping */ + (hashfunc)NULL, /* tp_hash */ + (ternaryfunc)NULL, /* tp_call */ + (reprfunc)NULL, /* tp_str */ + (getattrofunc)NULL, /* tp_getattro */ + (setattrofunc)NULL, /* tp_setattro */ + (PyBufferProcs*)NULL, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT, /* tp_flags */ + NULL, /* Documentation string */ + (traverseproc)NULL, /* tp_traverse */ + (inquiry)NULL, /* tp_clear */ + (richcmpfunc)_wrap_PyCDebugDump__tp_richcompare, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + (getiterfunc)NULL, /* tp_iter */ + (iternextfunc)NULL, /* tp_iternext */ + (struct PyMethodDef*)PyCDebugDump_methods, /* tp_methods */ + (struct PyMemberDef*)0, /* tp_members */ + 0, /* tp_getset */ + NULL, /* tp_base */ + NULL, /* tp_dict */ + (descrgetfunc)NULL, /* tp_descr_get */ + (descrsetfunc)NULL, /* tp_descr_set */ + 0, /* tp_dictoffset */ + (initproc)_wrap_PyCDebugDump__tp_init, /* tp_init */ + (allocfunc)PyType_GenericAlloc, /* tp_alloc */ + (newfunc)PyType_GenericNew, /* tp_new */ + (freefunc)0, /* tp_free */ + (inquiry)NULL, /* tp_is_gc */ + NULL, /* tp_bases */ + NULL, /* tp_mro */ + NULL, /* tp_cache */ + NULL, /* tp_subclasses */ + NULL, /* tp_weaklist */ + (destructor) NULL /* tp_del */ +}; + + + +PyMODINIT_FUNC +initABRTUtils(void) +{ + PyObject *m; + m = Py_InitModule3((char *) "ABRTUtils", ABRTUtils_functions, NULL); + if (m == NULL) { + return; + } + /* Register the 'CDebugDump' class */ + if (PyType_Ready(&PyCDebugDump_Type)) { + return; + } + PyModule_AddObject(m, (char *) "CDebugDump", (PyObject *) &PyCDebugDump_Type); +} -- cgit