mirror of
https://github.com/django/django.git
synced 2025-07-05 10:19:20 +00:00
[1.1.X] 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. Backport of [12637] from trunk. git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.1.X@12638 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
6b94c64554
commit
7e1c67040c
6
django/core/cache/backends/memcached.py
vendored
6
django/core/cache/backends/memcached.py
vendored
@ -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:
|
|
||||||
if isinstance(val, basestring):
|
|
||||||
return smart_unicode(val)
|
|
||||||
else:
|
|
||||||
return val
|
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):
|
||||||
|
10
tests/regressiontests/cache/tests.py
vendored
10
tests/regressiontests/cache/tests.py
vendored
@ -278,6 +278,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_long_timeout(self):
|
def test_long_timeout(self):
|
||||||
'''
|
'''
|
||||||
Using a timeout greater than 30 days makes memcached think
|
Using a timeout greater than 30 days makes memcached think
|
||||||
|
Loading…
x
Reference in New Issue
Block a user