2011-01-25 3 views
2

У меня есть функция, которая украшена декоратором керамогранита. Функция находится в модуле, из которого он импортируется в основное приложение.Как сделать недействительным работу кэша Beaker?

from caching import cache, my_cached_function 

Теперь в одной функции я декорированная функция:

def index(): 
    data = my_cached_function() # no args 

В другой функции, я пытаюсь аннулирую кэш:

def new_item(): 
    cache.invalidate(my_cached_function, 'namespace') 

Поскольку кэш Beaker сконфигурирован с 'cache.type': 'memory' , Я также пробовал:

def new_item(): 
    cache.invalidate(my_cached_function, 'namespace', type='memory') 

Что я здесь делаю неправильно?

ПРИМЕЧАНИЯ

В типичном сценарии, я бы назвал индекс() большую часть времени. Мне нужно, чтобы кеш был очищен всякий раз, когда вызывается new_item(), так что вызов index() будет учитывать новые элементы, созданные функцией new_item().

Данное приложение представляет собой веб-приложение, работающее поверх рамки бутылки.

ответ

2

Вы должны аннулировать кеш до того, какmy_cached_function называется. См. Пример beaker.cache.CacheManager documentation.

+0

Он теоретически называется до my_cached_function. Когда пользователь создает новый элемент, вызывается функция new_item(), которая должна аннулировать кеш. Затем он посещает индексную страницу, где вызывается декорированная функция. На странице индекса должен отображаться список элементов _including_ новый, но это не так. – hayavuk

+0

О, и еще одно примечание. Кэш работает даже без признания недействительным. Я просто хочу применить недействительность. – hayavuk

+0

Вместо того, чтобы недействить кеш в 'new_item', попробуйте установить ключ' should_invalidate_item_cache' в 'True' в сеансе, а в' index' - недействительный, если это значение 'True'. (Это просто догадка, не проверенная.) –

Смежные вопросы