Hi Sergey

> How to rewrite this regular function with Deferred-style?

Something like the below (untested) will do the job.  You'd have to make
sure that cache.open returned a deferred that fails with NotFound in case
things don't work out.

It would be simpler to translate your code using inlineCallbacks, but it
might be to your advantage to first see how to do it without that.  If you
do take that approach you might want to do some timing tests.

Terry

---

def getCachedResult(cache, key):

    def release(result, item):
        item.release()
        return result

    def renew(data):
        return renew(data)

    def notFound(fail):
        fail.trap(NotFound)

    def checkObsolete(item):
        if item.obsolete():
            return None
        else:
            d = item.read()
            d.addBoth(release, item)
            d.addCallback(renew)
            return d

    d = cache.open(key)
    d.addCallbacks(checkObsolete, notFound)
    return d

_______________________________________________
Twisted-Python mailing list
Twisted-Python@twistedmatrix.com
http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python

Reply via email to