示例#1
0
        def new_fn(*a, **kw):

            #if the keyword param _update == True, the cache will be
            #overwritten no matter what
            update = kw.pop('_update', False)

            key = make_key(iden, *a, **kw)

            res = None if update else memoizecache.get(key, stale=stale)

            if res is None:
                # not cached, we should calculate it.
                with make_lock("memoize",
                               'memoize_lock(%s)' % key,
                               time=timeout,
                               timeout=timeout):

                    # see if it was completed while we were waiting
                    # for the lock
                    stored = None if update else memoizecache.get(key)
                    if stored is not None:
                        # it was calculated while we were waiting
                        res = stored
                    else:
                        # okay now go and actually calculate it
                        res = fn(*a, **kw)
                        if res is None:
                            res = NoneResult
                        memoizecache.set(key, res, time=time)

            if res == NoneResult:
                res = None

            return res
示例#2
0
文件: memoize.py 项目: 3river/reddit
        def new_fn(*a, **kw):

            #if the keyword param _update == True, the cache will be
            #overwritten no matter what
            update = kw.pop('_update', False)

            key = make_key(iden, *a, **kw)

            res = None if update else cache.get(key, stale=stale)

            if res is None:
                # not cached, we should calculate it.
                with make_lock('memoize_lock(%s)' % key):
                    # see if it was completed while we were waiting
                    # for the lock
                    stored = None if update else cache.get(key)
                    if stored is not None:
                        # it was calculated while we were waiting
                        res = stored
                    else:
                        # okay now go and actually calculate it
                        res = fn(*a, **kw)
                        if res is None:
                            res = NoneResult
                        cache.set(key, res, time = time)

            if res == NoneResult:
                res = None

            return res
示例#3
0
def get_image(iden):
    key = make_key(iden)
    solution = g.cache.get(key)
    if not solution:
        solution = make_solution()
        g.cache.set(key, solution, time=300)
    return RandCaptcha(solution=solution).render()
示例#4
0
def get_image(iden):
    key = make_key(iden)
    solution = g.cache.get(key)
    if not solution:
        solution = make_solution()
        g.cache.set(key, solution, time = 300)
    return RandCaptcha(solution=solution).render()
示例#5
0
        def new_fn(*a, **kw):

            #if the keyword param _update == True, the cache will be
            #overwritten no matter what
            update = False
            if kw.has_key('_update'):
                update = kw['_update']
                del kw['_update']

            key = make_key(iden, *a, **kw)

            res = None if update else cache.get(key)

            if res is None:
                # not cached, we should calculate it.
                with make_lock('memoize_lock(%s)' % key):
                    stored = None if update else cache.get(key)
                    if stored is None:
                        # okay now go and actually calculate it
                        res = fn(*a, **kw)
                        if res is None:
                            res = NoneResult
                        cache.set(key, res, time = time)
                    else:
                        # it was calculated while we were waiting on
                        # the lock
                        res = stored

            if res == NoneResult:
                res = None

            return res
示例#6
0
        def new_fn(*a, **kw):

            #if the keyword param _update == True, the cache will be
            #overwritten no matter what
            update = False
            if kw.has_key('_update'):
                update = kw['_update']
                del kw['_update']

            key = make_key(iden, *a, **kw)

            res = None if update else cache.get(key)

            if res is None:
                # not cached, we should calculate it.
                with make_lock('memoize_lock(%s)' % key):
                    stored = None if update else cache.get(key)
                    if stored is None:
                        # okay now go and actually calculate it
                        res = fn(*a, **kw)
                        if res is None:
                            res = NoneResult
                        cache.set(key, res, time=time)
                    else:
                        # it was calculated while we were waiting on
                        # the lock
                        res = stored

            if res == NoneResult:
                res = None

            return res
示例#7
0
 def request_key(self):
     return make_key('request',
                     c.lang,
                     c.content_langs,
                     request.host,
                     c.cname,
                     request.fullpath,
                     random.choice(xrange(100)))
示例#8
0
 def request_key(self):
     return make_key('request_key',
                     c.lang,
                     c.content_langs,
                     request.host,
                     c.cname,
                     request.fullpath,
                     random.choice(xrange(100)))
示例#9
0
def valid_solution(iden, solution):
    key = make_key(iden)

    if (not iden or not solution or len(iden) != IDEN_LENGTH
            or len(solution) != SOL_LENGTH
            or solution.upper() != g.cache.get(key)):
        solution = make_solution()
        g.cache.set(key, solution, time=300)
        return False
    else:
        g.cache.delete(key)
        return True
示例#10
0
    def request_key(self):
        # note that this references the cookie at request time, not
        # the current value of it
        try:
            cookies_key = [(x, request.cookies.get(x, ''))
                           for x in cache_affecting_cookies]
        except CookieError:
            cookies_key = ''

        return make_key('request_key_', c.lang, c.content_langs, request.host,
                        c.secure, c.cname, request.fullpath, c.over18,
                        c.firsttime, c.extension, c.render_style, cookies_key)
示例#11
0
def valid_solution(iden, solution):
    key = make_key(iden)

    if (not iden
        or not solution
        or len(iden) != IDEN_LENGTH
        or len(solution) != SOL_LENGTH
        or solution.upper() != g.cache.get(key)):
        solution = make_solution()
        g.cache.set(key, solution, time = 300)
        return False
    else:
        g.cache.delete(key)
        return True
示例#12
0
    def request_key(self):
        # note that this references the cookie at request time, not
        # the current value of it
        try:
            cookies_key = [(x, request.cookies.get(x,''))
                           for x in cache_affecting_cookies]
        except CookieError:
            cookies_key = ''

        return make_key('request_key_',
                        c.lang,
                        c.content_langs,
                        request.host,
                        c.cname,
                        request.fullpath,
                        c.over18,
                        c.firsttime,
                        cookies_key)
示例#13
0
    def request_key(self):
        # note that this references the cookie at request time, not
        # the current value of it
        try:
            cookies_key = [(x, request.cookies.get(x, "")) for x in cache_affecting_cookies]
        except CookieError:
            cookies_key = ""

        return make_key(
            "request",
            c.lang,
            c.content_langs,
            request.host,
            c.secure,
            c.cname,
            request.fullpath,
            c.over18,
            c.extension,
            c.render_style,
            cookies_key,
        )