Blame 0011-add-python-bindings-for-interactive-plugins.patch

Jiri Moskovcak 373fc9d
From 02e0e56b5903f5f0e905f20be8413914ab6aa529 Mon Sep 17 00:00:00 2001
Jiri Moskovcak 373fc9d
From: Michal Toman <mtoman@redhat.com>
Jiri Moskovcak 373fc9d
Date: Thu, 21 Jul 2011 14:25:32 +0200
Jiri Moskovcak 373fc9d
Subject: [PATCH 11/12] add python bindings for interactive plugins
Jiri Moskovcak 373fc9d
Jiri Moskovcak 373fc9d
---
Jiri Moskovcak 373fc9d
 configure.ac                     |    1 +
Jiri Moskovcak 373fc9d
 src/Makefile.am                  |    2 +-
Jiri Moskovcak 373fc9d
 src/client-python/Makefile.am    |   29 +++++++++++++
Jiri Moskovcak 373fc9d
 src/client-python/__init__.py    |   15 +++++++
Jiri Moskovcak 373fc9d
 src/client-python/client.c       |   83 ++++++++++++++++++++++++++++++++++++++
Jiri Moskovcak 373fc9d
 src/client-python/clientmodule.c |   42 +++++++++++++++++++
Jiri Moskovcak 373fc9d
 src/client-python/common.h       |   27 ++++++++++++
Jiri Moskovcak 373fc9d
 8 files changed, 199 insertions(+), 1 deletions(-)
Jiri Moskovcak 373fc9d
 create mode 100644 src/client-python/Makefile.am
Jiri Moskovcak 373fc9d
 create mode 100644 src/client-python/__init__.py
Jiri Moskovcak 373fc9d
 create mode 100644 src/client-python/client.c
Jiri Moskovcak 373fc9d
 create mode 100644 src/client-python/clientmodule.c
Jiri Moskovcak 373fc9d
 create mode 100644 src/client-python/common.h
Jiri Moskovcak 373fc9d
Jiri Moskovcak 373fc9d
diff --git a/configure.ac b/configure.ac
Jiri Moskovcak 373fc9d
index 61f16ae..4b01af6 100644
Jiri Moskovcak 373fc9d
--- a/configure.ac
Jiri Moskovcak 373fc9d
+++ b/configure.ac
Jiri Moskovcak 373fc9d
@@ -126,6 +126,7 @@ AC_CONFIG_FILES([
Jiri Moskovcak 373fc9d
 	src/cli/Makefile
Jiri Moskovcak 373fc9d
 	src/report-newt/Makefile
Jiri Moskovcak 373fc9d
 	src/plugins/Makefile
Jiri Moskovcak 373fc9d
+	src/client-python/Makefile
Jiri Moskovcak 373fc9d
 	po/Makefile.in
Jiri Moskovcak 373fc9d
 ])
Jiri Moskovcak 373fc9d
 
