Commit 88ff84dd by Calen Pennington

Use a key function that is safe for use w/ memcache

parent f632db0e
...@@ -31,7 +31,8 @@ CACHES = { ...@@ -31,7 +31,8 @@ CACHES = {
# In staging/prod envs, the sessions also live here. # In staging/prod envs, the sessions also live here.
'default': { 'default': {
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache', 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
'LOCATION': 'mitx_loc_mem_cache' 'LOCATION': 'mitx_loc_mem_cache',
'KEY_FUNCTION': 'util.memcache.safe_key',
}, },
# The general cache is what you get if you use our util.cache. It's used for # The general cache is what you get if you use our util.cache. It's used for
...@@ -43,6 +44,7 @@ CACHES = { ...@@ -43,6 +44,7 @@ CACHES = {
'BACKEND': 'django.core.cache.backends.dummy.DummyCache', 'BACKEND': 'django.core.cache.backends.dummy.DummyCache',
'KEY_PREFIX': 'general', 'KEY_PREFIX': 'general',
'VERSION': 4, 'VERSION': 4,
'KEY_FUNCTION': 'util.cache.memcache_safe_key',
} }
} }
......
...@@ -30,12 +30,14 @@ CACHES = { ...@@ -30,12 +30,14 @@ CACHES = {
'default': { 'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '127.0.0.1:11211', 'LOCATION': '127.0.0.1:11211',
'KEY_FUNCTION': 'util.memcache.safe_key',
}, },
'general': { 'general': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '127.0.0.1:11211', 'LOCATION': '127.0.0.1:11211',
'KEY_PREFIX' : 'general', 'KEY_PREFIX' : 'general',
'VERSION' : 5, 'VERSION' : 5,
'KEY_FUNCTION': 'util.memcache.safe_key',
} }
} }
......
...@@ -30,7 +30,8 @@ CACHES = { ...@@ -30,7 +30,8 @@ CACHES = {
# In staging/prod envs, the sessions also live here. # In staging/prod envs, the sessions also live here.
'default': { 'default': {
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache', 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
'LOCATION': 'mitx_loc_mem_cache' 'LOCATION': 'mitx_loc_mem_cache',
'KEY_FUNCTION': 'util.memcache.safe_key',
}, },
# The general cache is what you get if you use our util.cache. It's used for # The general cache is what you get if you use our util.cache. It's used for
...@@ -42,6 +43,7 @@ CACHES = { ...@@ -42,6 +43,7 @@ CACHES = {
'BACKEND': 'django.core.cache.backends.dummy.DummyCache', 'BACKEND': 'django.core.cache.backends.dummy.DummyCache',
'KEY_PREFIX': 'general', 'KEY_PREFIX': 'general',
'VERSION': 4, 'VERSION': 4,
'KEY_FUNCTION': 'util.memcache.safe_key',
} }
} }
......
...@@ -54,7 +54,8 @@ CACHES = { ...@@ -54,7 +54,8 @@ CACHES = {
# In staging/prod envs, the sessions also live here. # In staging/prod envs, the sessions also live here.
'default': { 'default': {
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache', 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
'LOCATION': 'mitx_loc_mem_cache' 'LOCATION': 'mitx_loc_mem_cache',
'KEY_FUNCTION': 'util.memcache.safe_key',
}, },
# The general cache is what you get if you use our util.cache. It's used for # The general cache is what you get if you use our util.cache. It's used for
...@@ -66,6 +67,7 @@ CACHES = { ...@@ -66,6 +67,7 @@ CACHES = {
'BACKEND': 'django.core.cache.backends.dummy.DummyCache', 'BACKEND': 'django.core.cache.backends.dummy.DummyCache',
'KEY_PREFIX': 'general', 'KEY_PREFIX': 'general',
'VERSION': 4, 'VERSION': 4,
'KEY_FUNCTION': 'util.memcache.safe_key',
} }
} }
......
"""
This module provides a KEY_FUNCTION suitable for use with a memcache backend
so that we can cache any keys, not just ones that memcache would ordinarily accept
"""
from django.utils.hashcompat import md5_constructor
from django.utils.encoding import smart_str
import string
def safe_key(key, key_prefix, version):
safe_key = smart_str(key)
for char in safe_key:
if ord(char) < 33 or ord(char) == 127:
safe_key = safe_key.replace(char, '_')
if len(safe_key) > 250:
safe_key = md5_constructor(safe_key)
return ":".join([key_prefix, str(version), safe_key])
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment