2016-05-12 33 views
6

Ich habe und Zope-Dienstprogramm mit einer Methode, die Netzwerkprozesse durchzuführen. Da das Ergebnis für eine Weile gültig ist, verwende ich plone.memoize.ram, um das Ergebnis zwischenzuspeichern.Invalidate/verhindern memoize mit plone.memoize.ram

MyClass(object): 

    @cache(cache_key) 
    def do_auth(self, adapter, data): 
     # performing expensive network process here 

... und die Cache-Funktion:

def cache_key(method, utility, data): 
    return time() // 60 * 60)) 

Aber ich will die memoization verhindern stattzufinden, wenn der do_auth Anruf leer Ergebnisse zurückgibt (oder Netzwerkfehler zu erhöhen).

Mit Blick auf die plone.memoize Code scheint es, ich brauche raise ram.DontCache() Ausnahme, aber bevor ich dies tun muss ich eine Möglichkeit, den alten zwischengespeicherten Wert zu untersuchen.

Wie kann ich die zwischengespeicherten Daten aus dem Cache-Speicher?

Antwort

3

Ich habe dies zusammen aus mehreren Code, den ich schrieb ... Es ist nicht getestet, sondern kann Ihnen helfen.

Sie können die im Cache gespeicherten Daten zugreifen, die ICacheChooser Dienstprogramm. Es ist Call-Methode muss die gepunkteten Namen der Funktion, die Sie in Ihrem Fall zwischengespeichert, selbst

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

In cached_infos sollte es alle Infos, die Sie brauchen.