1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | import md5
from django.conf import settings
def safe_cache_key(value):
'''Returns an md5 hexdigest of value if len(value) > 250. Replaces invalid memcache
control characters with an underscore. Also adds the CACHE_MIDDLEWARE_KEY_PREFIX
to your keys automatically.
'''
for char in value:
if ord(char) < 33:
value = value.replace(char, '_')
value = "%s_%s" % (settings.CACHE_MIDDLEWARE_KEY_PREFIX, value)
if len(value) <= 250:
return value
return md5.new(value).hexdigest()
|
Comments
I was looking for this kind of cache key generator for memcached recently and here it is :)
One thing that might be considered when using this snippet is to replace md5 by hashlib library if you tend to use newer python version (md5 is deprecated in python2.5).
#
Actually, you can use django.utils.hashcompat.md5_constructor, which will use hashlib when available, and fallback to the old md5 import. The last line would be md5_constructor(value).digest()
#