From 94a539da90165409cfa310be46b9946405bc59f7 Mon Sep 17 00:00:00 2001 From: Markus Zolliker Date: Tue, 3 Dec 2019 15:24:01 +0100 Subject: [PATCH] parameters with a handler are polled by default parameters with a common commandhandler need only one poller item Change-Id: Ie2e20cf7bcebc67ca96d58455323f01f528b25ab Reviewed-on: https://forge.frm2.tum.de/review/c/sine2020/secop/playground/+/21951 Tested-by: JenkinsCodeReview Reviewed-by: Enrico Faulhaber Reviewed-by: Markus Zolliker --- secop/params.py | 5 ++--- secop/poller.py | 10 +++++++++- test/test_poller.py | 1 + 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/secop/params.py b/secop/params.py index cd620fd..10ddf4d 100644 --- a/secop/params.py +++ b/secop/params.py @@ -139,9 +139,8 @@ class Parameter(Accessible): datatype.setProperty('unit', unit) super(Parameter, self).__init__(**kwds) - # note: auto-converts True/False to 1/0 which yield the expected - # behaviour... - self.properties['poll'] = int(self.poll) + if self.handler and not self.poll: + self.properties['poll'] = True if self.constant is not None: self.properties['readonly'] = True diff --git a/secop/poller.py b/secop/poller.py index 05f3a54..e1f49da 100644 --- a/secop/poller.py +++ b/secop/poller.py @@ -132,10 +132,11 @@ class Poller(PollerBase): self.startup_timeout = max(self.startup_timeout, module.startup_timeout) except AttributeError: pass + handlers = set() # at the beginning, queues are simple lists # later, they will be converted to heaps for pname, pobj in module.parameters.items(): - polltype = int(pobj.poll) + polltype = pobj.poll rfunc = getattr(module, 'read_' + pname, None) if not polltype or not rfunc: continue @@ -149,6 +150,13 @@ class Poller(PollerBase): polltype = REGULAR else: polltype = SLOW + if not polltype in factors: + raise ProgrammingError("unknown poll type %r for parameter '%s'" + % (polltype, pname)) + if pobj.handler: + if pobj.handler in handlers: + continue # only one poller per handler + handlers.add(pobj.handler) # placeholders 0 are used for due, lastdue and idx self.queues[polltype].append((0, 0, (0, module, pobj, rfunc, factors[polltype]))) diff --git a/test/test_poller.py b/test/test_poller.py index 07b0b5f..430e87b 100644 --- a/test/test_poller.py +++ b/test/test_poller.py @@ -87,6 +87,7 @@ class Parameter: self.readonly = readonly self.interval = interval self.timestamp = 0 + self.handler = None self.reset() def reset(self):