diff options
author | Sebastian Koslowski <koslowski@kit.edu> | 2016-04-27 12:35:12 +0200 |
---|---|---|
committer | Sebastian Koslowski <koslowski@kit.edu> | 2016-04-27 16:47:08 +0200 |
commit | 031a9dc18326ce1f4328c8edf131cba5904c3b13 (patch) | |
tree | a0a350eb696802e82d8facb37dc132ff5c7a97a6 /grc/core/utils | |
parent | 26de50e62da7116754c0175c32c4179de2d13672 (diff) |
grc: auto-add callbacks for epy block params
Diffstat (limited to 'grc/core/utils')
-rw-r--r-- | grc/core/utils/epy_block_io.py | 37 |
1 files changed, 32 insertions, 5 deletions
diff --git a/grc/core/utils/epy_block_io.py b/grc/core/utils/epy_block_io.py index df3a4bbc3e..76b50051db 100644 --- a/grc/core/utils/epy_block_io.py +++ b/grc/core/utils/epy_block_io.py @@ -11,7 +11,7 @@ TYPE_MAP = { 'int8': 'byte', 'uint8': 'byte', } -BlockIO = collections.namedtuple('BlockIO', 'name cls params sinks sources doc') +BlockIO = collections.namedtuple('BlockIO', 'name cls params sinks sources doc callbacks') def _ports(sigs, msgs): @@ -51,6 +51,7 @@ def extract(cls): cls = _find_block_class(cls, gr.gateway.gateway_block) spec = inspect.getargspec(cls.__init__) + init_args = spec.args[1:] defaults = map(repr, spec.defaults or ()) doc = cls.__doc__ or cls.__init__.__doc__ or '' cls_name = cls.__name__ @@ -64,14 +65,23 @@ def extract(cls): raise RuntimeError("Can't create an instance of your block: " + str(e)) name = instance.name() - params = list(zip(spec.args[1:], defaults)) + + params = list(zip(init_args, defaults)) + + def settable(attr): + try: + return callable(getattr(cls, attr).fset) # check for a property with setter + except AttributeError: + return attr in instance.__dict__ # not dir() - only the instance attribs + + callbacks = [attr for attr in dir(instance) if attr in init_args and settable(attr)] sinks = _ports(instance.in_sig(), pmt.to_python(instance.message_ports_in())) sources = _ports(instance.out_sig(), pmt.to_python(instance.message_ports_out())) - return BlockIO(name, cls_name, params, sinks, sources, doc) + return BlockIO(name, cls_name, params, sinks, sources, doc, callbacks) if __name__ == '__main__': @@ -81,7 +91,7 @@ from gnuradio import gr import pmt class blk(gr.sync_block): - def __init__(self, param1=None, param2=None): + def __init__(self, param1=None, param2=None, param3=None): "Test Docu" gr.sync_block.__init__( self, @@ -91,8 +101,25 @@ class blk(gr.sync_block): ) self.message_port_register_in(pmt.intern('msg_in')) self.message_port_register_out(pmt.intern('msg_out')) + self.param1 = param1 + self._param2 = param2 + self._param3 = param3 + + @property + def param2(self): + return self._param2 + + @property + def param3(self): + return self._param3 + + @param3.setter + def param3(self, value): + self._param3 = value def work(self, inputs_items, output_items): return 10 """ - print extract(blk_code) + from pprint import pprint + pprint(dict(extract(blk_code)._asdict())) + |