使用plone.memoize.ram无效/阻止memoize

keu*_*eul 6 plone memoization

我和Zope实用程序使用一种执行网络进程的方法.由于该结果有效一段时间,我正在使用plone.memoize.ram缓存结果.

MyClass(object):

    @cache(cache_key)
    def do_auth(self, adapter, data):
        # performing expensive network process here
Run Code Online (Sandbox Code Playgroud)

...和缓存功能:

def cache_key(method, utility, data):
    return time() // 60 * 60))
Run Code Online (Sandbox Code Playgroud)

但是我想阻止在do_auth调用返回空结果(或引发网络错误)时发生memoization .

看看plone.memoize代码,似乎我需要raise ram.DontCache()异常,但在这之前我需要一种方法来调查旧的缓存值.

如何从缓存存储中获取缓存数据?

Mat*_*ias 4

我把它从我写的几个代码中组合在一起......它没有经过测试,但可能对你有帮助。

您可以使用 ICacheChooser 实用程序访问缓存的数据。它的调用方法需要您缓存的函数的点名称(在您的情况本身)

key = '{0}.{1}'.format(__name__, method.__name__)
cache = getUtility(ICacheChooser)(key)
storage = cache.ramcache._getStorage()._data
cached_infos = storage.get(key)
Run Code Online (Sandbox Code Playgroud)

在cached_infos 中应该有您需要的所有信息。