diff --git a/django/core/cache/backends/memcached.py b/django/core/cache/backends/memcached.py index 7d6b5b362b7c3..5e2eaa72a9792 100644 --- a/django/core/cache/backends/memcached.py +++ b/django/core/cache/backends/memcached.py @@ -40,8 +40,6 @@ def _get_memcache_timeout(self, timeout): 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 @@ def decr(self, key, delta=1): 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 f109e39f0005a..0581e4e7d8af9 100644 --- a/tests/regressiontests/cache/tests.py +++ b/tests/regressiontests/cache/tests.py @@ -293,20 +293,48 @@ def test_unicode(self): 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"})