From edcd7a2e2919ea880f8aaf649cf7ed8f1eabac1a Mon Sep 17 00:00:00 2001 From: Cyrille Bagard Date: Wed, 12 Dec 2018 18:00:18 +0100 Subject: Added Python module functions in the features namespace. --- plugins/pychrysalide/core/queue.c | 6 +---- plugins/pychrysalide/helpers.c | 56 +++++++++++++++++++++++++++++++++++++++ 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 --------------------------- */ -- cgit v0.11.2-87-g4458