summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRussell Keith-Magee <russell@keith-magee.com>2011-03-19 02:45:51 +0000
committerRussell Keith-Magee <russell@keith-magee.com>2011-03-19 02:45:51 +0000
commit52e81079bee761500c21c11fa3cabf9a8da1546f (patch)
tree52c88645659fade1148d2dc4ca978c137de19f57
parent9ccf1d087e26260135851365deb04a74624bfbe9 (diff)
[1.2.X] Fixed #13686 -- Ensure that memcache handling of unicode values in add() and set_many() is consistent with the handling provided by get() and set(). Thanks to nedbatchelder for the report, and to jbalogh, accuser and Jacob Burch for their work ont the patch.
Backport of r15880 from trunk. git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.2.X@15881 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/core/cache/backends/memcached.py4
-rw-r--r--tests/regressiontests/cache/tests.py28
2 files changed, 28 insertions, 4 deletions
diff --git a/django/core/cache/backends/memcached.py b/django/core/cache/backends/memcached.py
index 7d6b5b362b..5e2eaa72a9 100644
--- a/django/core/cache/backends/memcached.py
+++ b/django/core/cache/backends/memcached.py
@@ -40,8 +40,6 @@ class CacheClass(BaseCache):
return timeout
def add(self, key, value, timeout=0):
- if isinstance(value, unicode):
- value = value.encode('utf-8')
return self._cache.add(smart_str(key), value, self._get_memcache_timeout(timeout))
def get(self, key, default=None):
@@ -92,8 +90,6 @@ class CacheClass(BaseCache):
def set_many(self, data, timeout=0):
safe_data = {}
for key, value in data.items():
- if isinstance(value, unicode):
- value = value.encode('utf-8')
safe_data[smart_str(key)] = value
self._cache.set_multi(safe_data, self._get_memcache_timeout(timeout))
diff --git a/tests/regressiontests/cache/tests.py b/tests/regressiontests/cache/tests.py
index f109e39f00..0581e4e7d8 100644
--- a/tests/regressiontests/cache/tests.py
+++ b/tests/regressiontests/cache/tests.py
@@ -293,20 +293,48 @@ class BaseCacheTests(object):
u'Iñtërnâtiônàlizætiøn': u'Iñtërnâtiônàlizætiøn2',
u'ascii': {u'x' : 1 }
}
+ # Test `set`
for (key, value) in stuff.items():
self.cache.set(key, value)
self.assertEqual(self.cache.get(key), value)
+ # Test `add`
+ for (key, value) in stuff.items():
+ self.cache.delete(key)
+ self.cache.add(key, value)
+ self.assertEqual(self.cache.get(key), value)
+
+ # Test `set_many`
+ for (key, value) in stuff.items():
+ self.cache.delete(key)
+ self.cache.set_many(stuff)
+ for (key, value) in stuff.items():
+ self.assertEqual(self.cache.get(key), value)
+
def test_binary_string(self):
# Binary strings should be cachable
from zlib import compress, decompress
value = 'value_to_be_compressed'
compressed_value = compress(value)
+
+ # Test set
self.cache.set('binary1', compressed_value)
compressed_result = self.cache.get('binary1')
self.assertEqual(compressed_value, compressed_result)
self.assertEqual(value, decompress(compressed_result))
+ # Test add
+ self.cache.add('binary1-add', compressed_value)
+ compressed_result = self.cache.get('binary1-add')
+ self.assertEqual(compressed_value, compressed_result)
+ self.assertEqual(value, decompress(compressed_result))
+
+ # Test set_many
+ self.cache.set_many({'binary1-set_many': compressed_value})
+ compressed_result = self.cache.get('binary1-set_many')
+ self.assertEqual(compressed_value, compressed_result)
+ self.assertEqual(value, decompress(compressed_result))
+
def test_set_many(self):
# Multiple keys can be set using set_many
self.cache.set_many({"key1": "spam", "key2": "eggs"})