Fixed #11012: don't needless convert cache values to unicode.
This means you can now successfully store binary blogs, such as compressed data, in the cache. Thanks to Matt Croydon for the final patch. git-svn-id: http://code.djangoproject.com/svn/django/trunk@12637 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
6e748b5db4
commit
b3a56755d7
|
@ -43,15 +43,9 @@ class CacheClass(BaseCache):
|
||||||
val = self._cache.get(smart_str(key))
|
val = self._cache.get(smart_str(key))
|
||||||
if val is None:
|
if val is None:
|
||||||
return default
|
return default
|
||||||
else:
|
return val
|
||||||
if isinstance(val, basestring):
|
|
||||||
return smart_unicode(val)
|
|
||||||
else:
|
|
||||||
return val
|
|
||||||
|
|
||||||
def set(self, key, value, timeout=0):
|
def set(self, key, value, timeout=0):
|
||||||
if isinstance(value, unicode):
|
|
||||||
value = value.encode('utf-8')
|
|
||||||
self._cache.set(smart_str(key), value, self._get_memcache_timeout(timeout))
|
self._cache.set(smart_str(key), value, self._get_memcache_timeout(timeout))
|
||||||
|
|
||||||
def delete(self, key):
|
def delete(self, key):
|
||||||
|
|
|
@ -295,6 +295,16 @@ class BaseCacheTests(object):
|
||||||
self.cache.set(key, value)
|
self.cache.set(key, value)
|
||||||
self.assertEqual(self.cache.get(key), value)
|
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)
|
||||||
|
self.cache.set('binary1', compressed_value)
|
||||||
|
compressed_result = self.cache.get('binary1')
|
||||||
|
self.assertEqual(compressed_value, compressed_result)
|
||||||
|
self.assertEqual(value, decompress(compressed_result))
|
||||||
|
|
||||||
def test_set_many(self):
|
def test_set_many(self):
|
||||||
# Multiple keys can be set using set_many
|
# Multiple keys can be set using set_many
|
||||||
self.cache.set_many({"key1": "spam", "key2": "eggs"})
|
self.cache.set_many({"key1": "spam", "key2": "eggs"})
|
||||||
|
|
Loading…
Reference in New Issue