penalization and sending txs ahead of shares
[p2pool.git] / p2pool / util / variable.py
index 8155e2c..f9af6db 100644 (file)
@@ -10,6 +10,9 @@ class Event(object):
         self._once = None
         self.times = 0
     
+    def run_and_watch(self, func):
+        func()
+        return self.watch(func)
     def watch(self, func):
         id = self.id_generator.next()
         self.observers[id] = func
@@ -66,10 +69,12 @@ class Variable(object):
         self.changed.happened(value)
         self.transitioned.happened(oldvalue, value)
     
+    @defer.inlineCallbacks
+    def get_when_satisfies(self, func):
+        while True:
+            if func(self.value):
+                defer.returnValue(self.value)
+            yield self.changed.once.get_deferred()
+    
     def get_not_none(self):
-        if self.value is not None:
-            return defer.succeed(self.value)
-        else:
-            df = defer.Deferred()
-            self.changed.once.watch(df.callback)
-            return df
+        return self.get_when_satisfies(lambda val: val is not None)