From d76cfc2b895d118cd2834888175e330101c9bdb2 Mon Sep 17 00:00:00 2001 From: Martin Dlouhy Date: Thu, 21 Aug 2025 11:20:31 +0200 Subject: [PATCH 1/3] Add tool for listing inputs and outputs of OSGAR module --- osgar/tools/get_module_io.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 osgar/tools/get_module_io.py diff --git a/osgar/tools/get_module_io.py b/osgar/tools/get_module_io.py new file mode 100644 index 000000000..5006243ea --- /dev/null +++ b/osgar/tools/get_module_io.py @@ -0,0 +1,23 @@ +""" +Get OSGAR Node module I/O names +""" +from unittest.mock import MagicMock + +from osgar.lib.config import get_class_by_name + + +def get_module_io(module_name): + klass = get_class_by_name(module_name) + inputs = [o[3:] for o in dir(klass) if o.startswith('on_')] + + bus = MagicMock() + inst = klass(bus=bus, config={}) + + outputs = [c.args[0] for c in bus.mock_calls] + return inputs, outputs + + +if __name__ == '__main__': + import sys + name = sys.argv[1] + print(name, get_module_io(name)) From 6be940000bfc0771acba6dbdd522cc0e5c6a2864 Mon Sep 17 00:00:00 2001 From: Martin Dlouhy Date: Fri, 22 Aug 2025 20:50:15 +0200 Subject: [PATCH 2/3] add argparse --- osgar/tools/get_module_io.py | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/osgar/tools/get_module_io.py b/osgar/tools/get_module_io.py index 5006243ea..22fe5c56a 100644 --- a/osgar/tools/get_module_io.py +++ b/osgar/tools/get_module_io.py @@ -11,13 +11,23 @@ def get_module_io(module_name): inputs = [o[3:] for o in dir(klass) if o.startswith('on_')] bus = MagicMock() - inst = klass(bus=bus, config={}) + config = MagicMock() + try: + klass(bus=bus, config={}) + except KeyError: + pass # due to missing required config parameters outputs = [c.args[0] for c in bus.mock_calls] return inputs, outputs if __name__ == '__main__': - import sys - name = sys.argv[1] - print(name, get_module_io(name)) + import argparse + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument('--name', help='name of the Node class like "doctor:Doctor"', required=True) + args = parser.parse_args() + + print('Module:', args.name) + i,o = get_module_io(args.name) + print('Inputs:', i) + print('Outputs:', o) From d3e383401af77d07a7d3de9f5e1f63a08aef1efc Mon Sep 17 00:00:00 2001 From: Martin Dlouhy Date: Fri, 22 Aug 2025 21:00:18 +0200 Subject: [PATCH 3/3] FIXUP merge of outputs (potentially multiple calls of register) --- osgar/tools/get_module_io.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/osgar/tools/get_module_io.py b/osgar/tools/get_module_io.py index 22fe5c56a..bfc476b97 100644 --- a/osgar/tools/get_module_io.py +++ b/osgar/tools/get_module_io.py @@ -2,6 +2,7 @@ Get OSGAR Node module I/O names """ from unittest.mock import MagicMock +import itertools from osgar.lib.config import get_class_by_name @@ -17,7 +18,7 @@ def get_module_io(module_name): except KeyError: pass # due to missing required config parameters - outputs = [c.args[0] for c in bus.mock_calls] + outputs = list(itertools.chain.from_iterable([c.args for c in bus.mock_calls])) return inputs, outputs