Browse files

[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
  • Loading branch information...
1 parent 6b94c64 commit 7e1c67040c779765f1beb6e9be4caab26a6efd96 @jacobian jacobian committed Mar 1, 2010
Showing with 11 additions and 7 deletions.
  1. +1 −7 django/core/cache/backends/memcached.py
  2. +10 −0 tests/regressiontests/cache/tests.py
View
8 django/core/cache/backends/memcached.py
@@ -43,15 +43,9 @@ def get(self, key, default=None):
val = self._cache.get(smart_str(key))
if val is None:
return default
- else:
- if isinstance(val, basestring):
- return smart_unicode(val)
- else:
- return val
+ return val
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))
def delete(self, key):
View
10 tests/regressiontests/cache/tests.py
@@ -278,6 +278,16 @@ def test_unicode(self):
self.cache.set(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):
'''
Using a timeout greater than 30 days makes memcached think

0 comments on commit 7e1c670

Please sign in to comment.