def inlineCallbacks(f):
    @wraps(f)
    def unwindGenerator(*args, **kwargs):
        try:
            gen = f(*args, **kwargs)
        except _DefGen_Return:
            raise TypeError(
                "inlineCallbacks requires %r to produce a generator; instead"
                "caught returnValue being used in a non-generator" % (f,))
        if not isinstance(gen, types.GeneratorType):
            raise TypeError(
                "inlineCallbacks requires %r to produce a generator; "
                "instead got %r" % (f, gen))
        return _inlineCallbacks(None, gen, Deferred())
    return unwindGenerator


## DeferredLock/DeferredQueue
Encodes a user key with salt into a particular format. The result of
dataset/ETHPy150Open twisted/twisted/twisted/internet/defer.py/inlineCallbacks--crossover with--dataset/ETHPy150Open openstack/swauth/swauth/authtypes.py/Sha512.encode_w_salt