def _check_cache_key(self, _callable, cache_key, *args, **kwargs): self.local_cache.clear() self.assertNotIn(cache_key, self.local_cache) _callable(*args, **kwargs) self.assertIn(cache_key, self.local_cache) as_property = getattr(_callable, 'property', False) if as_property: invalidate_cache_key(cache_key) else: _callable.invalidate_cache_by_key(*args, **kwargs) self.assertNotIn(cache_key, self.local_cache) _callable(*args, **kwargs)
def test_invalidators(self): a, b = u'a', u'b' cache_callable = ordinal_func cache_prefix = ordinal_func.prefix cache_key = create_cache_key(cache_prefix, a, b) self.cache.reset_mock() result = process_args(a=a, b=b) self.assertEqual(cache_callable(a=a, b=b), result) self.cache.assert_called_once_with(result) self.cache.reset_mock() # cached version self.assertEqual(cache_callable(a=a, b=b), result) self.assertFalse(self.cache.called) self.cache.reset_mock() # invalidate cache via cache key invalidate_cache_key(cache_key) self.assertEqual(cache_callable(a=a, b=b), result) self.cache.assert_called_once_with(result) self.cache.reset_mock() # cached version self.assertEqual(cache_callable(a=a, b=b), result) self.assertFalse(self.cache.called) self.cache.reset_mock() # invalidate cache via prefix invalidate_cache_prefix(cache_prefix) self.assertEqual(cache_callable(a=a, b=b), result) self.cache.assert_called_once_with(result) self.cache.reset_mock() # cached version self.assertEqual(cache_callable(a=a, b=b), result) self.assertFalse(self.cache.called) self.cache.reset_mock() # invalidate cache via attached invalidator cache_callable.invalidate_cache_by_key(a=a, b=b) self.assertEqual(cache_callable(a=a, b=b), result) self.cache.assert_called_once_with(result) self.cache.reset_mock()