2016-05-12 24 views
6

Ive e utilità Zope con un metodo che esegue i processi di rete. Poiché il risultato è valido per un po ', sto usando plone.memoize.ram per memorizzare il risultato nella cache.Invalidate/prevent memoize con plone.memoize.ram

MyClass(object): 

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

... e la funzione di cache:

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

Ma voglio evitare che il Memoizzazione avvenire quando la chiamata do_auth restituisce i risultati vuoti (o rilanciare errori di rete).

Guardando il codice plone.memoize sembra necessario l'errore raise ram.DontCache(), ma prima di farlo ho bisogno di un modo per indagare sul vecchio valore memorizzato nella cache.

Come posso ottenere i dati memorizzati nella cache dalla memoria cache?

risposta

3

L'ho messo insieme da diversi codici che ho scritto ... Non è testato ma può aiutarti.

È possibile accedere ai dati memorizzati nella cache utilizzando l'utilità ICacheChooser. chiamata al metodo di Deve il nome puntato per la funzione memorizzata nella cache, nel vostro caso si

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

In cached_infos ci dovrebbe essere tutte le informazioni necessarie.