summaryrefslogtreecommitdiffstats
path: root/src/pdmgen.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/pdmgen.py')
-rwxr-xr-xsrc/pdmgen.py62
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__':
OpenPOWER on IntegriCloud