def maybeCallbackGenerator(f, *args, **kw): try: result = f(*args, **kw) except Exception, e: return defer(_add_monocle_tb(e))
def maybeCallbackGenerator(f, *args, **kw): try: result = f(*args, **kw) except Exception, e: return defer(_add_monocle_tb(e)) if isinstance(result, types.GeneratorType): return _monocle_chain(None, result, Callback()) elif isinstance(result, Callback): return result elif isinstance(result, TwistedDeferred): cb = Callback() result.addCallbacks(cb, lambda f: cb(_add_twisted_tb(f))) return cb return defer(result) # @_o def _o(f): """ monocle helps you write Callback-using code that looks like a regular sequential function. For example:: @_o def foo(): result = yield makeSomeRequestResultingInCallback() print result When you call anything that results in a Callback, you can simply yield it; your generator will automatically be resumed when the Callback's result is