- 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.
This commit is contained in:
George Thessalonikefs 2023-10-16 15:53:47 +02:00
parent 63a5280f8f
commit 122dd6c11e
3 changed files with 33 additions and 2 deletions

View file

@ -2,6 +2,9 @@
- Expose the script filename in the Python module environment 'mod_env' - Expose the script filename in the Python module environment 'mod_env'
instead of the config_file structure which includes the linked list instead of the config_file structure which includes the linked list
of scripts in a multi Python module setup; fixes #79. 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 13 October 2023: George
- Better fix for infinite loop when reading multiple lines of input on - Better fix for infinite loop when reading multiple lines of input on

View file

@ -129,7 +129,7 @@ config_file
.. attribute:: ifs .. attribute:: ifs
Interface description strings (IP addresses). List of interface description strings (IP addresses).
.. attribute:: num_out_ifs .. attribute:: num_out_ifs
@ -138,7 +138,7 @@ config_file
.. attribute:: out_ifs .. attribute:: out_ifs
Outgoing interface description strings (IP addresses). List of outgoing interface description strings (IP addresses).
.. attribute:: root_hints .. attribute:: root_hints

View file

@ -86,6 +86,20 @@
} }
return list; 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 Structure config_file
* ************************************************************************************ */ * ************************************************************************************ */
%ignore config_file::ifs;
%ignore config_file::out_ifs;
%ignore config_file::python_script; %ignore config_file::python_script;
struct config_file { struct config_file {
int verbosity; int verbosity;
@ -1036,8 +1052,20 @@ struct config_file {
struct config_strlist* python_script; 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 { %extend config_file {
%pythoncode %{ %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." def _deprecated_python_script(self): return "cfg.python_script is deprecated, you can use `mod_env['script']` instead."
python_script = property(_deprecated_python_script) python_script = property(_deprecated_python_script)
%} %}