diff options
Diffstat (limited to 'plugins/pychrysalide/helpers.c')
-rw-r--r-- | plugins/pychrysalide/helpers.c | 56 |
1 files changed, 56 insertions, 0 deletions
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 */ |