Loading django/core/cache/backends/memcached.py +7 −0 Original line number Diff line number Diff line "Memcached cache backend" import time import pickle from threading import local from django.core.cache.backends.base import BaseCache, InvalidCacheBackendError Loading Loading @@ -146,6 +147,12 @@ class MemcachedCache(BaseMemcachedCache): library=memcache, value_not_found_exception=ValueError) @property def _cache(self): if getattr(self, '_client', None) is None: self._client = self._lib.Client(self._servers, pickleProtocol=pickle.HIGHEST_PROTOCOL) return self._client class PyLibMCCache(BaseMemcachedCache): "An implementation of a cache binding using pylibmc" def __init__(self, server, params): Loading docs/releases/1.6.txt +3 −0 Original line number Diff line number Diff line Loading @@ -89,6 +89,9 @@ Minor features :class:`~django.http.HttpResponsePermanentRedirect` now provide an ``url`` attribute (equivalent to the URL the response will redirect to). * The ``MemcachedCache`` cache backend now uses the latest :mod:`pickle` protocol available. * Added the :attr:`django.db.models.ForeignKey.db_constraint` option. Loading tests/regressiontests/cache/tests.py +13 −0 Original line number Diff line number Diff line Loading @@ -12,6 +12,7 @@ import string import tempfile import time import warnings import pickle from django.conf import settings from django.core import management Loading Loading @@ -984,6 +985,18 @@ class MemcachedCacheTests(unittest.TestCase, BaseCacheTests): # memcached limits key length to 250 self.assertRaises(Exception, self.cache.set, 'a' * 251, 'value') # Explicitly display a skipped test if no configured cache uses MemcachedCache @unittest.skipUnless( any(cache['BACKEND'] == 'django.core.cache.backends.memcached.MemcachedCache' for cache in settings.CACHES.values()), "cache with python-memcached library not available") def test_memcached_uses_highest_pickle_version(self): # Regression test for #19810 for cache_key, cache in settings.CACHES.items(): if cache['BACKEND'] == 'django.core.cache.backends.memcached.MemcachedCache': self.assertEqual(get_cache(cache_key)._cache.pickleProtocol, pickle.HIGHEST_PROTOCOL) class FileBasedCacheTests(unittest.TestCase, BaseCacheTests): """ Loading Loading
django/core/cache/backends/memcached.py +7 −0 Original line number Diff line number Diff line "Memcached cache backend" import time import pickle from threading import local from django.core.cache.backends.base import BaseCache, InvalidCacheBackendError Loading Loading @@ -146,6 +147,12 @@ class MemcachedCache(BaseMemcachedCache): library=memcache, value_not_found_exception=ValueError) @property def _cache(self): if getattr(self, '_client', None) is None: self._client = self._lib.Client(self._servers, pickleProtocol=pickle.HIGHEST_PROTOCOL) return self._client class PyLibMCCache(BaseMemcachedCache): "An implementation of a cache binding using pylibmc" def __init__(self, server, params): Loading
docs/releases/1.6.txt +3 −0 Original line number Diff line number Diff line Loading @@ -89,6 +89,9 @@ Minor features :class:`~django.http.HttpResponsePermanentRedirect` now provide an ``url`` attribute (equivalent to the URL the response will redirect to). * The ``MemcachedCache`` cache backend now uses the latest :mod:`pickle` protocol available. * Added the :attr:`django.db.models.ForeignKey.db_constraint` option. Loading
tests/regressiontests/cache/tests.py +13 −0 Original line number Diff line number Diff line Loading @@ -12,6 +12,7 @@ import string import tempfile import time import warnings import pickle from django.conf import settings from django.core import management Loading Loading @@ -984,6 +985,18 @@ class MemcachedCacheTests(unittest.TestCase, BaseCacheTests): # memcached limits key length to 250 self.assertRaises(Exception, self.cache.set, 'a' * 251, 'value') # Explicitly display a skipped test if no configured cache uses MemcachedCache @unittest.skipUnless( any(cache['BACKEND'] == 'django.core.cache.backends.memcached.MemcachedCache' for cache in settings.CACHES.values()), "cache with python-memcached library not available") def test_memcached_uses_highest_pickle_version(self): # Regression test for #19810 for cache_key, cache in settings.CACHES.items(): if cache['BACKEND'] == 'django.core.cache.backends.memcached.MemcachedCache': self.assertEqual(get_cache(cache_key)._cache.pickleProtocol, pickle.HIGHEST_PROTOCOL) class FileBasedCacheTests(unittest.TestCase, BaseCacheTests): """ Loading