diff options
author | Brad Bishop <bradleyb@fuzziesquirrel.com> | 2017-05-23 19:16:21 -0400 |
---|---|---|
committer | Brad Bishop <bradleyb@fuzziesquirrel.com> | 2017-06-19 16:26:47 -0400 |
commit | 49e661750ceed68ada3f3ae00d6d1620800c1f5f (patch) | |
tree | 4dd9ae109b41aa488b360d36e52f7deb2ee02782 /src/pdmgen.py | |
parent | 3ce5c484aa9d25927b106f9bd3f819ec861176ad (diff) | |
download | phosphor-dbus-monitor-49e661750ceed68ada3f3ae00d6d1620800c1f5f.tar.gz phosphor-dbus-monitor-49e661750ceed68ada3f3ae00d6d1620800c1f5f.zip |
Add callback groups
Allow named collections of callbacks to be defined and used anywhere
callbacks are used.
Change-Id: I3224aa06b2250e9a055bc70d20c186caecd033af
Signed-off-by: Brad Bishop <bradleyb@fuzziesquirrel.com>
Diffstat (limited to 'src/pdmgen.py')
-rwxr-xr-x | src/pdmgen.py | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/src/pdmgen.py b/src/pdmgen.py index e4a97e7..b20436e 100755 --- a/src/pdmgen.py +++ b/src/pdmgen.py @@ -436,6 +436,65 @@ class Journal(Callback, Renderer): indent=indent) +class CallbackGraphEntry(Group): + '''An entry in a traversal list for groups of callbacks.''' + + def __init__(self, *a, **kw): + super(CallbackGraphEntry, self).__init__(**kw) + + def setup(self, objs): + '''Resolve group members.''' + + def map_member(x): + return get_index( + objs, 'callback', x, config=self.configfile) + + self.members = map( + map_member, + self.members) + + super(CallbackGraphEntry, self).setup(objs) + + +class GroupOfCallbacks(ConfigEntry, Renderer): + '''Handle the callback group config file directive.''' + + def __init__(self, *a, **kw): + self.members = kw.pop('members') + super(GroupOfCallbacks, self).__init__(**kw) + + def factory(self, objs): + '''Create a graph instance for this group of callbacks.''' + + args = { + 'configfile': self.configfile, + 'members': self.members, + 'class': 'callbackgroup', + 'callbackgroup': 'callback', + 'name': self.members + } + + entry = CallbackGraphEntry(**args) + add_unique(entry, objs, config=self.configfile) + + super(GroupOfCallbacks, self).factory(objs) + + def setup(self, objs): + '''Resolve graph entry.''' + + self.graph = get_index( + objs, 'callbackgroup', self.members, config=self.configfile) + + super(GroupOfCallbacks, self).setup(objs) + + def construct(self, loader, indent): + return self.render( + loader, + 'callbackgroup.mako.cpp', + c=self, + indent=indent) + + class Everything(Renderer): '''Parse/render entry point.''' @@ -465,6 +524,7 @@ class Everything(Renderer): }, 'callback': { 'journal': Journal, + 'group': GroupOfCallbacks, }, } @@ -556,6 +616,7 @@ class Everything(Renderer): self.instancegroups = kw.pop('instancegroup', []) self.watches = kw.pop('watch', []) self.callbacks = kw.pop('callback', []) + self.callbackgroups = kw.pop('callbackgroup', []) super(Everything, self).__init__(**kw) @@ -578,6 +639,7 @@ class Everything(Renderer): watches=self.watches, instancegroups=self.instancegroups, callbacks=self.callbacks, + callbackgroups=self.callbackgroups, indent=Indent())) if __name__ == '__main__': |