def loopUntil(predicate, interval=0):
 from twisted.internet import task
 d = defer.Deferred()
 def check():
  res = predicate()
  if res:
   d.callback(res)
 call = task.LoopingCall(check)
 def stop(result):
  call.stop()
  return result
 d.addCallback(stop)
 d2 = call.start(interval)
 d2.addErrback(d.errback)
 return d

def loopUntil ( predicate , interval = 0 ) : from twisted . internet import task d = defer . Deferred ( ) def check ( ) : res = predicate ( ) if res : d . callback ( res ) call = task . LoopingCall ( check ) def stop ( result ) : call . stop ( ) return result d . addCallback ( stop ) d2 = call . start ( interval ) d2 . addErrback ( d . errback ) return d
poor excuse for an event notification helper .