Проверьте, кэширована ли функция / регион в Beaker/Dogpile

Используя модули Python Beaker или Dogpile для кеширования, можно ли проверить, присутствует ли область с определенным значением ключа в кеше или нет?

1 ответ

Допустим, у вас есть метод, который кэшируется с помощью beaker:

@cache_region('foo_term')
def cached_method(bar):
   return actual_method(bar)

Затем в вашем тесте вы можете пропатчить method_to_test и утверждать, что он называется / не вызывается:

def test_cache():
    with patch('package.module.actual_method') as m:
        cached_method(foo)
        assert m.call_args_list = [call(foo)] # Asserting it is not cached the first time

        cached_method(foo)
        assert m.call_args_list = [call(foo)] # Now asserting it is cached

        cached_method(bar)
        assert m.call_args_list = [call(foo), call(bar)] # asserting `bar' is not cached

Обратите внимание, что вы должны обернуть метод, который вы хотите кэшировать, в "кэшированную" версию функции и поместить декоратор кэша мензурки в кэшированную версию. Если, конечно, вы не найдете способ сделать patch работает с этой черной магией.

Другие вопросы по тегам