aboutsummaryrefslogtreecommitdiffstats
path: root/modules/plugin-python
diff options
context:
space:
mode:
Diffstat (limited to 'modules/plugin-python')
-rw-r--r--modules/plugin-python/Makefile.am32
-rw-r--r--modules/plugin-python/e-plugin-python.c238
-rw-r--r--modules/plugin-python/e-plugin-python.h70
-rw-r--r--modules/plugin-python/evolution-module-plugin-python.c43
-rw-r--r--modules/plugin-python/example/Makefile.am30
-rw-r--r--modules/plugin-python/example/hello_python.py5
-rw-r--r--modules/plugin-python/example/org-gnome-hello-python-ui.xml16
-rw-r--r--modules/plugin-python/example/org-gnome-hello-python.eplug.xml20
8 files changed, 0 insertions, 454 deletions
diff --git a/modules/plugin-python/Makefile.am b/modules/plugin-python/Makefile.am
deleted file mode 100644
index aaeca9abc5..0000000000
--- a/modules/plugin-python/Makefile.am
+++ /dev/null
@@ -1,32 +0,0 @@
-module_LTLIBRARIES = module-plugin-python.la
-
-module_plugin_python_la_CPPFLAGS = \
- $(AM_CPPFLAGS) \
- -DG_LOG_DOMAIN=\"evolution-plugin-python\" \
- -I$(top_srcdir) \
- $(EVOLUTION_DATA_SERVER_CFLAGS) \
- $(PY_INCLUDES)
-
-module_plugin_python_la_SOURCES = \
- evolution-module-plugin-python.c \
- e-plugin-python.c \
- e-plugin-python.h
-
-module_plugin_python_la_LIBADD = \
- -ldl -lutil -lm \
- $(top_builddir)/e-util/libeutil.la \
- $(EVOLUTION_DATA_SERVER_LIBS) \
- $(PY_LIBS)
-
-module_plugin_python_la_LDFLAGS = \
- -module -avoid-version $(NO_UNDEFINED)
-
-example_sources = \
- example/hello_python.py \
- example/org-gnome-hello-python-ui.xml \
- example/org-gnome-hello-python.eplug.xml \
- example/Makefile.am
-
-EXTRA_DIST = $(example_sources)
-
--include $(top_srcdir)/git.mk
diff --git a/modules/plugin-python/e-plugin-python.c b/modules/plugin-python/e-plugin-python.c
deleted file mode 100644
index fc13ade627..0000000000
--- a/modules/plugin-python/e-plugin-python.c
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
- * e-plugin-python.c
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) version 3.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with the program; if not, see <http://www.gnu.org/licenses/>
- *
- *
- * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com)
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-/* Include <Python.h> first to avoid:
- * warning: "_POSIX_C_SOURCE" redefined */
-#include <Python.h>
-
-#include "e-plugin-python.h"
-
-#include <sys/types.h>
-#include <string.h>
-
-#define E_PLUGIN_PYTHON_GET_PRIVATE(obj) \
- (G_TYPE_INSTANCE_GET_PRIVATE \
- ((obj), E_TYPE_PLUGIN_PYTHON, EPluginPythonPrivate))
-
-struct _EPluginPythonPrivate {
- PyObject *pModule;
- PyObject *pClass;
- PyObject *pFunc;
- PyObject *pDict;
- GHashTable *methods;
-};
-
-static gpointer parent_class;
-static GType plugin_python_type;
-
-static gchar *
-get_xml_prop (xmlNodePtr node,
- const gchar *id)
-{
- xmlChar *prop;
- gchar *out = NULL;
-
- prop = xmlGetProp (node, (xmlChar *) id);
-
- if (prop != NULL) {
- out = g_strdup ((gchar *) prop);
- xmlFree (prop);
- }
-
- return out;
-}
-
-static void
-plugin_python_finalize (GObject *object)
-{
- EPluginPython *plugin_python;
-
- plugin_python = E_PLUGIN_PYTHON (object);
-
- g_free (plugin_python->location);
- g_free (plugin_python->module_name);
- g_free (plugin_python->pClass);
-
- g_hash_table_destroy (plugin_python->priv->methods);
-
- /* Chain up to parent's finalize() method. */
- G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-static gint
-plugin_python_construct (EPlugin *plugin,
- xmlNodePtr root)
-{
- EPluginPython *plugin_python;
-
- /* Chain up to parent's construct() method. */
- if (E_PLUGIN_CLASS (parent_class)->construct (plugin, root) == -1)
- return -1;
-
- plugin_python = E_PLUGIN_PYTHON (plugin);
- plugin_python->location = get_xml_prop (root, "location");
- plugin_python->module_name = get_xml_prop (root, "module_name");
- plugin_python->pClass = get_xml_prop (root, "pClass");
-
- return (plugin_python->location != NULL) ? 0 : -1;
-}
-
-static gpointer
-plugin_python_invoke (EPlugin *plugin,
- const gchar *name,
- gpointer data)
-{
- EPluginPython *plugin_python;
- EPluginPythonPrivate *priv;
- PyObject *pModuleName, *pFunc;
- PyObject *pValue = NULL;
-
- plugin_python = E_PLUGIN_PYTHON (plugin);
- priv = plugin_python->priv;
-
- /* We need to do this every time since we may be called
- * from any thread for some uses. */
- Py_Initialize ();
-
- if (priv->pModule == NULL) {
- gchar *string;
-
- pModuleName = PyString_FromString (plugin_python->module_name);
-
- string = g_strdup_printf (
- "import sys; "
- "sys.path.insert(0, '%s')",
- plugin_python->location);
- PyRun_SimpleString (string);
- g_free (string);
-
- priv->pModule = PyImport_Import (pModuleName);
-
- Py_DECREF (pModuleName);
-
- if (priv->pModule == NULL) {
- PyErr_Print ();
- g_warning (
- "Can't load python module '%s'",
- plugin_python->location);
- return NULL;
- }
-
- priv->pDict = PyModule_GetDict (priv->pModule);
-
- if (plugin_python->pClass != NULL) {
- priv->pClass = PyDict_GetItemString (
- priv->pDict, plugin_python->pClass);
- }
- }
-
- if (priv->pClass) {
-
- if (PyCallable_Check (priv->pClass)) {
- PyObject *pInstance;
-
- pInstance = PyObject_CallObject (priv->pClass, NULL);
- pValue = PyObject_CallMethod (pInstance, (gchar *) name, NULL);
- }
-
- } else {
-
- pFunc = PyDict_GetItemString (priv->pDict, name);
-
- if (pFunc && PyCallable_Check (pFunc))
- pValue = PyObject_CallObject (pFunc, NULL);
- else
- PyErr_Print ();
- }
-
- if (pValue) {
- Py_DECREF (pValue);
- /* Fixme */
- return NULL;
- } else
- return NULL;
-}
-
-static void
-plugin_python_class_init (EPluginPythonClass *class)
-{
- GObjectClass *object_class;
- EPluginClass *plugin_class;
-
- parent_class = g_type_class_peek_parent (class);
- g_type_class_add_private (class, sizeof (EPluginPythonPrivate));
-
- object_class = G_OBJECT_CLASS (class);
- object_class->finalize = plugin_python_finalize;
-
- plugin_class = E_PLUGIN_CLASS (class);
- plugin_class->construct = plugin_python_construct;
- plugin_class->invoke = plugin_python_invoke;
- plugin_class->type = "python";
-}
-
-static void
-plugin_python_init (EPluginPython *plugin_python)
-{
- GHashTable *methods;
-
- methods = g_hash_table_new_full (
- g_str_hash, g_str_equal,
- (GDestroyNotify) g_free,
- (GDestroyNotify) NULL);
-
- plugin_python->priv = E_PLUGIN_PYTHON_GET_PRIVATE (plugin_python);
- plugin_python->priv->methods = methods;
-}
-
-GType
-e_plugin_python_get_type (void)
-{
- return plugin_python_type;
-}
-
-void
-e_plugin_python_register_type (GTypeModule *type_module)
-{
- static const GTypeInfo type_info = {
- sizeof (EPluginPythonClass),
- (GBaseInitFunc) NULL,
- (GBaseFinalizeFunc) NULL,
- (GClassInitFunc) plugin_python_class_init,
- (GClassFinalizeFunc) NULL,
- NULL, /* class_data */
- sizeof (EPluginPython),
- 0, /* n_preallocs */
- (GInstanceInitFunc) plugin_python_init,
- NULL /* value_table */
- };
-
- plugin_python_type = g_type_module_register_type (
- type_module, E_TYPE_PLUGIN,
- "EPluginPython", &type_info, 0);
-
- /* TODO Does this mean I can cache the instance of pyobjects? */
- Py_Initialize ();
-}
diff --git a/modules/plugin-python/e-plugin-python.h b/modules/plugin-python/e-plugin-python.h
deleted file mode 100644
index 9ee780c76c..0000000000
--- a/modules/plugin-python/e-plugin-python.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * e-plugin-python.h
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) version 3.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with the program; if not, see <http://www.gnu.org/licenses/>
- *
- *
- * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com)
- *
- */
-
-#ifndef E_PLUGIN_PYTHON_H
-#define E_PLUGIN_PYTHON_H
-
-#include <e-util/e-plugin.h>
-
-/* Standard GObject macros */
-#define E_TYPE_PLUGIN_PYTHON \
- (e_plugin_python_get_type ())
-#define E_PLUGIN_PYTHON(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST \
- ((obj), E_TYPE_PLUGIN_PYTHON, EPluginPython))
-#define E_PLUGIN_PYTHON_CLASS(cls) \
- (G_TYPE_CHECK_CLASS_CAST \
- ((cls), E_TYPE_PLUGIN_PYTHON, EPluginPythonClass))
-#define E_IS_PLUGIN_PYTHON(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE \
- ((obj), E_TYPE_PLUGIN_PYTHON))
-#define E_IS_PLUGIN_PYTHON_CLASS(cls) \
- (G_TYPE_CHECK_CLASS_TYPE \
- ((cls), E_TYPE_PLUGIN_PYTHON))
-#define E_PLUGIN_PYTHON_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS \
- ((obj), E_TYPE_PLUGIN_PYTHON, EPluginPythonClass))
-
-G_BEGIN_DECLS
-
-typedef struct _EPluginPython EPluginPython;
-typedef struct _EPluginPythonClass EPluginPythonClass;
-typedef struct _EPluginPythonPrivate EPluginPythonPrivate;
-
-struct _EPluginPython {
- EPlugin parent;
- EPluginPythonPrivate *priv;
-
- gchar *location;
- gchar *pClass;
- gchar *module_name;
-};
-
-struct _EPluginPythonClass {
- EPluginClass parent_class;
-};
-
-GType e_plugin_python_get_type (void);
-void e_plugin_python_register_type (GTypeModule *type_module);
-
-G_END_DECLS
-
-#endif /* E_PLUGIN_PYTHON_H */
diff --git a/modules/plugin-python/evolution-module-plugin-python.c b/modules/plugin-python/evolution-module-plugin-python.c
deleted file mode 100644
index 7adeadaf05..0000000000
--- a/modules/plugin-python/evolution-module-plugin-python.c
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * evolution-module-plugin-python.c
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) version 3.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with the program; if not, see <http://www.gnu.org/licenses/>
- *
- *
- * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com)
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "e-plugin-python.h"
-
-/* Module Entry Points */
-void e_module_load (GTypeModule *type_module);
-void e_module_unload (GTypeModule *type_module);
-
-G_MODULE_EXPORT void
-e_module_load (GTypeModule *type_module)
-{
- /* Register dynamically loaded types. */
-
- e_plugin_python_register_type (type_module);
-}
-
-G_MODULE_EXPORT void
-e_module_unload (GTypeModule *type_module)
-{
-}
diff --git a/modules/plugin-python/example/Makefile.am b/modules/plugin-python/example/Makefile.am
deleted file mode 100644
index f9c5687982..0000000000
--- a/modules/plugin-python/example/Makefile.am
+++ /dev/null
@@ -1,30 +0,0 @@
-@EVO_PLUGIN_RULE@
-
-plugin_DATA = \
- hello_python.py \
- org-gnome-hello-python-ui.xml \
- org-gnome-hello-python.eplug
-
-liborg_gnome_py_plug_test_la_CPPFLAGS = \
- $(AM_CPPFLAGS) \
- -DEVOLUTION_UIDIR=\""$(uidir)"\" \
- -DEVOLUTION_IMAGESDIR=\""$(imagesdir)"\"
-
-liborg_gnome_py_plug_test_la_LDFLAGS = -module -avoid-version $(NO_UNDEFINED)
-
-errordir = $(privdatadir)/errors
-
-BUILDME = org-gnome-hello-python.eplug \
-$(error_i18n)
-
-BUILT_SOURCES = \
- $(BUILDME)
-
-EXTRA_DIST = \
- hello_python.py \
- org-gnome-hello-python-ui.xml \
- org-gnome-hello-python.eplug.xml
-
-CLEANFILES = $(BUILT_SOURCES)
-
--include $(top_srcdir)/git.mk
diff --git a/modules/plugin-python/example/hello_python.py b/modules/plugin-python/example/hello_python.py
deleted file mode 100644
index 16dc2a12f8..0000000000
--- a/modules/plugin-python/example/hello_python.py
+++ /dev/null
@@ -1,5 +0,0 @@
-'''hello_python.py - Python source designed to '''
-'''demonstrate the use of python Eplugins'''
-
-def say_hello():
- print 'Hello ! From python'
diff --git a/modules/plugin-python/example/org-gnome-hello-python-ui.xml b/modules/plugin-python/example/org-gnome-hello-python-ui.xml
deleted file mode 100644
index 074960e84d..0000000000
--- a/modules/plugin-python/example/org-gnome-hello-python-ui.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<Root>
- <commands>
- <cmd name="HelloPy" _label="Hello Python"
- _tip="Python Plugin Loader tests"
- />
- </commands>
-
- <menu>
- <placeholder name="MessagePlaceholder">
- <submenu name="Message">
- <separator f="" name="sep"/>
- <menuitem name="HelloPy" verb=""/>
- </submenu>
- </placeholder>
- </menu>
-</Root>
diff --git a/modules/plugin-python/example/org-gnome-hello-python.eplug.xml b/modules/plugin-python/example/org-gnome-hello-python.eplug.xml
deleted file mode 100644
index 8f77d5ba01..0000000000
--- a/modules/plugin-python/example/org-gnome-hello-python.eplug.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0"?>
-<e-plugin-list>
- <e-plugin id="org.gnome.evolution.hello_python" type="python" _name="Python Test Plugin" location="@PLUGINDIR@" module_name="hello_python">
-
- <author name="Johnny Jacob" email="jjohnny@novell.com"/>
-
- <_description>
- Test Plugin for Python EPlugin loader.
- </_description>
-
- <hook class="org.gnome.evolution.mail.bonobomenu:1.0">
- <menu id="org.gnome.evolution.mail.browser" target="select">
- <!-- the path to the bonobo menu description. Any UI items on Evolution should come here -->
- <ui file="@PLUGINDIR@/org-gnome-hello-python-ui.xml"/>
- <item type="item" verb="HelloPy" path="/commands/HelloPy" enable="one" activate="say_hello"/>
- </menu>
- </hook>
-
- </e-plugin>
-</e-plugin-list>