From edcd7a2e2919ea880f8aaf649cf7ed8f1eabac1a Mon Sep 17 00:00:00 2001
From: Cyrille Bagard <nocbos@gmail.com>
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