Loading AUTHORS +1 −0 Original line number Diff line number Diff line Loading @@ -231,6 +231,7 @@ answer newbie questions, and generally made Django that much better: Simon Greenhill <dev@simon.net.nz> Owen Griffiths Espen Grindhaug <http://grindhaug.org/> Mike Grouchy <http://mikegrouchy.com/> Janos Guljas Thomas Güttler <hv@tbz-pariv.de> Horst Gutmann <zerok@zerokspot.com> Loading django/core/cache/__init__.py +3 −5 Original line number Diff line number Diff line Loading @@ -134,11 +134,9 @@ def get_cache(backend, **kwargs): "Could not find backend '%s': %s" % (backend, e)) cache = backend_cls(location, params) # Some caches -- python-memcached in particular -- need to do a cleanup at the # end of a request cycle. If the cache provides a close() method, wire it up # here. if hasattr(cache, 'close'): # end of a request cycle. If not implemented in a particular backend # cache.close is a no-op signals.request_finished.connect(cache.close) return cache cache = get_cache(DEFAULT_CACHE_ALIAS) django/core/cache/backends/base.py +9 −0 Original line number Diff line number Diff line Loading @@ -6,15 +6,18 @@ import warnings from django.core.exceptions import ImproperlyConfigured, DjangoRuntimeWarning from django.utils.importlib import import_module class InvalidCacheBackendError(ImproperlyConfigured): pass class CacheKeyWarning(DjangoRuntimeWarning): pass # Memcached does not accept keys longer than this. MEMCACHE_MAX_KEY_LENGTH = 250 def default_key_func(key, key_prefix, version): """ Default function to generate keys. Loading @@ -25,6 +28,7 @@ def default_key_func(key, key_prefix, version): """ return ':'.join([key_prefix, str(version), key]) def get_key_func(key_func): """ Function to decide which key function to use. Loading @@ -40,6 +44,7 @@ def get_key_func(key_func): return getattr(key_func_module, key_func_name) return default_key_func class BaseCache(object): def __init__(self, params): timeout = params.get('timeout', params.get('TIMEOUT', 300)) Loading Loading @@ -221,3 +226,7 @@ class BaseCache(object): the new version. """ return self.incr_version(key, -delta, version) def close(self, **kwargs): """Close the cache connection""" pass docs/topics/cache.txt +10 −0 Original line number Diff line number Diff line Loading @@ -785,6 +785,16 @@ nonexistent cache key.:: However, if the backend doesn't natively provide an increment/decrement operation, it will be implemented using a two-step retrieve/update. You can close the connection to your cache with ``close()`` if implemented by the cache backend. >>> cache.close() .. note:: For caches that don't implement ``close`` methods it is a no-op. .. _cache_key_prefixing: Cache key prefixing Loading tests/regressiontests/cache/tests.py +4 −0 Original line number Diff line number Diff line Loading @@ -270,6 +270,10 @@ class BaseCacheTests(object): self.assertEqual(self.cache.decr('answer', -10), 42) self.assertRaises(ValueError, self.cache.decr, 'does_not_exist') def test_close(self): self.assertTrue(hasattr(self.cache, 'close')) self.cache.close() def test_data_types(self): # Many different data types can be cached stuff = { Loading Loading
AUTHORS +1 −0 Original line number Diff line number Diff line Loading @@ -231,6 +231,7 @@ answer newbie questions, and generally made Django that much better: Simon Greenhill <dev@simon.net.nz> Owen Griffiths Espen Grindhaug <http://grindhaug.org/> Mike Grouchy <http://mikegrouchy.com/> Janos Guljas Thomas Güttler <hv@tbz-pariv.de> Horst Gutmann <zerok@zerokspot.com> Loading
django/core/cache/__init__.py +3 −5 Original line number Diff line number Diff line Loading @@ -134,11 +134,9 @@ def get_cache(backend, **kwargs): "Could not find backend '%s': %s" % (backend, e)) cache = backend_cls(location, params) # Some caches -- python-memcached in particular -- need to do a cleanup at the # end of a request cycle. If the cache provides a close() method, wire it up # here. if hasattr(cache, 'close'): # end of a request cycle. If not implemented in a particular backend # cache.close is a no-op signals.request_finished.connect(cache.close) return cache cache = get_cache(DEFAULT_CACHE_ALIAS)
django/core/cache/backends/base.py +9 −0 Original line number Diff line number Diff line Loading @@ -6,15 +6,18 @@ import warnings from django.core.exceptions import ImproperlyConfigured, DjangoRuntimeWarning from django.utils.importlib import import_module class InvalidCacheBackendError(ImproperlyConfigured): pass class CacheKeyWarning(DjangoRuntimeWarning): pass # Memcached does not accept keys longer than this. MEMCACHE_MAX_KEY_LENGTH = 250 def default_key_func(key, key_prefix, version): """ Default function to generate keys. Loading @@ -25,6 +28,7 @@ def default_key_func(key, key_prefix, version): """ return ':'.join([key_prefix, str(version), key]) def get_key_func(key_func): """ Function to decide which key function to use. Loading @@ -40,6 +44,7 @@ def get_key_func(key_func): return getattr(key_func_module, key_func_name) return default_key_func class BaseCache(object): def __init__(self, params): timeout = params.get('timeout', params.get('TIMEOUT', 300)) Loading Loading @@ -221,3 +226,7 @@ class BaseCache(object): the new version. """ return self.incr_version(key, -delta, version) def close(self, **kwargs): """Close the cache connection""" pass
docs/topics/cache.txt +10 −0 Original line number Diff line number Diff line Loading @@ -785,6 +785,16 @@ nonexistent cache key.:: However, if the backend doesn't natively provide an increment/decrement operation, it will be implemented using a two-step retrieve/update. You can close the connection to your cache with ``close()`` if implemented by the cache backend. >>> cache.close() .. note:: For caches that don't implement ``close`` methods it is a no-op. .. _cache_key_prefixing: Cache key prefixing Loading
tests/regressiontests/cache/tests.py +4 −0 Original line number Diff line number Diff line Loading @@ -270,6 +270,10 @@ class BaseCacheTests(object): self.assertEqual(self.cache.decr('answer', -10), 42) self.assertRaises(ValueError, self.cache.decr, 'does_not_exist') def test_close(self): self.assertTrue(hasattr(self.cache, 'close')) self.cache.close() def test_data_types(self): # Many different data types can be cached stuff = { Loading