modify arguments of Dispatcher.announce_update

- 'pname' argument is not needed
- change 'modulename' argument to 'moduleobj'
  (needed for further change)

Change-Id: Ib21f8ad06d9b2be4005ff3513088a85e29785c94
Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/32744
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Enrico Faulhaber <enrico.faulhaber@frm2.tum.de>
Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
This commit is contained in:
zolliker 2023-12-11 17:41:56 +01:00
parent 2a165c5013
commit f6f433e6b2
11 changed files with 27 additions and 44 deletions

View File

@ -348,7 +348,7 @@ class Module(HasAccessibles):
self.attachedModules = {}
self.errors = []
self._isinitialized = False
self.updateCallback = srv.dispatcher.announce_update
self.updateCallback = srv.dispatcher.announce_update
# handle module properties
# 1) make local copies of properties
@ -549,7 +549,7 @@ class Module(HasAccessibles):
arg = value
pobj.readerror = None
if pobj.export:
self.updateCallback(self.name, pname, pobj)
self.updateCallback(self, pobj)
cblist = callbacks[pname]
for cb in cblist:
try:

View File

@ -946,6 +946,9 @@ class Attached(Property):
if not modulename:
return None # happens when mandatory=False and modulename is not given
modobj = obj.secNode.get_module(modulename)
if not modobj:
raise ConfigError(f'attached module {self.name}={modulename!r} '
f'does not exist')
if not isinstance(modobj, self.basecls):
raise ConfigError(f'attached module {self.name}={modobj.name!r} '\
f'must inherit from {self.basecls.__qualname__!r}')

View File

@ -82,14 +82,14 @@ class Dispatcher(dispatcher.Dispatcher):
super().__init__(name, log, options, srv)
self.log = srv.log # overwrite child logger
def announce_update(self, modulename, pname, pobj):
def announce_update(self, moduleobj, pobj):
if pobj.readerror:
value = repr(pobj.readerror)
else:
value = pobj.value
logobj = self._modules.get(modulename, self)
logobj = self._modules.get(moduleobj.name, self)
# self.log.info('%s:%s %r', modulename, pname, value)
logobj.log.info('%s %r', pname, value)
logobj.log.info('%s %r', pobj.name, value)
def register_module(self, moduleobj, modulename, export=True):
self.log.info('registering %s', modulename)

View File

@ -94,10 +94,10 @@ class Dispatcher:
for conn in listeners:
conn.send_reply(msg)
def announce_update(self, modulename, pname, pobj):
def announce_update(self, moduleobj, pobj):
"""called by modules param setters to notify subscribers of new values
"""
self.broadcast_event(make_update(modulename, pobj))
self.broadcast_event(make_update(moduleobj.name, pobj))
def subscribe(self, conn, eventname):
self._subscriptions.setdefault(eventname, set()).add(conn)

View File

@ -94,6 +94,7 @@ class SecNode:
if modulename in list(self.modules.values()):
# it's actually already the module object
return modulename
# create module from srv.module_cfg, store and return
self.log.debug('attempting to create module %r', modulename)

View File

@ -24,29 +24,6 @@ from frappy.modules import Module, Attached
from frappy.protocol.dispatcher import Dispatcher
# class DispatcherStub:
# # omit_unchanged_within = 0
#
# # def __init__(self, updates):
# # self.updates = updates
# #
# # def announce_update(self, modulename, pname, pobj):
# # self.updates.setdefault(modulename, {})
# # if pobj.readerror:
# # self.updates[modulename]['error', pname] = str(pobj.readerror)
# # else:
# # self.updates[modulename][pname] = pobj.value
#
# def __init__(self):
# self.modules = {}
#
# def get_module(self, name):
# return self.modules[name]
#
# def register_module(self, name, module):
# self.modules[name] = module
class LoggerStub:
def debug(self, fmt, *args):
print(fmt % args)

View File

@ -37,12 +37,13 @@ class DispatcherStub:
generalConfig.testinit(omit_unchanged_within=0)
self.updates = updates
def announce_update(self, modulename, pname, pobj):
def announce_update(self, moduleobj, pobj):
modulename = moduleobj.name
self.updates.setdefault(modulename, {})
if pobj.readerror:
self.updates[modulename]['error', pname] = str(pobj.readerror)
self.updates[modulename]['error', pobj.name] = str(pobj.readerror)
else:
self.updates[modulename][pname] = pobj.value
self.updates[modulename][pobj.name] = pobj.value
class LoggerStub:

View File

@ -44,12 +44,13 @@ class DispatcherStub:
generalConfig.testinit(omit_unchanged_within=0)
self.updates = updates
def announce_update(self, modulename, pname, pobj):
def announce_update(self, moduleobj, pobj):
modulename = moduleobj.name
self.updates.setdefault(modulename, {})
if pobj.readerror:
self.updates[modulename]['error', pname] = str(pobj.readerror)
self.updates[modulename]['error', pobj.name] = str(pobj.readerror)
else:
self.updates[modulename][pname] = pobj.value
self.updates[modulename][pobj.name] = pobj.value
class LoggerStub:
@ -707,10 +708,10 @@ def test_super_call():
def __init__(self, updates):
self.updates = updates
def announce_update(self, modulename, pname, pobj):
def announce_update(self, moduleobj, pobj):
if pobj.readerror:
raise pobj.readerror
self.updates.append((modulename, pname, pobj.value))
self.updates.append((moduleobj.name, pobj.name, pobj.value))
class ServerStub1:
def __init__(self, updates):

View File

@ -35,7 +35,7 @@ class SecNodeStub:
class DispatcherStub:
def announce_update(self, modulename, pname, pobj):
def announce_update(self, moduleobj, pobj):
pass

View File

@ -53,7 +53,7 @@ artime = Time() # artificial test time
class DispatcherStub:
maxcycles = 10
def announce_update(self, modulename, pname, pobj):
def announce_update(self, moduleobj, pobj):
now = artime.time()
if hasattr(pobj, 'stat'):
pobj.stat.append(now)

View File

@ -195,12 +195,12 @@ class DispatcherStub:
generalConfig.testinit(omit_unchanged_within=0)
self.updates = updates
def announce_update(self, modulename, pname, pobj):
assert modulename == 'obj'
def announce_update(self, moduleobj, pobj):
assert moduleobj.name == 'obj'
if pobj.readerror:
self.updates.append((pname, pobj.readerror))
self.updates.append((pobj.name, pobj.readerror))
else:
self.updates.append((pname, pobj.value))
self.updates.append((pobj.name, pobj.value))
class ServerStub: