All pastes #396386 Raw Edit

Sample decorator

public text v1 · immutable
·published 2007-03-15 18:37 UTC
rendered paste body
def runInUIThread(func):
    def decorate(*args, **kw):
        d = Deferred()       
        if thread.get_ident() == UI_Thread:
            try:
                d.callback(func(*args, **kw))
            except:
                d.errback()
        else:
            def callback():
                try:
                    result = func(*args, **kw)
                except:
                    f = failure.Failure()
                    reactor.callFromThread(d.errback, f)
                else:
                    reactor.callFromThread(d.callback, result)               
            PostAsyncEvent(callback)
        return d
    return decorate