Jiri Moskovcak 373fc9d
diff --git a/src/Makefile.am b/src/Makefile.am
Jiri Moskovcak 373fc9d
index 24dfeb2..3a6da3f 100644
Jiri Moskovcak 373fc9d
--- a/src/Makefile.am
Jiri Moskovcak 373fc9d
+++ b/src/Makefile.am
Jiri Moskovcak 373fc9d
@@ -1 +1 @@
Jiri Moskovcak 373fc9d
-SUBDIRS = include lib plugins report-python gtk-helpers gui-wizard-gtk cli report-newt
Jiri Moskovcak 373fc9d
+SUBDIRS = include lib plugins report-python gtk-helpers gui-wizard-gtk cli report-newt client-python
Jiri Moskovcak 373fc9d
diff --git a/src/client-python/Makefile.am b/src/client-python/Makefile.am
Jiri Moskovcak 373fc9d
new file mode 100644
Jiri Moskovcak 373fc9d
index 0000000..5a2a58f
Jiri Moskovcak 373fc9d
--- /dev/null
Jiri Moskovcak 373fc9d
+++ b/src/client-python/Makefile.am
Jiri Moskovcak 373fc9d
@@ -0,0 +1,29 @@
Jiri Moskovcak 373fc9d
+clientexecdir = $(pyexecdir)/reportclient
Jiri Moskovcak 373fc9d
+
Jiri Moskovcak 373fc9d
+clientexec_PYTHON = \
Jiri Moskovcak 373fc9d
+    __init__.py
Jiri Moskovcak 373fc9d
+
Jiri Moskovcak 373fc9d
+clientexec_LTLIBRARIES = _reportclient.la
Jiri Moskovcak 373fc9d
+
Jiri Moskovcak 373fc9d
+_reportclient_la_SOURCES = \
Jiri Moskovcak 373fc9d
+    clientmodule.c \
Jiri Moskovcak 373fc9d
+    client.c \
Jiri Moskovcak 373fc9d
+    common.h
Jiri Moskovcak 373fc9d
+_reportclient_la_CPPFLAGS = \
Jiri Moskovcak 373fc9d
+    -I$(srcdir)/../include/report -I$(srcdir)/../include \
Jiri Moskovcak 373fc9d
+    -DDEBUG_DUMPS_DIR=\"$(DEBUG_DUMPS_DIR)\" \
Jiri Moskovcak 373fc9d
+    -DPLUGINS_LIB_DIR=\"$(PLUGINS_LIB_DIR)\" \
Jiri Moskovcak 373fc9d
+    -DPLUGINS_CONF_DIR=\"$(PLUGINS_CONF_DIR)\" \
Jiri Moskovcak 373fc9d
+    -DLOCALSTATEDIR='"$(localstatedir)"' \
Jiri Moskovcak 373fc9d
+    -DCONF_DIR=\"$(CONF_DIR)\" \
Jiri Moskovcak 373fc9d
+    -DVAR_RUN=\"$(VAR_RUN)\" \
Jiri Moskovcak 373fc9d
+    $(GLIB_CFLAGS) \
Jiri Moskovcak 373fc9d
+    $(PYTHON_CFLAGS) \
Jiri Moskovcak 373fc9d
+    -D_GNU_SOURCE \
Jiri Moskovcak 373fc9d
+    -Wall -Wwrite-strings -Werror
Jiri Moskovcak 373fc9d
+_reportclient_la_LDFLAGS = \
Jiri Moskovcak 373fc9d
+    -module \
Jiri Moskovcak 373fc9d
+    -avoid-version \
Jiri Moskovcak 373fc9d
+    -export-symbols-regex init_reportclient
Jiri Moskovcak 373fc9d
+_reportclient_la_LIBADD = \
Jiri Moskovcak 373fc9d
+    ../lib/libreport.la
Jiri Moskovcak 373fc9d
diff --git a/src/client-python/__init__.py b/src/client-python/__init__.py
Jiri Moskovcak 373fc9d
new file mode 100644
Jiri Moskovcak 373fc9d
index 0000000..6114b5a
Jiri Moskovcak 373fc9d
--- /dev/null
Jiri Moskovcak 373fc9d
+++ b/src/client-python/__init__.py
Jiri Moskovcak 373fc9d
@@ -0,0 +1,15 @@
Jiri Moskovcak 373fc9d
+# This program is free software; you can redistribute it and/or modify
Jiri Moskovcak 373fc9d
+# it under the terms of the GNU General Public License as published by
Jiri Moskovcak 373fc9d
+# the Free Software Foundation; either version 2 of the License, or
Jiri Moskovcak 373fc9d
+# (at your option) any later version.
Jiri Moskovcak 373fc9d
+#
Jiri Moskovcak 373fc9d
+# This program is distributed in the hope that it will be useful,
Jiri Moskovcak 373fc9d
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
Jiri Moskovcak 373fc9d
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Jiri Moskovcak 373fc9d
+# GNU General Public License for more details.
Jiri Moskovcak 373fc9d
+#
Jiri Moskovcak 373fc9d
+# You should have received a copy of the GNU General Public License
Jiri Moskovcak 373fc9d
+# along with this program; if not, write to the Free Software
Jiri Moskovcak 373fc9d
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Jiri Moskovcak 373fc9d
+
Jiri Moskovcak 373fc9d
+from _reportclient import *
Jiri Moskovcak 373fc9d
diff --git a/src/client-python/client.c b/src/client-python/client.c
Jiri Moskovcak 373fc9d
new file mode 100644
Jiri Moskovcak 373fc9d
index 0000000..7177ae3
Jiri Moskovcak 373fc9d
--- /dev/null
Jiri Moskovcak 373fc9d
+++ b/src/client-python/client.c
Jiri Moskovcak 373fc9d
@@ -0,0 +1,83 @@
Jiri Moskovcak 373fc9d
+/*
Jiri Moskovcak 373fc9d
+    Copyright (C) 2010  Abrt team.
Jiri Moskovcak 373fc9d
+    Copyright (C) 2010  RedHat inc.
Jiri Moskovcak 373fc9d
+
Jiri Moskovcak 373fc9d
+    This program is free software; you can redistribute it and/or modify
Jiri Moskovcak 373fc9d
+    it under the terms of the GNU General Public License as published by
Jiri Moskovcak 373fc9d
+    the Free Software Foundation; either version 2 of the License, or
Jiri Moskovcak 373fc9d
+    (at your option) any later version.
Jiri Moskovcak 373fc9d
+
Jiri Moskovcak 373fc9d
+    This program is distributed in the hope that it will be useful,
Jiri Moskovcak 373fc9d
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
Jiri Moskovcak 373fc9d
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Jiri Moskovcak 373fc9d
+    GNU General Public License for more details.
Jiri Moskovcak 373fc9d
+
Jiri Moskovcak 373fc9d
+    You should have received a copy of the GNU General Public License along
Jiri Moskovcak 373fc9d
+    with this program; if not, write to the Free Software Foundation, Inc.,
Jiri Moskovcak 373fc9d
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Jiri Moskovcak 373fc9d
+*/
Jiri Moskovcak 373fc9d
+#include <Python.h>
Jiri Moskovcak 373fc9d
+
Jiri Moskovcak 373fc9d
+#include "common.h"
Jiri Moskovcak 373fc9d
+
Jiri Moskovcak 373fc9d
+/* C: void alert(const char *message); */
Jiri Moskovcak 373fc9d
+PyObject *p_alert(PyObject *pself, PyObject *args)
Jiri Moskovcak 373fc9d
+{
Jiri Moskovcak 373fc9d
+    const char *message;
Jiri Moskovcak 373fc9d
+    if (!PyArg_ParseTuple(args, "s", &message))
Jiri Moskovcak 373fc9d
+    {
Jiri Moskovcak 373fc9d
+        return NULL;
Jiri Moskovcak 373fc9d
+    }
Jiri Moskovcak 373fc9d
+    alert(message);
Jiri Moskovcak 373fc9d
+    Py_RETURN_NONE;
Jiri Moskovcak 373fc9d
+}
Jiri Moskovcak 373fc9d
+
Jiri Moskovcak 373fc9d
+/* C: char *ask(const char *question, char *response, int response_len); */
Jiri Moskovcak 373fc9d
+PyObject *p_ask(PyObject *pself, PyObject *args)
Jiri Moskovcak 373fc9d
+{
Jiri Moskovcak 373fc9d
+    const char *question;
Jiri Moskovcak 373fc9d
+    if (!PyArg_ParseTuple(args, "s", &question))
Jiri Moskovcak 373fc9d
+    {
Jiri Moskovcak 373fc9d
+        return NULL;
Jiri Moskovcak 373fc9d
+    }
Jiri Moskovcak 373fc9d
+
Jiri Moskovcak 373fc9d
+    char response[256];
Jiri Moskovcak 373fc9d
+    if (!ask(question, response, sizeof(response)))
Jiri Moskovcak 373fc9d
+    {
Jiri Moskovcak 373fc9d
+        Py_RETURN_NONE;
Jiri Moskovcak 373fc9d
+    }
Jiri Moskovcak 373fc9d
+
Jiri Moskovcak 373fc9d
+    return Py_BuildValue("s", response);
Jiri Moskovcak 373fc9d
+}
Jiri Moskovcak 373fc9d
+
Jiri Moskovcak 373fc9d
+/* C: char *ask_password(const char *question, char *response, int response_len); */
Jiri Moskovcak 373fc9d
+PyObject *p_ask_password(PyObject *pself, PyObject *args)
Jiri Moskovcak 373fc9d
+{
Jiri Moskovcak 373fc9d
+    const char *question;
Jiri Moskovcak 373fc9d
+    if (!PyArg_ParseTuple(args, "s", &question))
Jiri Moskovcak 373fc9d
+    {
Jiri Moskovcak 373fc9d
+        return NULL;
Jiri Moskovcak 373fc9d
+    }
Jiri Moskovcak 373fc9d
+
Jiri Moskovcak 373fc9d
+    char response[256];
Jiri Moskovcak 373fc9d
+    if (!ask_password(question, response, sizeof(response)))
Jiri Moskovcak 373fc9d
+    {
Jiri Moskovcak 373fc9d
+        Py_RETURN_NONE;
Jiri Moskovcak 373fc9d
+    }
Jiri Moskovcak 373fc9d
+
Jiri Moskovcak 373fc9d
+    return Py_BuildValue("s", response);
Jiri Moskovcak 373fc9d
+}
Jiri Moskovcak 373fc9d
+
Jiri Moskovcak 373fc9d
+/* C: int ask_yes_no(const char *question); */
Jiri Moskovcak 373fc9d
+PyObject *p_ask_yes_no(PyObject *pself, PyObject *args)
Jiri Moskovcak 373fc9d
+{
Jiri Moskovcak 373fc9d
+    const char *question;
Jiri Moskovcak 373fc9d
+    if (!PyArg_ParseTuple(args, "s", &question))
Jiri Moskovcak 373fc9d
+    {
Jiri Moskovcak 373fc9d
+        return NULL;
Jiri Moskovcak 373fc9d
+    }
Jiri Moskovcak 373fc9d
+
Jiri Moskovcak 373fc9d
+    int response = ask_yes_no(question);
Jiri Moskovcak 373fc9d
+
Jiri Moskovcak 373fc9d
+    return Py_BuildValue("i", response);
Jiri Moskovcak 373fc9d
+}
Jiri Moskovcak 373fc9d
diff --git a/src/client-python/clientmodule.c b/src/client-python/clientmodule.c
Jiri Moskovcak 373fc9d
new file mode 100644
Jiri Moskovcak 373fc9d
index 0000000..e4584dd
Jiri Moskovcak 373fc9d
--- /dev/null
Jiri Moskovcak 373fc9d
+++ b/src/client-python/clientmodule.c
Jiri Moskovcak 373fc9d
@@ -0,0 +1,42 @@
Jiri Moskovcak 373fc9d
+/*
Jiri Moskovcak 373fc9d
+    Copyright (C) 2010  Abrt team.
Jiri Moskovcak 373fc9d
+    Copyright (C) 2010  RedHat inc.
Jiri Moskovcak 373fc9d
+
Jiri Moskovcak 373fc9d
+    This program is free software; you can redistribute it and/or modify
Jiri Moskovcak 373fc9d
+    it under the terms of the GNU General Public License as published by
Jiri Moskovcak 373fc9d
+    the Free Software Foundation; either version 2 of the License, or
Jiri Moskovcak 373fc9d
+    (at your option) any later version.
Jiri Moskovcak 373fc9d
+
Jiri Moskovcak 373fc9d
+    This program is distributed in the hope that it will be useful,
Jiri Moskovcak 373fc9d
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
Jiri Moskovcak 373fc9d
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Jiri Moskovcak 373fc9d
+    GNU General Public License for more details.
Jiri Moskovcak 373fc9d
+
Jiri Moskovcak 373fc9d
+    You should have received a copy of the GNU General Public License along
Jiri Moskovcak 373fc9d
+    with this program; if not, write to the Free Software Foundation, Inc.,
Jiri Moskovcak 373fc9d
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Jiri Moskovcak 373fc9d
+*/
Jiri Moskovcak 373fc9d
+#include <Python.h>
Jiri Moskovcak 373fc9d
+
Jiri Moskovcak 373fc9d
+#include "common.h"
Jiri Moskovcak 373fc9d
+
Jiri Moskovcak 373fc9d
+static PyMethodDef module_methods[] = {
Jiri Moskovcak 373fc9d
+    /* method_name, func, flags, doc_string */
Jiri Moskovcak 373fc9d
+    /* for include/client.h */
Jiri Moskovcak 373fc9d
+    { "alert"                     , p_alert                   , METH_VARARGS },
Jiri Moskovcak 373fc9d
+    { "ask"                       , p_ask                     , METH_VARARGS },
Jiri Moskovcak 373fc9d
+    { "ask_password"              , p_ask_password            , METH_VARARGS },
Jiri Moskovcak 373fc9d
+    { "ask_yes_no"                , p_ask_yes_no              , METH_VARARGS },
Jiri Moskovcak 373fc9d
+    { NULL }
Jiri Moskovcak 373fc9d
+};
Jiri Moskovcak 373fc9d
+
Jiri Moskovcak 373fc9d
+#ifndef PyMODINIT_FUNC /* declarations for DLL import/export */
Jiri Moskovcak 373fc9d
+#define PyMODINIT_FUNC void
Jiri Moskovcak 373fc9d
+#endif
Jiri Moskovcak 373fc9d
+PyMODINIT_FUNC
Jiri Moskovcak 373fc9d
+init_reportclient(void)
Jiri Moskovcak 373fc9d
+{
Jiri Moskovcak 373fc9d
+    PyObject *m = Py_InitModule("_reportclient", module_methods);
Jiri Moskovcak 373fc9d
+    if (!m)
Jiri Moskovcak 373fc9d
+        printf("m == NULL\n");
Jiri Moskovcak 373fc9d
+}
Jiri Moskovcak 373fc9d
diff --git a/src/client-python/common.h b/src/client-python/common.h
Jiri Moskovcak 373fc9d
new file mode 100644
Jiri Moskovcak 373fc9d
index 0000000..02f685f
Jiri Moskovcak 373fc9d
--- /dev/null
Jiri Moskovcak 373fc9d
+++ b/src/client-python/common.h
Jiri Moskovcak 373fc9d
@@ -0,0 +1,27 @@
Jiri Moskovcak 373fc9d
+/*
Jiri Moskovcak 373fc9d
+    Copyright (C) 2009  Abrt team.
Jiri Moskovcak 373fc9d
+    Copyright (C) 2009  RedHat inc.
Jiri Moskovcak 373fc9d
+
Jiri Moskovcak 373fc9d
+    This program is free software; you can redistribute it and/or modify
Jiri Moskovcak 373fc9d
+    it under the terms of the GNU General Public License as published by
Jiri Moskovcak 373fc9d
+    the Free Software Foundation; either version 2 of the License, or
Jiri Moskovcak 373fc9d
+    (at your option) any later version.
Jiri Moskovcak 373fc9d
+
Jiri Moskovcak 373fc9d
+    This program is distributed in the hope that it will be useful,
Jiri Moskovcak 373fc9d
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
Jiri Moskovcak 373fc9d
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Jiri Moskovcak 373fc9d
+    GNU General Public License for more details.
Jiri Moskovcak 373fc9d
+
Jiri Moskovcak 373fc9d
+    You should have received a copy of the GNU General Public License along
Jiri Moskovcak 373fc9d
+    with this program; if not, write to the Free Software Foundation, Inc.,
Jiri Moskovcak 373fc9d
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Jiri Moskovcak 373fc9d
+*/
Jiri Moskovcak 373fc9d
+#include <Python.h>
Jiri Moskovcak 373fc9d
+
Jiri Moskovcak 373fc9d
+#include "client.h"
Jiri Moskovcak 373fc9d
+/* module-level functions */
Jiri Moskovcak 373fc9d
+/* for include/client.h */
Jiri Moskovcak 373fc9d
+PyObject *p_alert(PyObject *pself, PyObject *args);
Jiri Moskovcak 373fc9d
+PyObject *p_ask(PyObject *pself, PyObject *args);
Jiri Moskovcak 373fc9d
+PyObject *p_ask_password(PyObject *pself, PyObject *args);
Jiri Moskovcak 373fc9d
+PyObject *p_ask_yes_no(PyObject *pself, PyObject *args);
Jiri Moskovcak 373fc9d
-- 
Jiri Moskovcak 373fc9d
1.7.6
Jiri Moskovcak 373fc9d