diff options
author | Casey Dahlin <cdahlin@redhat.com> | 2008-12-22 02:58:28 -0500 |
---|---|---|
committer | Casey Dahlin <cdahlin@redhat.com> | 2008-12-22 02:58:28 -0500 |
commit | b746901eb0eaf46e163ec1a52211f86fdfbc45f1 (patch) | |
tree | d79fc342170074aad852f5455a7b31fcd232a609 /statemachine.py | |
parent | 456d0c14697cf19128a58b40053fa56d1daf21f5 (diff) | |
download | upstate-b746901eb0eaf46e163ec1a52211f86fdfbc45f1.tar.gz upstate-b746901eb0eaf46e163ec1a52211f86fdfbc45f1.tar.xz upstate-b746901eb0eaf46e163ec1a52211f86fdfbc45f1.zip |
Modify system to use proper patterns rather than just strings and blanks
Diffstat (limited to 'statemachine.py')
-rw-r--r-- | statemachine.py | 38 |
1 files changed, 21 insertions, 17 deletions
diff --git a/statemachine.py b/statemachine.py index 5c396eb..cc90793 100644 --- a/statemachine.py +++ b/statemachine.py @@ -1,6 +1,7 @@ __docformat__ = 'restructuredtext' from category import Category +from pattern import Pattern class StateMachine: """ @@ -20,10 +21,11 @@ class StateMachine: Move states in the given Category `cat` from down to up. """ found = None - for dependency in self.get_applicable_deps(cat): + for (match, dependency) in self.get_applicable_deps(cat): res = self.get_satisfied_states(cat, dependency) + print dependency, res if len(res) == 0: - return False + res = cat.subtract(match) if found == None: found = res else: @@ -44,18 +46,12 @@ class StateMachine: least one category in the returned list. """ retval = set() - found = set() for x in cats1: for y in cats2: - if x == y: continue inter = x.intersect(y) if inter != None: retval.add(inter) - found.add(x) - found.add(y) - if len(found) == 0: - return cats1 & cats2 - return (retval | ((cats1 & cats2) - found)) + return retval def add_hold(self, cat): """ @@ -85,15 +81,23 @@ class StateMachine: retval = [] for (x, y) in self.deps: if x.equiv(cat): - retval.append(y.fill(cat.intersect(x).args)) + retval.append((x, y.fill(cat.intersect(x).args))) return retval + def __str__(self): + return "\n".join(["%s: %s" % (v, k) for k, v in self.holds.iteritems()]) + + def __repr__(self): + return str(self) + if __name__ == "__main__": sm = StateMachine() - sm.deps.append((Category("mounted", type="nfs"), Category("network_up"))) - sm.deps.append((Category("mounted", uuid=None, devname=None, label=None), Category("found_disk", uuid=None, devname=None, label=None))) - sm.deps.append((Category("mounted", uuid=None, devname=None, label=None), Category("vol_conf", uuid=None, devname=None, label=None))) - sm.assert_state(Category("vol_conf", uuid=None, devname=None, label="myroot", type="ext3", mountpoint="/")) - sm.assert_state(Category("found_disk", uuid="d3adb3ef", devname="/dev/sda", label="myroot")) - sm.assert_state(Category("mounted", uuid=None, type="ext3", devname=None, label=None, mountpoint=None)) - print sm.holds + sm.deps.append((Category("mounted", type=Pattern(True, "nfs")), Category("network_up"))) + sm.deps.append((Category("mounted", uuid=Pattern(False), devname=Pattern(False), label=Pattern(False), type=Pattern(False, "nfs")), Category("found_disk", uuid=Pattern(False), devname=Pattern(False), label=Pattern(False)))) + sm.deps.append((Category("mounted", uuid=Pattern(False), devname=Pattern(False), label=Pattern(False)), Category("vol_conf", uuid=Pattern(False), devname=Pattern(False), label=Pattern(False)))) + sm.assert_state(Category("network_up")) + sm.assert_state(Category("vol_conf", uuid=Pattern(False), devname=Pattern(False), label=Pattern(True, "myroot"), type=Pattern(True, "ext3"), mountpoint=Pattern(True, "/"))) + sm.assert_state(Category("vol_conf", uuid=Pattern(False), devname=Pattern(True, "foosrv.com:/vol/home"), label=Pattern(False), type=Pattern(True, "nfs"), mountpoint=Pattern(True, "/home"))) + sm.assert_state(Category("found_disk", uuid=Pattern(True, "d3adb3ef"), devname=Pattern(True, "/dev/sda"), label=Pattern(True, "myroot"))) + sm.assert_state(Category("mounted", uuid=Pattern(False), type=Pattern(False), devname=Pattern(False), label=Pattern(False), mountpoint=Pattern(False))) + print sm |