3 from twisted.internet import defer
8 self.one_time_observers = {}
9 self.id_generator = itertools.count()
11 def watch(self, func):
12 id = self.id_generator.next()
13 self.observers[id] = func
15 def unwatch(self, id):
16 self.observers.pop(id)
18 def watch_one_time(self, func):
19 id = self.id_generator.next()
20 self.one_time_observers[id] = func
22 def unwatch_one_time(self, id):
23 self.one_time_observers.pop(id)
25 def happened(self, event=None):
26 for func in self.observers.itervalues():
29 one_time_observers = self.one_time_observers
30 self.one_time_observers = {}
31 for func in one_time_observers.itervalues():
34 def get_deferred(self):
36 self.watch_one_time(df.callback)
39 class Variable(object):
40 def __init__(self, value):
42 self.changed = Event()
45 if value == self.value:
49 self.changed.happened(value)
51 def get_not_none(self):
52 if self.value is not None:
53 return defer.succeed(self.value)
56 self.changed.watch_one_time(df.callback)