From 122dd6c11e946e7e60e4c4e9ca9cc73c4fe6b74d Mon Sep 17 00:00:00 2001 From: George Thessalonikefs Date: Mon, 16 Oct 2023 15:53:47 +0200 Subject: [PATCH] - Expose the configured listening and outgoing interfaces, if any, as a list of strings in the Python 'config_file' class instead of the current Swig object proxy; fixes #79. --- doc/Changelog | 3 +++ pythonmod/doc/modules/config.rst | 4 ++-- pythonmod/interface.i | 28 ++++++++++++++++++++++++++++ 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index 893dfc2d5..195e3b170 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -2,6 +2,9 @@ - Expose the script filename in the Python module environment 'mod_env' instead of the config_file structure which includes the linked list of scripts in a multi Python module setup; fixes #79. + - Expose the configured listening and outgoing interfaces, if any, as + a list of strings in the Python 'config_file' class instead of the + current Swig object proxy; fixes #79. 13 October 2023: George - Better fix for infinite loop when reading multiple lines of input on diff --git a/pythonmod/doc/modules/config.rst b/pythonmod/doc/modules/config.rst index 1298725f2..ac4db4c94 100644 --- a/pythonmod/doc/modules/config.rst +++ b/pythonmod/doc/modules/config.rst @@ -129,7 +129,7 @@ config_file .. attribute:: ifs - Interface description strings (IP addresses). + List of interface description strings (IP addresses). .. attribute:: num_out_ifs @@ -138,7 +138,7 @@ config_file .. attribute:: out_ifs - Outgoing interface description strings (IP addresses). + List of outgoing interface description strings (IP addresses). .. attribute:: root_hints diff --git a/pythonmod/interface.i b/pythonmod/interface.i index d31c7ae55..d9839fc38 100644 --- a/pythonmod/interface.i +++ b/pythonmod/interface.i @@ -86,6 +86,20 @@ } return list; } + + /* converts an array of strings (char**) to a List of strings */ + PyObject* CharArrayAsStringList(char** array, int len) { + PyObject* list; + int i; + + if(!array||len==0) return PyList_New(0); + + list = PyList_New(len); + for (i=0; i < len; i++) { + PyList_SET_ITEM(list, i, PyString_FromString(array[i])); + } + return list; + } %} /* ************************************************************************************ * @@ -952,6 +966,8 @@ struct config_str2list { /* ************************************************************************************ * Structure config_file * ************************************************************************************ */ +%ignore config_file::ifs; +%ignore config_file::out_ifs; %ignore config_file::python_script; struct config_file { int verbosity; @@ -1036,8 +1052,20 @@ struct config_file { struct config_strlist* python_script; }; +%inline %{ + PyObject* _get_ifs_tuple(struct config_file* cfg) { + return CharArrayAsStringList(cfg->ifs, cfg->num_ifs); + } + PyObject* _get_ifs_out_tuple(struct config_file* cfg) { + return CharArrayAsStringList(cfg->out_ifs, cfg->num_out_ifs); + } +%} + %extend config_file { %pythoncode %{ + ifs = property(_unboundmodule._get_ifs_tuple) + out_ifs = property(_unboundmodule._get_ifs_out_tuple) + def _deprecated_python_script(self): return "cfg.python_script is deprecated, you can use `mod_env['script']` instead." python_script = property(_deprecated_python_script) %} -- 2.47.3