diff options
-rw-r--r-- | plugins/pychrysalide/core/queue.c | 6 | ||||
-rw-r--r-- | plugins/pychrysalide/helpers.c | 56 | ||||
-rw-r--r-- | plugins/pychrysalide/helpers.h | 3 |
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 --------------------------- */ |