from peak.events import trellis class TestOrder(trellis.Component): trellis.compute.attrs( rule_a = lambda self: [self.rule_b, 'a'], rule_b = lambda self: [self.rule_a, 'b'] ) TestOrder().rule_a # [[None, 'b'], 'a'] # should throw CircularityError class TestInsonsistentInit(trellis.Component): trellis.attrs(v1=False, v2=True) @trellis.maintain(optional=True) def rule_a(self): self.v2 = False @trellis.maintain def rule_b(self): if self.v1 and self.v2: self.rule_a return True tc = TestInsonsistentInit() tc.v1 = True #print tc.v2, tc.rule_b # False, True assert not tc.v2 assert not tc.rule_b