mirror of https://github.com/django/django.git
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.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@15880 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
bd0daa04f5
commit
1a6d98dab9
|
@ -51,8 +51,6 @@ class BaseMemcachedCache(BaseCache):
|
|||
|
||||
def add(self, key, value, timeout=0, version=None):
|
||||
key = self.make_key(key, version=version)
|
||||
if isinstance(value, unicode):
|
||||
value = value.encode('utf-8')
|
||||
return self._cache.add(key, value, self._get_memcache_timeout(timeout))
|
||||
|
||||
def get(self, key, default=None, version=None):
|
||||
|
@ -118,8 +116,6 @@ class BaseMemcachedCache(BaseCache):
|
|||
safe_data = {}
|
||||
for key, value in data.items():
|
||||
key = self.make_key(key, version=version)
|
||||
if isinstance(value, unicode):
|
||||
value = value.encode('utf-8')
|
||||
safe_data[key] = value
|
||||
self._cache.set_multi(safe_data, self._get_memcache_timeout(timeout))
|
||||
|
||||
|
|
|
@ -317,20 +317,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"})
|
||||
|
|
Loading…
Reference in New Issue