Commit 7e1c6704 authored by Jacob Kaplan-Moss's avatar Jacob Kaplan-Moss
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
parent 6b94c645
Loading
Loading
Loading
Loading
+1 −7
Original line number Diff line number Diff line
@@ -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

    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):
+10 −0
Original line number Diff line number Diff line
@@ -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