From 7e1c67040c779765f1beb6e9be4caab26a6efd96 Mon Sep 17 00:00:00 2001 From: Jacob Kaplan-Moss Date: Mon, 1 Mar 2010 20:14:18 +0000 Subject: [PATCH] [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 --- django/core/cache/backends/memcached.py | 8 +------- tests/regressiontests/cache/tests.py | 10 ++++++++++ 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/django/core/cache/backends/memcached.py b/django/core/cache/backends/memcached.py index 15f3cc0bf8..c3f20bab8a 100644 --- a/django/core/cache/backends/memcached.py +++ b/django/core/cache/backends/memcached.py @@ -43,15 +43,9 @@ class CacheClass(BaseCache): 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): diff --git a/tests/regressiontests/cache/tests.py b/tests/regressiontests/cache/tests.py index 3a6c168530..ee10fad664 100644 --- a/tests/regressiontests/cache/tests.py +++ b/tests/regressiontests/cache/tests.py @@ -278,6 +278,16 @@ class BaseCacheTests(object): 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