From 6bd1ed26f737e514abbd889ea7d89981ccb0fd54 Mon Sep 17 00:00:00 2001 From: Casey Dahlin Date: Sat, 17 Jan 2009 00:34:06 -0500 Subject: Added valid supercategory filters --- statemachine.py | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) (limited to 'statemachine.py') diff --git a/statemachine.py b/statemachine.py index 133fd17..deb8bb7 100644 --- a/statemachine.py +++ b/statemachine.py @@ -17,6 +17,7 @@ class StateMachine: """ self.up = set() self.wanted = set() + self.valid_supercats = set() self.deps = [] self.event_triggers = [] @@ -34,6 +35,19 @@ class StateMachine: """ Move states in the given Category `cat` from down to up. """ + retval = False + for supercat in self.valid_supercats: + newcat = supercat.intersect(cat) + if newcat == None: + continue + retval = retval or self.__bring_up(newcat, wanted) + return retval + + def __bring_up(self, cat, wanted=True): + """ + Move states in the given Category `cat` from down to up. Don't check to + see if the category makes sense first. + """ found = None for (match, dependency) in self.get_applicable_deps(cat): res = self.get_satisfied_states(match, dependency) @@ -159,11 +173,16 @@ if __name__ == "__main__": sm.deps.append((Category("mounted", type=nm("nfs")), Category("found_disk"))) sm.deps.append((Category("mounted"), Category("vol_conf"))) + sm.valid_supercats.add(Category("network_up")) + sm.valid_supercats.add(Category("vol_conf")) + sm.valid_supercats.add(Category("found_disk")) + sm.valid_supercats.add(Category("mounted", devname=any(), mountpoint=any())) + sm.event_triggers.append((Category("fstab_line"), Category("vol_conf", src=m("fstabd")))) sm.bring_up(Category("network_up")) sm.bring_up(Category("found_disk", uuid=m("d3adb3ef"), devname=m("/dev/sda"), label=m("myroot"))) - sm.bring_up(Category("mounted", devname=any(), mountpoint=any())) + sm.bring_up(Category("mounted")) print sm print "--" sm.emit(Category("fstab_line", label=m("myroot"), type=m("ext3"), mountpoint=m("/"))) -- cgit