1
0
mirror of https://github.com/django/django.git synced 2025-10-24 14:16:09 +00:00

Fixed #26462 -- Fixed Python 2 UnicodeEncodeError when warning about long cache keys.

This commit is contained in:
Przemysław Suliga
2016-04-04 20:18:11 +02:00
committed by Tim Graham
parent 369fa471f4
commit 90ce5d46bf
2 changed files with 19 additions and 3 deletions

20
tests/cache/tests.py vendored
View File

@@ -585,15 +585,31 @@ class BaseCacheTests(object):
with warnings.catch_warnings(record=True) as w:
warnings.simplefilter("always")
# memcached does not allow whitespace or control characters in keys
cache.set('key with spaces', 'value')
key = 'key with spaces and 清'
cache.set(key, 'value')
self.assertEqual(len(w), 1)
self.assertIsInstance(w[0].message, CacheKeyWarning)
self.assertEqual(
# warnings.warn() crashes on Python 2 if message isn't
# coercible to str.
str(w[0].message.args[0]),
"Cache key contains characters that will cause errors if used "
"with memcached: %r" % key,
)
with warnings.catch_warnings(record=True) as w:
warnings.simplefilter("always")
# memcached limits key length to 250
cache.set('a' * 251, 'value')
key = ('a' * 250) + ''
cache.set(key, 'value')
self.assertEqual(len(w), 1)
self.assertIsInstance(w[0].message, CacheKeyWarning)
self.assertEqual(
# warnings.warn() crashes on Python 2 if message isn't
# coercible to str.
str(w[0].message.args[0]),
'Cache key will cause errors if used with memcached: '
'%r (longer than %s)' % (key, 250),
)
finally:
cache.key_func = old_func