summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--plugins/pychrysalide/core/queue.c6
-rw-r--r--plugins/pychrysalide/helpers.c56
-rw-r--r--plugins/pychrysalide/helpers.h3
3 files changed, 60 insertions, 5 deletions
diff --git a/plugins/pychrysalide/core/queue.c b/plugins/pychrysalide/core/queue.c
index 9c1365a..8d530e6 100644
--- a/plugins/pychrysalide/core/queue.c
+++ b/plugins/pychrysalide/core/queue.c
@@ -79,7 +79,6 @@ bool populate_core_module_with_queue(void)
{
bool result; /* Bilan à retourner */
PyObject *module; /* Module à recompléter */
- int ret; /* Bilan d'un appel */
static PyMethodDef py_queue_methods[] = {
@@ -93,11 +92,8 @@ bool populate_core_module_with_queue(void)
module = get_access_to_python_module("pychrysalide.core");
- ret = PyModule_AddFunctions(module, py_queue_methods);
-
- result = (ret == 0);
+ result = register_python_module_methods(module, py_queue_methods);
return result;
}
-
diff --git a/plugins/pychrysalide/helpers.c b/plugins/pychrysalide/helpers.c
index 3a67e2b..5ef10eb 100644
--- a/plugins/pychrysalide/helpers.c
+++ b/plugins/pychrysalide/helpers.c
@@ -316,6 +316,62 @@ PyObject *build_python_module(PyObject *super, PyModuleDef *def)
}
+/******************************************************************************
+* *
+* Paramètres : module = module dont la définition est à compléter. *
+* defs = définitions de méthodes pour module. *
+* *
+* Description : Met en place une série de méthodes pour un module Python. *
+* *
+* Retour : Bilan de l'opération. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+bool register_python_module_methods(PyObject *module, PyMethodDef *defs)
+{
+ bool result; /* Bilan à retourner */
+ int ret; /* Bilan d'un appel */
+ PyMethodDef *iter; /* Boucle de parcours */
+ PyObject *features; /* Module à recompléter */
+ PyObject *features_dict; /* Dictionnaire à compléter */
+ PyObject *mod_dict; /* Dictionnaire à consulter */
+ PyObject *item; /* Nouvel élément à exporter */
+
+ ret = PyModule_AddFunctions(module, defs);
+ result = (ret == 0);
+
+ if (result)
+ {
+ features = get_access_to_python_module("pychrysalide.features");
+
+ features_dict = PyModule_GetDict(features);
+
+ mod_dict = PyModule_GetDict(module);
+
+ for (iter = defs; iter->ml_name != NULL && result; iter++)
+ {
+ item = PyDict_GetItemString(mod_dict, iter->ml_name);
+ result = (item != NULL);
+ assert(result);
+
+ if (result)
+ {
+ ret = PyDict_SetItemString(features_dict, iter->ml_name, item);
+ result = (ret == 0);
+ assert(result);
+ }
+
+ }
+
+ }
+
+ return result;
+
+}
+
+
/* ---------------------------------------------------------------------------------- */
/* CONFORTS CIBLANT PYGOBJECT */
diff --git a/plugins/pychrysalide/helpers.h b/plugins/pychrysalide/helpers.h
index d8d75af..486ebdc 100644
--- a/plugins/pychrysalide/helpers.h
+++ b/plugins/pychrysalide/helpers.h
@@ -64,6 +64,9 @@ bool PyDict_AddStringConstant(PyTypeObject *, const char *, const char *);
/* Met en place un nouveau module Python. */
PyObject *build_python_module(PyObject *, PyModuleDef *);
+/* Met en place une série de méthodes pour un module Python. */
+bool register_python_module_methods(PyObject *, PyMethodDef *);
+
/* --------------------------- CONFORTS CIBLANT PYGOBJECT --------------------------- */